繁体   English   中英

c#如果是其他的简写

[英]c# If else shorthand

在c#中我可以用速记做这样的事情吗?

 bool validName = true;
 if (validName)
 {
     name = "Daniel";
     surname = "Smith";
 }
 else
 {
     MessageBox.Show("Invalid name");
 }

我只是想知道类似的东西是否会起作用,但在这个确切的场景中,我知道你可以分配值,如果我的名字= validName? “丹尼尔”:“无效”,但我只是想知道我能否做到以下?

     validName ? 
     {
         name = "Daniel";
         surname = "Smith";
     } 
     : 
     {
         MessageBox.Show("Invalid name");
     }

滥用lambda语法和类型推断:

(validName
    ? (Action)
        (() =>
            {
                name = "Daniel";
                surname = "Smith";
            })
      : () =>
           {
                MessageBox.Show("Invalid name");
           })();

我知道,不是真正的答案。 如果语句更好:显然这种语法的可读性较低,更重要的是它具有不同的运行时行为,并且由于lambda表达式创建的潜在闭包,可能导致意外的副作用。

语法也有点神秘。 它首先创建两个Action对象?:运算符在它们之间进行选择,最后执行所选结果:

var a1 = new Action(() => { /* if code block */ });
var a2 = new Action(() => { /* else code block */ });

Action resultingAction = test_variable ? a1 : a2;

resultingAction();

我通过执行生成的操作将它放在一个语句中。 为了使它更简洁,我将第一个lambda表达式转换为Action (而不是显式创建一个new Action() )并利用类型推断我省略了第二个转换。

让我们说你可以做到这一点。 为什么?

动机是什么?

线路少? 不足以发挥作用。 性能? 没有,编译器会为你处理一些事情。 明晰? 如果/ else更清楚,并且更容易被大多数开发人员理解。

我相信,如果你努力工作,你可以找到一种方法来处理这个问题(很可能是一个kludge),但我仍然无法确定原因。

没有。

作为一个整体,三元运算符(?:)必须是一个表达式 - 也就是说,可以分配给某些东西。

条件运算符要求其第二个和第三个操作数是返回值的表达式(除了满足某些类型限制),而不是不解析为值的语句。 您没有希望从当前正在执行的任何操作返回的值。

你可以返回一些荒谬的值只是为了使代码编译,但是那时你只需要添加更多的工作,而不仅仅是使用if是你的需求的正确语义运算符,所以尽管技术上可行,这不是一个好主意。

fullName = validName == true ? returnName(firstName)+" "+returnName(lastName) : validName == false ? invalidName("Invalid Name") : null


public string returnName(string name)
{
return name;
}

public string invalidName(string invalid)
{
MessageBox.Show(invalid);
return null;
}

正如其他人可能已经说过你可能不会真的想做的事情,但是,有可能:P

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM