c# - 在不指定类型的情况下调用静态泛型类中的方法

标签 c# class generics methods static

考虑下面的代码,我想做这样的事情,这行不通,但这就是我想要的

class Program
{
    static void Main(string[] args)
    {
        TestClass.Test("something");
    }
}

public static class TestClass<T>
{
    public static void Test(T something) { }
}


下面的代码可以工作,但我在同一个类中有大约 20 个泛型方法,它们一遍又一遍地重复它们的约束。

public static class TestClass
{
    public static void Test<T>(T something) { }
}


我不想这样做是因为我不希望使用我的代码的人将字符串指定为类型,因为“某物”已经是一个字符串

 TestClass<string>.Test("something");


换个角度解释我的问题,我想从同一个类中的大约 20 个方法中提取相同的泛型类型和约束,我不希望它们一遍又一遍地重复,我不想'希望用户在使用我的方法时指定类型,他们传入的参数将提供类型。

谢谢!

最佳答案

如果您在类本身上指定泛型,则需要指定它,正如您在问题中指出的那样 - 这会起作用:

TestClass<string>.Test("something")

如果你想让编译器推断它,你需要把它放在方法上:

public static class TestClass
{
    public static void Test<T>(T something) { }
}

TestClass.Test("something");// T is infered.

实例:http://rextester.com/VOF10456

关于c# - 在不指定类型的情况下调用静态泛型类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36791261/

相关文章:

.net - 泛型 hell 或在 .NET 中进行程序集级别类型参数化(程序集范围泛型)需要什么

c# - 如何从 List<T> 获取 IEnumerable<T>?

c# - FileSystemWatcher 问题

c# - 定义类型为 void 的类属性(不是方法)

c# - 如何取消设置整数中的特定位

c# - 什么时候 try catch 不是 try catch?

python - 通过子类化 `type` 类来实现类描述符

java - 如何将 Java 类转换为其子类之一(SocketAddress 和 InetSocketAddress)

c# - 通用容器内是什么类型

java - 如何在 Android 中动态转换类的实例