显示星数而不是数字

时间:2014-03-24 18:19:06

标签: c# rating-system

我正在制作人们可以对电影进行评论的网站,当他们进行评论时,他们需要对电影进行评分,数量为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")
                );

对于(字符串)moviereview.Element(&#34; rating&#34;)我想在用户给予电影评级为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(&#34; rating&#34;)&#39;到一个int。但不知何故,我无法在网站上获得图像。它唯一的空白,我尝试了不同的方式,但它不会得到网站的价值。

3 个答案:

答案 0 :(得分:2)

试试这个:

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有一个构造函数,可以重复一个Character,并多次重复它。

所以代码:

new String('X', 5);

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


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

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

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();
    }
}

Geesh ......你真的无法调试,可以吗?

此代码中有一个额外的

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

这是一个非常简单的陈述!
&#34;如果字符串为Null或Empty,则返回空字符串&#34;

但你有它倒退,所以它有效地说:
&#34;如果字符串中包含文本,则返回空字符串&#34;

这毫无意义。

答案 1 :(得分:1)

而不是:

(string)moviereview.Element("rating")

使用:

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

答案 2 :(得分:0)

我确实让这段代码工作了:

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();
    }

感谢帮助人员!

相关问题