三元最佳实践

Dal*_*ser 1 .net c# asp.net

我有一些代码,虽然简单或许并不是立即显而易见的.

I found @(Model.Count() == 0 ? "no" : Model.Count().ToString()) @(Model.Count() == 1 ? "person" : "people")
@foreach (var item in Model) {
   <div>@item.Name at @item.Email</div>
}
Run Code Online (Sandbox Code Playgroud)

在我写这么多代码之前,我想知道这是否是一个很好的方法.

因此问题是,在.NET中有更好的框架方式,或者Ternary方法很好

前提是显而易见的

  • 0记录=我找不到人
  • 1记录=我找到1个人
  • 2+条记录=我找到了2个人

Phi*_*p M 5

在我看来,在这种Ternary情况下使用条件运算符是绝对正确的.

有经验的开发人员在不考虑它的情况下理解它,但如果你想让初学者易于阅读,你也可以使用ifelse构造.

但我会Any()在评论中提到@ I4V.

I found @(Model.Any() ? Model.Count().ToString() : "no") @(Model.Count() == 1 ? "person" : "people")


@foreach (var item in Model) {
   <div>@item.Name at @item.Email</div>
}
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,你的答案中的扩展方法比具有两个条件运算符的这一行更具可读性.赞成你的回答.我仍然认为,这可以使用. (2认同)

Jam*_*mes 5

如果你在几个地方这样做,扩展方法可以解决你的问题(可读性和简化代码)

public static string PersonCountString(this IEnumerable<Person> personList)
{
    var count = personList.Count();
    return String.Format("{0} {1}", count > 0 ? count : "no",
                                    count == 1 ? "person" : "people");
}
...
I found (@Model.PersonCountString())
Run Code Online (Sandbox Code Playgroud)