失败:

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:
那就是所谓的“三元运算符”。它是三元运算符,但称为“条件运算符”。

10-06 14:26