【问题标题】:Convert code that uses Linq to code that does not将使用 Linq 的代码转换为不使用 Linq 的代码
【发布时间】:2011-08-07 14:22:32
【问题描述】:

以下代码 sn-p 返回一个具有已定义属性的 PropertyInfo 对象数组:

var props = t.GetProperties().Where(
                         prop => Attribute.IsDefined(prop, typeof(MyAttribute)));

.
.
我如何在 .NET2.0 中做同样的事情,因此 没有 使用 Linq?

【问题讨论】:

    标签: c# linq reflection attributes .net-2.0


    【解决方案1】:

    试试

    List<PropertyInfo> props = new List<PropertyInfo> ();
    
    foreach (PropertyInfo prop in t.GetProperties())
    {
        if ( Attribute.IsDefined(prop, typeof(MyAttribute)) )
             props.Add (prop);
    }
    

    【讨论】:

      【解决方案2】:

      ArrayList&lt;T&gt; 类为您提供了许多与 LINQ 相同的功能。对于这个,我可能会选择:

      PropertyInfo[] props = Array.FindAll(t.GetProperties(), 
          delegate(PropertyInfo p) { 
              return Attribute.IsDefined(p, typeof(SerializableAttribute));
          });
      

      List<PropertyInfo> props2 = new List<PropertyInfo>(t.GetProperties()).FindAll(
          delegate(PropertyInfo p) {
              return Attribute.IsDefined(p, typeof(SerializableAttribute));
          });
      

      【讨论】:

        【解决方案3】:

        我会使用LinqBridge 来完成这样的任务。 LINQ 是 C# 的编译时功能,而不是 .net 运行时功能。因此,您可以在 .net 2.0 中复制该库,同时仍使用 C# 3.0 编译器。

        如果你坚持:

        List<PropertyInfo> l = new List<PropertyInfo>();
        
        foreach(PropertyInfo prop in t.GetProperties())
        {
          if(Attribute.IsDefined(prop, typeof(MyAttribute))
            l.Add(prop);
        }
        

        【讨论】:

        • @Femaref:是的,已经看到了,但我想在不使用库的情况下做到这一点。不过感谢您的建议。
        • 为什么要在没有库的情况下这样做?
        • @Femaref:这是一个非常简单的例子,添加一个库就太过分了。希望很快我可以将我的应用程序迁移到 .NET4.0 上,这不会是一个问题 :)
        【解决方案4】:

        如果您使用 ReSharper:

        http://www.jetbrains.com/resharper/

        它可以自动为您完成。

        【讨论】:

        • 谢谢,但我使用的是 C# Express,所以很遗憾我没有 ReSharper。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多