Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简化If语句c#_C#_Visual Studio 2010_Object_If Statement - Fatal编程技术网

简化If语句c#

简化If语句c#,c#,visual-studio-2010,object,if-statement,C#,Visual Studio 2010,Object,If Statement,我试着用这句话 status_label.Text = err.Message + " || " + err.InnerException == null ? " " : err.InnerException.Message; 基本上,如果有一个InnerException,因为它不是null,那么显示它,如果它是null,那么不输出任何东西 这是我认为我能拥有的最精简的 status_label.Text = err.Message; if (err.InnerException !=

我试着用这句话

status_label.Text = err.Message + " || " + err.InnerException == null ? " " : err.InnerException.Message;
基本上,如果有一个InnerException,因为它不是null,那么显示它,如果它是null,那么不输出任何东西

这是我认为我能拥有的最精简的

 status_label.Text = err.Message;
 if (err.InnerException != null)
     status_label.Text += " || " + err.InnerException.Message;
干杯。

用这个代替:

status_label.Text =  err.InnerException == null 
    ? err.Message
    : err.Message + " || " + err.InnerException.Message;

这应该可以做到:

status_label.Text = string.Format("{0}{1}", err.Message, err.InnerException != null ? string.Format(" || {0}", err.InnerException.Message) : string.Empty);

你错过了三元运算符周围的制动器

status_label.Text = err.Message + " || " + (err.InnerException == null ? " " : err.InnerException.Message); 
或者,如果在null innerexception的情况下不需要| |

status_label.Text = err.Message + (err.InnerException == null ? "" : " || " + err.InnerException.Message); 

首先,你的if声明应该是这样的

status_label.Text = err.Message;
 if (err.InnerException != null)
     status_label.Text += " || " + err.InnerException.Message;
至于使其更加精简,您可以使用条件和/或空合并,但这是完全可读的

但是,如果您愿意,可以这样做

status_label.Text = string.Concat(err.Message, err.InnerException == null ? string.Empty : " || " + err.InnerException.Message);

这是否更简洁?并非如此。

只是一个想法,如果您不介意打印完整的异常,您可以:

status_label.Text = err.ToString();
status_label.Text += err.InnerException;
(请记住,这将在每个异常前面放置一个“系统异常:”或类似内容。)


否则,您的代码看起来已经足够精简了。(可读性有时比紧凑性更令人满意,记住。)

你的问题是?似乎没有问题。我更喜欢你的非精简代码。更容易阅读,这将使它更容易维护和理解。我看不出重构代码有多大好处。不过,您的连接应该成为string.Format(),因为字符串在.Net中是不可变的。。。。(见J Torres的帖子)很抱歉我在工作,我没有多少时间,所以在这个特殊的场合我没有仔细阅读这个问题,尽管如此,它仍然得到了真正的回答,我得到了所需的确切答案。谢谢大家+1:Ha。我正在输入这个精确的答案。我想知道为什么有人投了反对票…不是反对票,但我发现可读性受到了影响:字符串。嵌套在三元中的格式嵌套在另一个字符串中。格式似乎有点多。我同意这不是有史以来编写的最优雅的代码,但OP没有要求优雅的。。。他们问“怎么做”。当提供的解决方案是内存效率最高和最正确的解决方案时,人们投反对票是有点粗鲁的。不过就是这样。感谢@NominSim的编辑。当InnerException不为null时,这不包括“| |”。这可能是建议的解决方案中最干净的一个,除非你是一个“无连接”的纯粹主义者。问题是,它不需要高度可读性,一个简短的注释将确切说明它的作用,因此这是一个完美的解决方案!输出到标签的代码的可读性是不必要的,但这仍然很好地涵盖了这一方面@你的逻辑是错误的,用注释代替可读代码是错误的策略。但是,这个答案不需要额外的注释。这将包括“| |”即使InnerException为null。