我想创建一个同时接受值类型和引用类型参数的简单方法,即 int 是值,字符串是引用。
所以这就是我的开始:
public bool AreBothNotNull<T>(T? p1, T? p2)
{
return (p1.HasValue && p2.HasValue);
}
所以我希望能够像这样使用它:
var r1 = AreBothNotNull<int>(3, 4); // will be true
var r2 = AreBothNotNull<int>(3, null); // will be false
var r3 = AreBothNotNull<string>("three", "four"); // will be true
var r4 = AreBothNotNull<string>(null, "four"); // will be false
但我遇到的第一个问题是
类型“T”必须是不可为空的值类型,才能将其用作泛型类型或方法“System.Nullable”中的参数“T”
为了继续,我在我的方法中添加了一个结构约束
public bool AreBothNotNull<T>(T? p1, T? p2) where T : struct
但现在该方法将不接受基于字符串的调用,并给我这个错误:
类型“字符串”必须是不可为空的值类型,才能将其用作泛型类型或方法中的参数“T”。
这可能吗?或者为什么我们被阻止这样做?