爲什麼視覺工作室給我一個錯誤:錯誤的Visual Studio
public void afunction(int? bar){ somecode }
afunction(String.IsNullOrEmpty(Request["foo"])?null:int.Parse(Request["foo"]));
它給我沒有空之間沒有implcit轉換和int
爲什麼視覺工作室給我一個錯誤:錯誤的Visual Studio
public void afunction(int? bar){ somecode }
afunction(String.IsNullOrEmpty(Request["foo"])?null:int.Parse(Request["foo"]));
它給我沒有空之間沒有implcit轉換和int
的第2和第3個操作數?運算符必須具有兼容類型。他們不在你的情況下,第二個是空的,第三個是int。沒有隱式從int到null或從null到int的轉換。只有明確的,像轉換爲對象或Nullable<int>
。您可以考慮使用這樣的:這裏
afunction(String.IsNullOrEmpty(Request["foo"]) ? default(int?) : int.Parse(Request["foo"]));
沒有問題,因爲有是從int隱式轉換爲int?
你需要稍微改變你的方法,如:
? null : new Nullable<int>(int.Parse(Request["foo"]));
編譯器表達,你是負責類型轉換。
Resharper建議我「?null:new int?(int.Parse(Request [」idM「]))」 –
的簡化版本:
int? x = true ? null : 1;
無法確定條件表達式的類型,因爲有
<null>
和「INT」
之間的隱式轉換所以有條件操作者不作爲工作你期望(關於類型轉換)。
重構不會傷害任何東西,只是把它分解成可讀的東西。
這不是重構的問題,而是理解,謝謝 –
我明白你說的是什麼,但它似乎是語言中的一個弱點 –
靜態類型語言(如C#)中的標準票價允許表達式成爲語句。這阻止了編譯器從結果類型推斷預期的轉換。在許多情況下可以這樣做,就像你的一樣,不會影響語言設計者。一致性對他們很重要。 –