c# - 在重载方法上使用泛型参数

标签 c# generics methods parameters

为什么这个程序输出Generic Value而不是Hello world!:

using System;

class Example
{
    public static void Print<T>(T value)
    {
        Console.WriteLine("Generic Value");
    }

    public static void Print(string value)
    {
        Console.WriteLine(value);
    }

    public static void GenericFunc<T>(T value)
    {
        Print(value);
    }

    static void Main()
    {
        GenericFunc("Hello world!");
    }
}

如何在 C# 中转换泛型方法参数?

最佳答案

重载解析仅在编译时完成。

GenericFunc<T>不知道是否Tstring或者在编译时的其他东西,它只能使用 Print<T>(T value) “过载”。

使用 dynamic ,您可以将其更改为动态调度,并获得您期望的行为:

Print((dynamic)value);

这使得重载解析发生在运行时,实际运行时类型为 value .

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

相关文章:

c# - 数据驱动编程/事件驱动编程

c# - 云 block Blob : DownloadTextAsync and UploadTextAsync and Metadata/Properties

c# - 用户编辑一些文本后如何更改背景单元格颜色

c# - 在一个对象中表示 n 个对象

javascript - 当我们在 Javascript 上创建两个不同的对象/实例时,方法或函数如何做同样的事情?

java - 找不到符号: method draw(AsciiDisplay)

c# - System.Net.WebClient 问题

c# - 我无法在 C# 中将 list<object[]> 转换为 list <T[]>

java - super 在方法声明中的用法

java - 这两种方法有什么区别?