我正在尝试创建一个名为Stats的类,它使用泛型参数T.我打算用T作为int?还是漂浮?但是,当我尝试创建类Stats的对象时,我得到了: 错误1类型'int?'必须是不可为空的值类型才能在泛型类型或方法中将其用作参数“T”.... 任何帮助将不胜感激
这是我的代码:
Stats<int?> stats = new PlayerMatchStats(); // PlayerMatchStats inherits Stats
public abstract class Stats<T> : BaseEntity where T : struct
{
}
答案 0 :(得分:4)
从the C# programming guide开始,当指定where T : struct
的通用约束时,“type参数必须是值类型。可以指定除Nullable之外的任何值类型。”
您可以使用结构约束可为空来创建泛型类的成员,例如
public class Foo<T> where T : struct
{
public T? SomeValue { get; set; }
}
但您无法提供可为空的封闭泛型类型。
答案 1 :(得分:1)
where T : struct
不允许可以为空的类型。也许这种重构就是你所追求的:
public abstract class Stats<T> where T : struct
{
// instead of the following with T being int?
// public abstract T Something { get; }
// have the following with T being int
public abstract T? Something { get; }
}
public class PlayerMatchStats : Stats<int> { ... }
// this is now valid:
Stats<int> stats = new PlayerMatchStats();
或删除struct
约束:
public abstract class Stats<T>
{
public abstract T Something { get; }
}
public class PlayerMatchStats : Stats<int?>
{
public override int? Something { get { return 0; } }
}
Stats<int?> stats = new PlayerMatchStats();