将泛型传递给 class 构造函数列表
Passing generic into a class constructor list
我有一个 class 像这样将泛型作为参数
public MyNewClass(string text, T myClass, int f, bool test = false)
编译器抱怨 T myClass
。
我知道我可以将 "defined" 通用 classes 传递给 class 构造函数(例如 List
、Dictionary
等)并且已经看到这也可以在 C# 中完成,但找不到对它的引用。
当你声明你的class时,你应该声明泛型参数。
public class MyNewClass<T>
{
}
然后可以从 class 的任何方法访问此参数。当您将创建 MyNewClass
的实例时,您还应该定义 T 的类型,例如:
var instanceOfMyNewClass = new MyNewClass<className>(text, classIntance, f, true);
其中 classInstance
是类型 className
对象的实例。
关于泛型的一个很好的介绍是 here。
我怀疑您遇到的问题是以下内容无法编译
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# 编译器只允许在方法的第一个参数上推断泛型。所以以下是允许的。
public class Foo<T>
{
public Foo(T t, string s) { }
}
var foo = new Foo(new Something(), "Hello");
我有一个 class 像这样将泛型作为参数
public MyNewClass(string text, T myClass, int f, bool test = false)
编译器抱怨 T myClass
。
我知道我可以将 "defined" 通用 classes 传递给 class 构造函数(例如 List
、Dictionary
等)并且已经看到这也可以在 C# 中完成,但找不到对它的引用。
当你声明你的class时,你应该声明泛型参数。
public class MyNewClass<T>
{
}
然后可以从 class 的任何方法访问此参数。当您将创建 MyNewClass
的实例时,您还应该定义 T 的类型,例如:
var instanceOfMyNewClass = new MyNewClass<className>(text, classIntance, f, true);
其中 classInstance
是类型 className
对象的实例。
关于泛型的一个很好的介绍是 here。
我怀疑您遇到的问题是以下内容无法编译
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# 编译器只允许在方法的第一个参数上推断泛型。所以以下是允许的。
public class Foo<T>
{
public Foo(T t, string s) { }
}
var foo = new Foo(new Something(), "Hello");