今天遇到了一个编码问题,很有意思
如果T1,T2,T3 都有相同的属性,而且处理这些属性的逻辑都一样,但 他们之间没有关系,该怎么办?
如果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));
}