3

在这种情况下,这个错误意味着什么?

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 中编译它时,我得到了这个错误。

4

2 回答 2

7

问题在这里:

if (value is Nullable

它认为您在谈论静态类System.Nullable而不是System.Nullable<T>结构。

也许你的意思是:

if (value is INullable ...)

?

请注意,如果value是编译时类型object,那么它永远不会是 a Nullable<T>,因为装箱一个空值会给出一个空引用,而装箱一个非空值会给出一个底层类型的装箱值。

如果您认为还有其他需要实现的目标,请说明您正在尝试做的事情。

于 2012-08-28T20:03:47.817 回答
4

该类型System.Nullable是静态类型——这意味着无法创建实例。因此value永远不可能是Nullable.

Microsoft C# 编译器没有这个错误——所以,任何使用 Visual Studio 的人都不会得到这个错误。因此,创建 RedditSaveTransfer 的人似乎使用过 Visual Studio。在 MonoDevelop 中编译同样的代码显然有这个额外的错误。

我对这段代码一无所知,所以我不知道他们在这里试图做什么的意图。显然value不可能是 type Nullable,所以整个if陈述总是错误的。所以,我认为,简单地从代码中删除块是安全的。

但是,根据代码,它看起来像是在尝试检查值是否是某种SqlTypes.INullable. 在这种情况下,我可能会做类似的事情:

INullable nullable = value as INullable;
if(nullable != null && nullable.IsNull)
   return "";

但是,这将产生与原始代码不同的结果;我不知道这是好事还是坏事。

我同意乔恩的观点,这可能是一个错字value is INullable;但是,我不确定。

于 2012-08-28T20:03:46.797 回答