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

今天遇到了一个编码问题,很有意思
如果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));
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值