显示星星的数量而不是数字
本文关键字:数字 星星 显示 | 更新日期: 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();
}
谢谢大家的帮助!