Tag: ternary operator

C#中的三元运算符和if语句之间是否存在差异?

我正在使用可以为空的DateTime对象并遇到一些奇怪的行为。 这是一个示例函数: public DateTime? Weird() { DateTime check = DateTime.Now; DateTime? dt; if (check == DateTime.MinValue) dt = null; else dt = Viewer.ActiveThroughUTC.ToLocalTime(); //this line give a compile error dt = (check == DateTime.MinValue) ? (null) : (Viewer.ActiveThroughUTC.ToLocalTime()); return dt; } 据我所知,三元运算符的行应与前四行相同,但VS2010给出了编译错误,说和DateTime之间不存在转换(即使有问题的对象是’日期时间?’)。 有什么我应该知道的关于三元运算符的东西还是这个(喘气?)一个错误?

右侧的三元/空合并运算符和赋值表达式?

在C#中尝试使用三元和空合并运算符时,我发现可以在表达式的右侧使用赋值,例如,这是一个有效的C#代码: int? a = null; int? b = null; int? c = a ?? (b = 12); int? d = a == 12 ? a : (b = 15); 奇怪的是,不仅表达式右侧的赋值被评估到它自己的右侧(意味着这里的第三行被评估为12而不是像b = 12 => void ),但是此赋值也有效,因此在一个语句中分配了两个变量。 也可以使用任何可用变量在此赋值的右侧使用任何可计算表达式。 这种行为在我看来很奇怪。 我记得if (a = 2)而不是if (a == 2)在C ++中的比较时遇到麻烦,它总是被评估为true ,这是从Basic / Haskell切换到C ++之后的常见错误。 它是一个记录的function吗? 它有什么名字吗?

c#中具有布尔条件的三元

如果我要编写这段代码,它可以正常使用’if-else’布局。 if(isOn) { i = 10; } else { i = 20; } 虽然我不确定如何使用三元运算符转换它 isOn = true ? i = 1 : i = 0; 错误:无法确定条件表达式的类型,因为’void’和’void’之间没有隐式转换。 编辑:答案= i = isOn ? 10 : 20; i = isOn ? 10 : 20; 用方法可以做到这一点吗? if(isOn) { foo(); } else { bar(); }

在C#三元运算符中调用函数

为什么这段代码无效? 很确定它在C / C ++中是合法的 伪代码: String s = Console.ReadLine(); int x = 0; Int32.TryParse(s, out x) ? Console.WriteLine(“Foo”) : Console.WriteLine(“bar”);

有什么理由说明为什么C#中的三元有限?

失败: object o = ((1==2) ? 1 : “test”); 成功: object o; if (1 == 2) { o = 1; } else { o = “test”; } 第一个语句中的错误是: 无法确定条件表达式的类型,因为’int’和’string’之间没有隐式转换。 为什么需要这样,我将这些值分配给object类型的变量。 编辑:上面的例子是微不足道的,是的,但有一些例子,这将是非常有用的: int? subscriptionID; // comes in as a parameter EntityParameter p1 = new EntityParameter(“SubscriptionID”, DbType.Int32) { Value = ((subscriptionID == null) ? DBNull.Value : subscriptionID), […]

如果转换为if,否则如果逻辑成为三元运算符?

我只是想知道这是否可能,因为我开始使用三元运算符来减少代码行,我很喜欢它。 if (x==y) { z += x; } else if (x==z) { z += y; } else { z += 1; } 如果只有一个if语句,我现在可以这样做: z = x == y ? z += x : z += 1;

为什么我必须在三元表达式中对int进行类型转换?

可能重复: 条件运算符不能隐式转换? 我遇到了一种奇怪的情况,想知道我为什么要这样做。 我正在使用.NET 3.5。 这有效: short foo; if (isValid) foo = -1; else foo = getFoo(); 这不起作用: short foo; foo = isValid ? -1 : getFoo(); 我要打字-1: short foo; foo = isValid ? (short)-1 : getFoo(); 三元表达式有何不同? 它认为-1是一个需要被转换为short的int。 但为什么?

如何在c#中使用这个语句的三元运算符

int five = 5; 当变量5等于5时,写入true 当变量5不等于5时,写入false 如何使用C#在ASP.NET中为此编写语句?

为什么在三元运算符中赋值null失败:null和int之间没有隐式转换?

这失败了There is no implicit conversion between ‘null’ and ‘int’ long? myVar = Int64.Parse( myOtherVar) == 0 ? null : Int64.Parse( myOtherVar); 但是,这成功了: if( Int64.Parse( myOtherVar) == 0) myVar = null; else myVar = Int64.Parse( myOtherVar); 有没有办法让三元运算符成功?

在三元语句中没有隐式int – > short转换

short s; s = (EitherTrueOrFalse()) ? 0 : 1; 这失败了: 错误CS0266:无法将类型’int’隐式转换为’short’。 存在显式转换(您是否错过了演员?) 任何人都可以解释为什么会这样吗? 我唯一能想到的是编译器没有查看第二个值而且不知道两者之间的范围,在我编写类似的情况下 short s; s = (EitherTrueOrFalse()) ? 0 : 65000; 正确? 唯一的解决方案是丑陋的演员? 此外,似乎C#没有短类型的类型后缀。 这是一个非常严重的监督IMO。 否则,那将是一个解决方案……