下面的代码片段返回一个具有定义属性的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);
}
Array
和List<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/它可以自动为你做。