这个错误在这种情况下意味着什么?
if (value == null)
return "";
if (value is Nullable && ((INullable)value).IsNull) //error on this line
return "";
if (value is DateTime)
{
if (((DateTime)value).TimeOfDay.TotalSeconds == 0)
return ((DateTime)value).ToString ("yyyy-MM-dd");
return ((DateTime)value).ToString ("yyyy-MM-dd HH:mm:ss");
}
我搜索了但没有得到有关此错误的任何信息。我在Mono(2.10.8.1)上尝试这个。这是一个实际用于Windows的项目,但是当我尝试在Monodevelop中编译它时,我遇到了这个错误。
答案 0 :(得分:7)
问题在于:
if (value is Nullable
它认为你在谈论static class System.Nullable
而不是System.Nullable<T>
结构。
也许你的意思是:
if (value is INullable ...)
请注意,如果value
属于编译时类型object
,那么永远不会成为Nullable<T>
,因为装箱空值会给出一个null引用,装箱非空值将给出基础类型的盒装值。
如果您认为还有其他事情需要实现,请说明您的目标。
答案 1 :(得分:4)
类型System.Nullable
是静态类型 - 这意味着无法创建实例。因此,value
永远不能成为Nullable
的一种类型。
Microsoft C#编译器没有此错误 - 因此,使用Visual Studio的任何人都不会收到此错误。因此,创建RedditSaveTransfer的人似乎使用了Visual Studio。在MonoDevelop中编译相同的内容显然有这个额外的错误。
我对这段代码一无所知,所以我不知道他们在这里尝试做什么的意图。显然,value
永远不会是Nullable
类型,因此整个if
语句将始终为false。因此,我认为,从代码中删除块是安全的。
但是,基于代码看起来它正在尝试检查该值是否是某种SqlTypes.INullable
。在这种情况下,我可能会做类似的事情:
INullable nullable = value as INullable;
if(nullable != null && nullable.IsNull)
return "";
但是,这会产生与原始代码不同的结果;我不知道这是好事还是坏事。
我同意Jon的观点,这可能是value is INullable
的错字;但是,我不确定。