为什么视觉工作室给我一个错误:错误的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#)中的标准票价允许表达式成为语句。这阻止了编译器从结果类型推断预期的转换。在许多情况下可以这样做,就像你的一样,不会影响语言设计者。一致性对他们很重要。 –