使用泛型类型来调用重载函数

时间:2014-06-11 07:13:21

标签: c# list generics overload-resolution

StreamWrite.Write已为Int16Int32Int64DoubleSingleString以及更多内容超载。

为什么我需要使用动态?调用WriteList方法时,编译器知道它被调用Int32String,.... 那么为什么我不能直接在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);
  }
}

1 个答案:

答案 0 :(得分:7)

因为重载解析(在没有dynamic)的情况下发生在编译时,并且在编译时,T的实际类型是未知的,因为泛型是一个运行时功能。

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