用于显示视图和注释数的算法

时间:2012-08-21 16:05:06

标签: c# algorithm

我写过这样的话:

var _views = (@Model.Views == 1 ? "view" : "views");
var _comments = (@Model.Comments == 1 ? "comment" : "comments");

if(@Model.Views > 0)
{
   if (@Model.Comments > 0)
   {
       @String.Format("{0:n0} {1}, {2:n0} {3}", @Model.Views, _views, @Model.Comments, _comments);
   }
   else
   {
       @String.Format("{0:n0} {1}", @Model.Views, _views);
   }
}
else if (@Model.Comments > 0)
{
   @String.Format("{0:n0} {1}", @Model.Comments, _comments);
}

它确实有效。

显示视频的观看次数和评论数量(例如http://www.voiceofconscience.org/Video/2

我以低质量的方式解决了一个单一/复数的问题。

我想知道它应该被视为一种“好风格”

电贺 马里乌什

3 个答案:

答案 0 :(得分:2)

这有点紧凑,它概括为两个以上的数字:

var items = new List<string>();
if (Model.Views > 0)
    items.Add(string.Format("{0:n0} {1}", Model.Views, _views));
if (Model.Comments > 0)
    items.Add(string.Format("{0:n0} {1}", Model.Comments, _comments));
var result = ", ".Join(items);

(注意:所有@使得它看起来像是在编写ASP.NET MVC视图,但我无法理解你是如何放置它们的,所以插入{{1必要的时候。)

答案 1 :(得分:2)

  • 通常应该避免使用前缀为@的变量 - 它们会使代码难以阅读。
  • 下划线前缀通常用于私有实例变量。在这里使用它可能会令人困惑。

要进行复数化,请查看System.Data.Entity.Design.PluralizationServices.PluralizationService

http://msdn.microsoft.com/en-us/library/system.data.entity.design.pluralizationservices.pluralizationservice.aspx

答案 2 :(得分:1)

我认为如果你积累结果字符串而不是运行if-else碎片会更好看。 像这样的Smth:

StringBuilder sb = new StringBuilder();
if(@Model.Views > 0)
  sb.AppendFormat("{0:n0} {1}",@Model.Views, _views);
if(@Model.Comments> 0)
  sb.AppendFormat("{0:n0} {1}",@Model.Comments, _comments);