将使用Linq的代码转换为不使用Linq的代码



下面的代码片段返回一个具有定义属性的PropertyInfo对象数组:

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



。我怎么能做同样的事情在.NET2.0,因此没有使用Linq?

try

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

ArrayList<T>类为您提供了许多与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));
    });

我将使用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);
}

如果你使用ReSharper:

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

它可以自动为你做。

相关内容

  • 没有找到相关文章

最新更新