显示星星的数量而不是数字

本文关键字:数字 星星 显示 | 更新日期: 2023-09-27 17:52:56

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

和this

    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")'解析为整型。但不知怎么的,我在网站上找不到图片。它只是空白,我已经尝试了不同的方式,但它不会得到一个值的网站。

显示星星的数量而不是数字

试试这个:

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)


EDIT Poster询问是否可以使用类似的东西插入图像链接。

回答:。此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方法。
这个问题

上可以找到一个指南。

编辑# 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;
    }

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

但是你把它弄反了,所以它实际上是在说:
"如果字符串中有文本,则返回一个空字符串"

而不是:

(string)moviereview.Element("rating")

使用:

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

我实际上让这段代码工作:

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

谢谢大家的帮助!