失败:
object o = ((1==2) ? 1 : "test");
成功:
object o;
if (1 == 2)
{
o = 1;
}
else
{
o = "test";
}
第一条语句中的错误是:
为什么需要这样做,我将这些值分配给类型为object的变量。
编辑:上面的示例很简单,是的,但是在一些示例中这将非常有帮助:
int? subscriptionID; // comes in as a parameter
EntityParameter p1 = new EntityParameter("SubscriptionID", DbType.Int32)
{
Value = ((subscriptionID == null) ? DBNull.Value : subscriptionID),
}
最佳答案
用:
object o = ((1==2) ? (object)1 : "test");
问题是不能明确确定条件运算符的返回类型。也就是说,在int和string之间,没有最佳选择。编译器将始终使用true表达式的类型,并在必要时隐式转换false表达式。
编辑:
在您的第二个示例中:
int? subscriptionID; // comes in as a parameter
EntityParameter p1 = new EntityParameter("SubscriptionID", DbType.Int32)
{
Value = subscriptionID.HasValue ? (object)subscriptionID : DBNull.Value,
}
PS:
那就是所谓的“三元运算符”。它是三元运算符,但称为“条件运算符”。