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

beb*_*ebo 3 c# generics list overload-resolution

StreamWrite.Write目前超载Int16,Int32,Int64,Double,Single,String等等.

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

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 7

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

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