C# OfType使用

这段博客介绍了C#中如何使用`OfType`方法从列表中筛选特定类型的元素,例如从`List`筛选出`string`。同时,展示了如何通过`GetCustomAttributes`结合`OfType`查找带有特定特性(如`TestAttribute`)的构造函数。示例代码展示了从基类列表中筛选出具有特定特性的子类构造方法。 摘要由CSDN通过智能技术生成

1、源码:

 public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source) {
            if (source == null) throw Error.ArgumentNull("source");
            return OfTypeIterator<TResult>(source);
        }
 
        static IEnumerable<TResult> OfTypeIterator<TResult>(IEnumerable source) {
            foreach (object obj in source) {
                if (obj is TResult) yield return (TResult)obj;
            }
        }

从源码可以看出,在原列表中经过筛选返回指定类型的目标列表

2、如下例子: 

List<object> list = new List<object>();

            list.Add(1);
            list.Add(2);
            list.Add(3);
            list.Add("4");
            list.Add("5");
            list.Add(6);

   var strList = list.OfType<string>();

最后得到 “4”, “5”的字符列表

父子类的区分也可用这种方法

  [AttributeUsage(AttributeTargets.Constructor)]
    public class TestAttribute : Attribute { }

 public abstract class BaseInfo
    {
        [Test]
        public BaseInfo() { }
       public abstract string GetName();
    }



   var constructors=  typeof(BaseInfo).GetConstructors();

    var constructor=  constructors.FirstOrDefault(it =>
          it.GetCustomAttributes(false).OfType<TestAttribute>().Any());

筛选构造方法携带Test特性的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShanShanYouWen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值