扩展属性应用

字段去除空格

代码

 [AttributeUsage(AttributeTargets.Property,Inherited=false,AllowMultiple=false)]
public class TrimAttribute:Attribute
{ private readonly Type type;
public TrimAttribute(Type type)
{
this.type = type;
}
public Type Type
{
get { return this.type; }
}
}
public static class TrimAttributeExtension
{
public static void Trim(this Object obj)
{
Type t = obj.GetType();
foreach(var prop in t.GetProperties())
{
foreach(var attr in prop.GetCustomAttributes(typeof(TrimAttribute),true))
{
TrimAttribute tsa = (TrimAttribute)attr;
if(prop.GetValue(obj,null)!=null&&(tsa.Type==typeof(string)))
{
prop.SetValue(obj,GetPropertyValue(obj,prop.Name).ToString().Trim(),null);
}
}
}
}
private static object GetPropertyValue(object instance,string PropertName)
{
return instance.GetType().InvokeMember(PropertName,System.Reflection.BindingFlags.GetProperty,null,instance,new Object[]{});
}
}

使用

  public class SomeClass
{ [Trim(typeof(string))]
string Name { get; set; }
}


查询语法

 public  class SelectClass
{
public void Method1()
{
int[] fool=new int[100];
for (int num = 0; num < fool.Length; num++)
{
fool[num] = num * num;
}
foreach(int i in fool)
{
Console.WriteLine(i.ToString());
}
}
public void Method1Select()
{
int[] fool = (from n in Enumerable.Range(0, 100) select n * n).ToArray();
fool.ForAll((n) => Console.WriteLine(n));
}
public IEnumerable<Tuple<int, int>> ProduceIndices()
{
for (int x = 0; x < 100; x++)
for (int y = 0; y < 100; y++)
if (x + y < 100)
yield return Tuple.Create(x,y);
}
public IEnumerable<Tuple<int, int>> ProduceIndicesSelect()
{
return from x in Enumerable.Range(0, 100)
from y in Enumerable.Range(0, 100)
where x + y < 100
select Tuple.Create(x,y);
}
}

public static class Extensions
{
public static void ForAll<T>(this IEnumerable<T> sequence, Action<T> action)
{
foreach(T item in sequence)
{
action(item);
}
}
}



你可能感兴趣的:(属性)