在静态泛型类中调用方法而不指定类型

时间:2016-04-22 10:26:26

标签: 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) { }
}


我不想这样做,因为我不希望使用我的代码的人指定字符串作为类型,因为&#34;某些东西&#34;已经是一个字符串

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

以另一种方式解释我的问题,我想从同一类中的20种方法中提取相同的泛型类型和约束,我不希望它们反复重复,并且我不希望用户在使用我的方法时指定类型,他们传入的参数将提供类型。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您在类本身上指定泛型,则需要指定它,如您在问题中所述 - 这可行:

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

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

如果您希望编译器推断它,则需要将其放在方法上:

{{1}}

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

答案 1 :(得分:1)

如果我理解你,你需要这个:

public static void Test<T>(T myValue) {. ..}

然后这样称呼:

TestClass.Test("DoSomething");

会自动为您推断类型string,您无需在type-parameter中指定它。