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);
}
}
答案 0 :(得分:7)
因为重载解析(在没有dynamic
)的情况下发生在编译时,并且在编译时,T
的实际类型是未知的,因为泛型是一个运行时功能。
在编译Write
时,编译器不知道要包含在IL中的WriteList
哪个方法标记。