C#?:表达

use*_*444 6 c# if-statement

我有一个多个if的功能(这不是实际代码)

if(n == 1)
   m = 1;
if(n == 2)
   m = 2;
if(n == 3)
   m = 3;
Run Code Online (Sandbox Code Playgroud)

而不是我想把它们全部变成?:表达式:

(n == 1) ? m = 1;
Run Code Online (Sandbox Code Playgroud)

但它说它期待':'

我熟悉C++中的?:表达式,你可以简单地写:

(n == 1) ? m = 1 : 0;
Run Code Online (Sandbox Code Playgroud)

但是0不会在这里.这是一个荒谬的问题,我甚至无法在谷歌中找到答案,因为它忽略了'?:'作为一个单词.

答案:答案在评论中太糟糕了.在这个表达式中无法"无所事事",我应该使用if-else或switch.谢谢.

Rob*_*Rob 14

看起来你正在寻找:

m = (n == 1) ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

然后您可以级联到:

m = (n == 1) ? 1 : (n == 2) ? 2 : (n == 3) ? 3 : 0;
Run Code Online (Sandbox Code Playgroud)

除此之外,一个重要的(对我而言):

你为什么这么问?如果是因为你认为这种形式比一系列if陈述更有效,或者a switch,那么.C#编译器和.net JIT编译器非常聪明,它们会将您的代码(希望!)转换为最佳形式.编写代码,使其成为您自己可以理解的代码,或者是您必须尽可能地维护代码的开发人员.如果你得到的性能是不可接受的,那么尝试改变它,但测量以确定什么是最好的(记住,较新的编译器/ .net框架可以很好地改变发生的事情).

  • @DOK - 你可以,并不意味着它除了可怕的不可读代码之外还有其他任何东西!=) (7认同)

flq*_*flq 2

在 C# 中查找三元运算符将为您提供相关结果。

一个示例用法是

var m = n == 1 ? 1 : 0
Run Code Online (Sandbox Code Playgroud)

  • 条件运算符“?:”是一个三元运算符,因为它需要三个参数。我不会将其称为*三元运算符,即使 C# 目前碰巧只有其中之一。 (2认同)