2012-08-28 64 views
3

此錯誤在此上下文中的含義是什麼?「is」運算符不能應用於靜態類型的操作數

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

「價值」是否是靜態的? –

+0

@AndreCalil:可能,沒關係。 – Ryan

回答

7

的問題是在這裏:

if (value is Nullable 

它認爲你在談論的static class System.Nullable而非System.Nullable<T>結構。

也許你的意思是:

if (value is INullable ...) 

注意,如果value是編譯時類型object的,那麼它將永遠Nullable<T>,拳擊空值會給出一個空引用,和拳擊一個非空值將給出一個裝箱值基礎類型。

如果您認爲還有其他需要實現的功能,請指定您要做的事情。

+0

+1我認爲你是對的, OP最可能的意思是'INullable'。 – dasblinkenlight

+0

嗨,喬恩。這是我剛剛在reddit上看到的這個項目:https://github.com/mavispuford/RedditSaveTransfer。我還沒有完全掌握這個項目。我第一次編譯時收到這個錯誤。我把它改成了INullable,它工作正常。謝謝。 – Animesh

4

類型System.Nullable是一種靜態類型 - 這意味着無法創建實例。因此value永遠不可能是Nullable的一種類型。

Microsoft C#編譯器沒有此錯誤 - 因此,任何使用Visual Studio的人都不會收到此錯誤。所以,創建RedditSaveTransfer的人似乎已經使用過Visual Studio。在MonoDevelop中編譯相同的顯然有這個額外的錯誤。

我對這段代碼一無所知,所以我不知道他們在這裏試圖做什麼的意圖。顯然value永遠不能是Nullable類型,所以整個if語句將始終爲假。所以,我認爲,簡單地從代碼中移除塊是安全的。

但是,根據代碼,它看起來像試圖檢查值是否是某種SqlTypes.INullable。在這種情況下,我可能會做這樣的事情:

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

但是,這會產生比原來的代碼不同的結果;我不知道這是好事還是壞事。

我同意Jon的觀點,可能這是value is INullable的拼寫錯誤;但是,我不確定。

+0

看起來你是唯一一個試圖回答原始問題的人(而不是解決問題)。 – Trisped

+0

謝謝彼得。這很有意義。 – Animesh

+0

@Trisped好吧,除了編譯錯誤外,我們不知道問題是什麼。 –

相關問題