c# - for循环中Inline if语句的最佳实践

标签 c# .net

我想将列表框项目复制到 StringCollection。 如果列表框项包含空字符串,则忽略

为什么我可以这样做:

foreach (string item in lstModelUsers.Items)
{
    if (string.IsNullOrEmpty(item))
        continue;
    else
        Options.Default.ModelRemoveUsers.Add(item);
}

但不是这个:

foreach (string item in lstModelUsers.Items)
    string.IsNullOrEmpty(item)
        ? continue
        : Options.Default.ModelRemoveUsers.Add(item);

虽然两者看起来相等,但内联 if 语句会产生语法错误。
最佳做法是什么?

最佳答案

您不能使用 conditional operator像那样。它只接受表达式 作为它的操作数。您的代码无法编译,因为 continue只能用作语句,不能用作表达式。

更好的方法是否定 if 表达式,这样您就不需要 continue:

foreach (string item in lstModelUsers.Items)
{
    if (!string.IsNullOrEmpty(item))
    { 
        Options.Default.ModelRemoveUsers.Add(item);              
    }
}

你也可以使用Where:

var itemsToAdd = lstModelUsers.Items
    .Cast<string>()
    .Where(item => !string.IsNullOrEmpty(item));

foreach (string item in itemsToAdd)
{
    Options.Default.ModelRemoveUsers.Add(item);   
}

如果幸运的话,您甚至可能会发现 ModelRemoveUsers 有一个 AddRange 方法,那么您根本不需要循环:

var itemsToAdd = lstModelUsers.Items
    .Cast<string>()
    .Where(item => !string.IsNullOrEmpty(item));

Options.Default.ModelRemoveUsers.AddRange(itemsToAdd);

关于c# - for循环中Inline if语句的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11450173/

相关文章:

c# - COM 互操作是否尊重程序集加载的 .NET AppDomain 边界?

c# - 操作数永不为空警告

c# - ASP.NET MVC : Routing custom slugs without affecting performance

c# - DataGridView 不显示我的列

.net - WPF 的 Windows 7 主题?

c# - 如何根据键值对创建对象

c# - 为什么建议在 .NET 中使用反射?

c# - 如果添加了工具箱中的参数,Microsoft Report Viewer 定义会从 2008 年更改为 2016 年

c# - 奇怪的日期计算和测试

c# - 代码隐藏中的电子邮件格式