我想将列表框项目复制到 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/