显示星星数而不是数字 [英] Show number of stars instead of the number
问题描述
我正在建立一个网站,人们可以在这里对电影进行评论,当他们进行评论时,他们需要对电影进行评分,评分等级为1到5.
I am making i site where people can make reviews of movies and when they make the review they need to put a rating to a movie, in a number of 1 to 5.
但是当它打印在另一页上时,我想打印出以数字3为例的星.
But when it print out on another page I want to print out stars insted of the number 3 for exemple.
现在我得到了以下代码:
For now I got this code:
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星的示例.
And for the (string)moviereview.Element("rating") I want to print out for exempel 3 stars when a user has given the movie a rating of 3.
我试图运行一个for循环,但是我不知道如何使它工作.我曾尝试向Google寻找解决方案,但无论如何我都无法使用它.
I tried to run a for loop, but I could not figur out how to get that to work. And I've tried to Google for a solution, but anyhow I can't get it to work.
有什么想法吗?
现在我明白了:
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.但是由于某种原因,我无法在该网站上获得图片.它唯一的空白,我尝试了不同的方法,但不会为该站点带来价值.
I had to parse the `(int)filmanmeldelse.Element("rating")' to an int. But for somehow I can't get a image on the site. Its only blank and I have tried different ways, but It will not get a value to the site.
推荐答案
尝试一下:
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,并重复多次.
This works, because String
has a constructor that takes a Character to repeat, and a number of times to repeat it.
代码如下:
new String('X', 5);
将导致字符串"XXXXX"
(连续五个X)
would result in the string "XXXXX"
(five X's in a row)
编辑:发帖人询问是否可以使用类似的东西来插入图像链接.
EDIT Poster asks if something similar can be used to insert Image-Links.
回复:否.此String方法重复单个字符,而不是文本块.
如果您想重复一段文本,则需要类似以下内容的
Reply: No. This String method repeats a single character, not a block of text.
If you want to repeat a block of text, you'll want something like:
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"))
);
But you'll have to write your own RepeatString
method.
A guide to doing that can be found on this question
编辑#2
写扩展方法并不难.
我将此类放在您项目的名称空间中.
Writing an extension method is not hard.
I would put this class somewhere in your project's namespace.
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,则返回一个空字符串"
但是您将其倒退,因此它有效地表示:
如果字符串中包含文本,则返回空字符串"..
那没有道理.
Its a pretty simple statement!
"If the string is Null or Empty, return an Empty string"
But you have it backwards, so it effectively says:
"If the string has text in it, return an Empty string".
That makes no sense.
这篇关于显示星星数而不是数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!