我想创建一个简单的方法,它接受值类型和参考类型参数,即int是值,string是参考。正在创建一个接受(可为空)值类型和引用类型的C#泛型方法吗?
原来这就是我开始:
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
但我遇到的第一个问题是
The type 'T' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'
要继续,我添加一个结构约束我的方法
public bool areBothNotNull<T>(T? p1, T? p2) where T : struct
但现在的方法将不接受基于字符串的呼叫,并给了我这个错误:
The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method.
这可能吗?或者为什么我们不能这样做?
这似乎是一件奇怪的事情要做? – 2010-10-23 08:07:10
这并不奇怪,它只是一种C++的甜味。 – 2010-10-23 08:09:45