好的,我有一个通用类。基础如下:
public class GenericPrimitiveContainer<T> : IGetAndSetGenericValue
{
private T _value;
public T Value
{
get
{
return _value;
}
set
{
_value = value;
}
}
}
好的。该类还有一个SetValue方法,它接受一个对象并将其设置为使用以下代码的值:
PropertyInfo pi = this.GetType().GetProperty("Value");
pi.SetValue(this, o, null);
它不仅能检查对象的类型和值的类型并对其进行比较,如果它们相同,则将对象 o 赋给 Value。如果它们不同,则会应用转换。我不会深入讨论这一点,因为这不是问题所在(这肯定是最后的臭屁话)。
问题在于如果 Value 是字符串类型。正如我之前所说,我比较类型以查看它们是否相同。具体而言(其中 'o' 是传递进来的对象):
Type t1 = Value.GetType();
Type t2 = o.GetType();
if (t1 == t2) ...
如果 T 是 int,那么没有问题。如果 T 是 String,则 'Value' 只是 'null'。我甚至无法对其执行 'GetType' 以查看它是否为 String,因为它只是 null。
作为测试,我尝试摆脱检查并在我知道字符串将传递给方法的情况下测试设置方法。Value 最初仍然为空,但它还是可以工作并且 Value 被分配了。
现在我知道字符串不是原始类型,所以它的工作方式会有所不同于 int,但我不确定如何解决这个问题。我考虑将 _value 初始化为 default(T),但这并没有起作用。我还为类添加了一个构造函数,该构造函数做了同样的事情。那也没用。
我还尝试使用“where t:new()”来限制类,但这不起作用,因为 String 不是“具有公共无参数构造函数的非抽象类型,以便将其用作参数'T'”。所以希望有更聪明的人能帮帮我。
null
has no type so surely you just excludenull
and return false,1 != null
- Liam