我正在使用 C# 10 和 VS2022,如果这会影响答案。
我正在尝试编写一个类来包含具有各种约束的参数。基本类型不应为空,某些参数(如默认值)也应为空,而其他一些参数则需要为空(并且我将根据需要检查它们是否为空)。我找不到在课堂上以任何方式混合类型的方法。
我原本以为可以将T定义为notnull然后使用T?具有我想要可为空的任何属性,同时我可以定义类/函数,这样尝试调用代码无法编译。
public class Parameter<T> where T : notnull {
public T Value { get; set;}
public T? Min { get; set; }
public void Set(T? value_)
{
}
}
Parameter<int> parameter = new();
parameter.Set(null);
Run Code Online (Sandbox Code Playgroud)
如果我在类中通过 VS2022 检查 Set,它会正确显示 Set(T? value_) 作为参数,但如果我检查parameter.Set,它会显示 Set(int value),然后拒绝编译上述用法:
Argument 1: cannot convert from int? to int
Run Code Online (Sandbox Code Playgroud)
我考虑将可为空的属性定义为 T2 并允许其为空,但随后我遇到了无法比较或分配 T 和 T2 的问题,这会达不到目的。
我在这里错过了一些愚蠢的事情还是有其他方法可以实现这一点?