【问题标题】:Show number of stars instead of the number显示星数而不是数字
【发布时间】:2014-03-24 18:19:06
【问题描述】:

我正在创建一个人们可以对电影进行评论的网站,当他们进行评论时,他们需要对电影进行评分,从 1 到 5。

但是当它打印在另一页上时,我想打印出数字 3 的星星。

现在我得到了这个代码:

StringBuilder movielistSB = new StringBuilder();
            foreach (var moviereview in movielistSB)
            {
                filmanmeldelserlisteSB.AppendFormat(
                    "<div id='moviereview'><artitcle><h3>{0}</h3>" + 
                    "<table><tr><td>ID:</td><td>{1}</td></tr>" + 
                    "<tr><td>Anmeldelse:</td><td>{2}</td></tr>" + 
                    "<tr><td>Rating:</td><td>{3}</td></tr></table></article></div>",
                    (string)moviereview.Element("title"),
                    (string)moviereview.Element("id"),
                    (string)moviereview.Element("review"),
                    (string)moviereview.Element("rating")
                );

对于 (string)moviereview.Element("rating"),当用户给电影评分为 3 时,我想打印出例如 3 颗星。

我试图运行一个 for 循环,但我不知道如何让它工作。我已经尝试在谷歌上寻求解决方案,但无论如何我无法让它发挥作用。

有什么想法吗?


编辑: 现在我得到了这个:

String star = @"<img src=""../images/star.png""/>";

    if (moviereviewlist.Count() > 0)
    {
        StringBuilder moviereviewlistSB = new StringBuilder();
        foreach (var moviereview in moviereviewlist)
        {
            filmanmeldelserlisteSB.AppendFormat(
                "<div id='moviereview'><artitcle><h3>{0}</h3>" + 
                "<table><tr><td>ID:</td><td>{1}</td></tr>" + 
                "<tr><td>Review:</td><td>{2}</td></tr>" + 
                "<tr><td>Rating:</td><td>{3}</td></tr></table></article></div>",
                (string)moviereview.Element("tittel"),
                (string)moviereview.Element("id"),
                (string)moviereview.Element("anmeldelse"),
                star.RepeatString((int)moviereview.Element("rating"))
            );

还有这个

    public static class StringExtensions
{
    public static string RepeatString(this string input, int count)
    {
        if (!string.IsNullOrEmpty(input))
        {
            return string.Empty;
        }

        StringBuilder builder = new StringBuilder(input.Length * count);
        for(int i = 0; i < count; ++i)
        {
            builder.Append(input);
        }
        return builder.ToString();
    }
}

我不得不将 `(int)filmanmeldelse.Element("rating")' 解析为一个 int。但不知何故,我无法在网站上获得图像。它只是空白,我尝试了不同的方法,但它不会为网站带来价值。

【问题讨论】:

    标签: c# rating-system


    【解决方案1】:

    试试这个:

    StringBuilder movielistSB = new StringBuilder();
    foreach (var moviereview in movielistSB)
    {
        filmanmeldelserlisteSB.AppendFormat(
                "<div id='moviereview'><artitcle><h3>{0}</h3>" + 
                "<table><tr><td>ID:</td><td>{1}</td></tr>" + 
                "<tr><td>Anmeldelse:</td><td>{2}</td></tr>" + 
                "<tr><td>Rating:</td><td>{3}</td></tr></table></article></div>",
                (string)moviereview.Element("title"),
                (string)moviereview.Element("id"),
                (string)moviereview.Element("review"),
                new String('*', moviereview.Element("rating"))
            );
    

    这是可行的,因为String 有一个构造函数,它接受一个字符来重复,并重复它多次。

    所以代码:

    new String('X', 5);
    

    将产生字符串"XXXXX"(连续五个X)


    编辑海报询问是否可以使用类似的东西插入图片链接。

    回复: 否。此 String 方法重复单个字符,而不是文本块。
    如果你想重复一段文本,你会想要这样的:

    String starImage = @"<img src=""StarImage.jpg""/>";
    
    filmanmeldelserlisteSB.AppendFormat(
                "<div id='moviereview'><artitcle><h3>{0}</h3>" + 
                "<table><tr><td>ID:</td><td>{1}</td></tr>" + 
                "<tr><td>Anmeldelse:</td><td>{2}</td></tr>" + 
                "<tr><td>Rating:</td><td>{3}</td></tr></table></article></div>",
                (string)moviereview.Element("title"),
                (string)moviereview.Element("id"),
                (string)moviereview.Element("review"),
                starImage.RepeatString(movieReview.Element("rating"))
            );
    

    但您必须编写自己的 RepeatString 方法。
    可以在 this question

    上找到这样做的指南

    编辑#2

    编写扩展方法并不难。
    我会把这个类放在你项目命名空间的某个地方。

    public static class StringExtensions
    {
        public static string RepeatString(this string input, int count)
        {
            if (string.IsNullOrEmpty(input))
            {
                return string.Empty;
            }
    
            StringBuilder builder = new StringBuilder(input.Length * count);
            for(int i = 0; i < count; ++i)
            {
                builder.Append(input);
            }
            return builder.ToString();
        }
    }
    

    天啊...你真的不能调试,是吗?

    这段代码中有一个额外的

    public static string RepeatString(this string input, int count)
    {
        if (!string.IsNullOrEmpty(input))  // <-- Extra !
        {
            return string.Empty;
        }
    

    这是一个非常简单的声明!
    “如果字符串为 Null 或 Empty,则返回 Empty 字符串”

    但是你把它倒过来了,所以它实际上是说:
    “如果字符串中有文本,则返回一个空字符串”

    这没有任何意义。

    【讨论】:

    • 非常感谢。如果我想使用星星的图像而不是'',我可以只替换''吗?
    • 嗯,尝试了几个小时才弄清楚这一点,但我真的不明白我应该在哪里编写 RepeatString 方法以及如何编写。尝试了您提供的链接中显示的不同方法,但无法弄清楚如何真正做到这一点。
    【解决方案2】:

    代替:

    (string)moviereview.Element("rating")
    

    用途:

    new string('*', int.Parse((string)moviereview.Element("rating")))
    

    【讨论】:

    • 非常感谢。如果我想使用星星的图像而不是 *,我可以只插入 img src 吗?
    【解决方案3】:

    我实际上得到了这段代码:

    public static string Multiply(this string source, int multiplier)
        {
            StringBuilder sb = new StringBuilder(multiplier * source.Length);
            for (int i = 0; i < multiplier; i++)
            {
                sb.Append(source);
            }
    
            return sb.ToString();
        }
    

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 2022-10-24
      • 2020-12-27
      • 1970-01-01
      • 2018-10-12
      • 2016-07-16
      • 1970-01-01
      相关资源
      最近更新 更多