加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用泛型类型调用重载函数

发布时间:2020-12-16 02:02:09 所属栏目:百科 来源:网络整理
导读:StreamWrite.Write重载了Int16,Int32,Int64,Double,Single,String等等. 为什么我需要使用动态?在调用WriteList方法时,编译器知道它是为Int32,String,…调用的. 那么为什么我不能直接在StreamWrite.Write中使用e(类型T = Int32)? public void WriteListT(Li
StreamWrite.Write重载了Int16,Int32,Int64,Double,Single,String等等.

为什么我需要使用动态?在调用WriteList方法时,编译器知道它是为Int32,String,…调用的.
那么为什么我不能直接在StreamWrite.Write中使用e(类型T = Int32)?

public void WriteList<T>(List<T> list) 
{
  int count = list.Count();
  StreamWriter.Write(count);
  foreach(T e in list) 
  {
    dynamic d = e;
    StreamWriter.Write(d);
  }
}

解决方法

因为重载解析(在没有动态的情况下)在编译时发生,并且在编译时,T的实际类型是未知的,因为泛型是运行时特征.

编译WriteList时,编译器不知道在IL中包含哪个Write方法标记.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读