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)
因为重载解析(在没有dynamic)的情况下发生在编译时,并且在编译时,实际的类型T是未知的,因为泛型是运行时特性.
编译时,编译器不知道Write在IL中包含哪个方法标记WriteList.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |