Tag: generics约束

为什么Nullable 不匹配作为generics约束的引用类型

可能重复: Nullable类型作为通用参数可能吗? 我遇到了generics类型约束非常奇怪的事情。 我有一个这样的课: public SomeClass where T:class { } 但是,我发现我不能像我期望的那样使用可空类型: new SomeClass(); 我得到一个int?的错误int? 必须是参考类型。 Nullable真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?

通用约束:强制类型具有静态函数和带参数的构造函数

我知道你可以写: class GenericClass where T : new() { } 强制执行T有一个空的构造函数。 我的Qs是: 你能强制说T有一个具有特定参数类型的构造函数吗? 喜欢: class SingletonFactoryWithEmptyConstructor where T : new(int) 你能强制执行T有一个静态函数(比方说, void F() ),这样你就可以在generics类中使用这个函数吗? 喜欢 : class GenericClass where T : void F() { void G () { TF(); } } 我知道你可以指定T实现一个接口,但我不希望这样。 我想指定T具有静态函数。

为什么System.Array不能成为类型约束?

我正在开发一个带有几种不同类型数组的小项目(例如double[] , float[] , int[] 。为了validation/测试/健全,我将其中一些数组打印到控制台我继续。所以我有多个函数,如下所示(本例简化 – 假设我只处理单维数组): void Print(float[] a) // prints an array of floats { for (int i = 0; i < a.Length; i++) { Console.Write(a[i]); } } void Print(double[] a) // prints an array of doubles { for (int i = 0; i < a.Length; i++) { Console.Write(a[i]); } } 我以我的无限智慧认为,我可以通过简单地创建这些函数的通用版本来减少一些代码重复。 […]

为什么通用类型约束不可inheritance/分层实施

物品类 public class Item { public bool Check(int value) { … } } 具有generics类型约束的基本抽象类 public abstract class ClassBase where TItem : Item { protected IList items; public ClassBase(IEnumerable items) { this.items = items.ToList(); } public abstract bool CheckAll(int value); } 没有约束的inheritance类 public class MyClass : ClassBase { public override bool CheckAll(int value) { bool result […]