这有效:
int valueAsInt = 0;
if (Int32.TryParse(value, out valueAsInt))
{
record.GetType().GetProperty(property).SetValue(record, valueAsInt, null);
}
else
{
record.GetType().GetProperty(property).SetValue(record, value, null);
}
然而,这并非如此。不确定原因。
Int32.TryParse(value, out valueAsInt) ? record.GetType().GetProperty(property).SetValue(record, valueAsInt, null) :record.GetType().GetProperty(property).SetValue(record, value, null);
我收到以下错误消息:
错误1只能将赋值,调用,递增,递减和新对象表达式用作语句
错误2无法确定条件表达式的类型,因为'void'和'void'之间没有隐式转换
我很好奇为什么三元运算符在这种情况下失败了。谢谢!
答案 0 :(得分:4)
这里的反思是红鲱鱼。在C#中,并非所有表达式都作为独立语句有效。例如:
a + b;
不会编译。
同样,根据C#语法,? :
不是有效的表达式 - 语句构造。你总是要对三元表达式的值做些什么。如果您不关心该值,则应使用if
语句。
Relevant Portion of C# Grammar
表达式语句:
statement-expression ;
statement-expression :
调用表达式
对象创建表达式
分配
后增量表达
后递减表达
预增量表达
pre-decrement-expression
答案 1 :(得分:1)
三元运算符期望返回一个值。我猜,你打电话的方法不是。 :)
来自MSDN remarks:
条件必须评估为真或 假。如果条件为真, first_expression被评估和 成为结果。如果条件是 false,second_expression被评估 并成为结果。只有一个 评估两个表达式。
first_expression的类型 和second_expression必须是 相同,或隐式转换必须 从一种类型存在到另一种类型。
如果执行语句没有涉及类型(void
除外),则三元运算符在这种情况下不起作用。
答案 2 :(得分:0)
这是因为你没有从条款中返回任何内容。当将结果值分配给某个变量或返回时,三元运算符将特别用作if / else。