c# - 编译时泛型语法

标签 c# generics

class GenericWrapper<T>
{   
}

class WrapperInstance : GenericWrapper<string>
{   
}

class Usage
{
    public static Usage Create<T1, T2> (T2 t2) where T1 : GenericWrapper<T2>
    {
        return null;
    }
}

...

// works
Usage.Create<WrapperInstance, string>("bar");

// doesnt work
Usage.Create<WrapperInstance>("bar");

我怀疑答案是否定的,但有没有办法让最后一行编译通过?

我希望编译器强制我提供一个字符串参数,而不必知道或先去检查 WrapperInstance看什么TGenericWrapper它实现了。

我知道我可以通过使用第一种方法或采用 object 来编译它。作为参数并进行运行时检查,但这不是问题;)我在很大程度上怀疑这是我唯一的两个选择。

谢谢

最佳答案

I suspect the answer is no, but is there a way I can make the last line compile?

没有。 Create 有两个通用类型参数。您可以不指定任何内容,也可以同时指定两者。在没有的情况下,编译器将尝试从调用参数推断类型。但是,在这种情况下它不能,因为 T1 从未出现在参数列表中。因此,您必须同时指定两者。

关于c# - 编译时泛型语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650203/

相关文章:

java - 编写一个名为 Child 的简单接口(interface)(其中没有任何内容),并使用它创建一个只能存储 Boy 和 Girl 实例的 ArrayList

asp.net-mvc - ASP.NET MVC - 为什么我的 View 不能从 System.Web.Mvc.ViewPage(of T) 正确继承

java - 在 JLS 中的哪个位置解释了将原始类型分配给无界类型是合法的?

c# - 身份服务器 4 : adding claims to access token

c# - 如何在 .NET Core 中查找字体和字符串指标?

c# - HRESULT : 0x80040154 (REGDB_E_CLASSNOTREG), 错误,我的网站位于 azure 云上

c# - 为 C# P/Invoke 调用 C++ dll 获取正确参数时出现问题

c# - 如何从 C# 中的集合中获取唯一值?

java - 如何在运行时创建通用 Collection<T>?

java - Java 中的泛型用法是什么? X.<Y>方法()