c# - 使用泛型调用重载函数

标签 c# list generics overload-resolution

StreamWrite.WriteInt16Int32Int64Double 重载>、SingleString 等等。

为什么我需要使用动态?当调用 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时,编译器不知道要将Write的哪个方法标记包含在IL中。

关于c# - 使用泛型调用重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24156804/

相关文章:

java - 使用标记接口(interface)限制泛型参数

java - 具有多个匹配目标类型的 lambda 表达式的方法签名选择

python - 将嵌套列表分成具有不相交元素的组

java - 如何使用不同数据类型的其他列表中的值填充java中的列表?

Python连接存储在列表中的不同大小的数组

c# - WPF 按钮中的多行文本

java - 如何处理 Java 方法中变量的类型泛型?

c# - 日志管理器类可供所有类访问

c# - 每当我打开 VS 2010 解决方案时,如何禁用正在 check out 的 .vspscc 文件?

c# - 有没有办法为 C# 库设置调用应用程序执行权限?