您的位置:首页 > 其它

.NET 4.0的dynamic特性和协变特性应用一例

2012-02-28 14:18 441 查看
今天遇到了一个编码问题,很有意思

如果T1,T2,T3 都有相同的属性,而且处理这些属性的逻辑都一样,但他们之间没有关系,该怎么办?
答案如下:

namespace ConsoleApplication2
{
public class T1 { public string Name { get; set; } public int Count { get; set; } }
public class T2 { public string Name { get; set; } public int Count { get; set; } }
public class T3 { public string Name { get; set; } public int Count { get; set; } }
public class Class1
{
public void PrintName(dynamic t)
{
Console.WriteLine(t.Name);
}

public void PrintCount(IEnumerable<dynamic> list)
{
Console.WriteLine(list.Sum(t => t.Count));
}

public void Test()
{
var t1 = new T1 { Name = "T1", Count = 1 };
var t2 = new T2 { Name = "T2", Count = 2 };
var t3 = new T3 { Name = "T3", Count = 3 };

PrintName(t1);
PrintName(t2);
PrintName(t3);

var list1 = new List<T1> { t1 };
var list2 = new List<T2> { t2 };
var list3 = new List<T3> { t3 };

PrintCount(list1);
PrintCount(list2);
PrintCount(list3);
}

}
}


如果T1,T2,T3之间有继承关系,完全可以写成代码如下:

public void PrintName<T>(T t)
{
Console.WriteLine(t.Name);
}

public void PrintCount<T>(List<T> list)
{
Console.WriteLine(list.Sum(t => t.Count));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐