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

本文关键字:重载 函数 调用 泛型类型 | 更新日期: 2023-09-27 18:08:00

StreamWrite.WriteInt16Int32Int64DoubleSingleString等过载

为什么我需要使用dynamic?当调用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);
  }
}

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

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

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