将泛型传递给类构造函数列表

时间:2015-02-03 10:21:30

标签: c# generics

我有一个类,它将泛型作为参数,如

public MyNewClass(string text, T myClass, int f, bool test = false)

编译器抱怨T myClass

我知道我可以通过"定义"类构造函数的泛型类(例如ListDictionary等)并且已经看到这也可以在C#中完成,但无法找到对它的引用。

2 个答案:

答案 0 :(得分:4)

当你声明你的类时,你应该声明泛型参数。

public class MyNewClass<T>
{


}

然后可以从任何类的方法访问此参数。当您创建MyNewClass的实例时,您还应该定义T的类型,例如:

var instanceOfMyNewClass = new MyNewClass<className>(text, classIntance, f, true);

其中classInstanceclassName类型的对象的实例。

关于泛型的一个很好的介绍是here

答案 1 :(得分:0)

我怀疑您遇到的问题是以下内容无法编译

public class Foo<T>
{
    public Foo(string s, T t) { }
}

var foo = new Foo("Hello", new Something());

对此的修复是在构造函数中指定。

var foo = new Foo<Something>("Hello", new Something());

然而,这仍然有点奇怪,因为通常情况下,C#编译器可以推断出T的类型。

这里的问题是C#编译器只允许在方法的第一个参数上推断泛型。所以允许以下IS。

public class Foo<T>
{
    public Foo(T t, string s) { }
}

var foo = new Foo(new Something(), "Hello");