我希望在显示之前在我的字符串构建器中添加数字(1,2,3)。 如果字符串生成器包含2-它应该有这样的输出1)行文本2)行文本等等
StringBuilder abc = new StringBuilder();
abc.Append("Hi.");
Fun(2, abc);
void Fun(int i, StringBuilder abc)
{
if (i>0)
abc.Append("its me.");
}
//在这里添加一些代码以检查if(abc.length> 0)//我们需要将1,2,3 ...附加到abc中的行 Console.WriteLine(abc.ToString());
我需要像
这样的输出1),您好。 2)我的。
答案 0 :(得分:3)
您可以将逻辑封装在不同的类中,并使用StringBuilder。
public class ExtendedStringBuilder
{
private StringBuilder _sb;
private int _callNumber;
public ExtendedStringBuilder()
{
_sb = new StringBuilder();
_callNumber = 0;
}
public void Append(string nextString)
{
_sb.AppendFormat("{0} {1}", ++_callNumber, nextString);
}
public override string ToString()
{
return _sb.ToString();
}
}
在这种情况下,您不需要存储int值。这是样本:
static void Main(string[] args)
{
var esb = new ExtendedStringBuilder();
esb.Append("Hi.");
esb.Append("its me.");
Console.WriteLine(esb.ToString());
Console.ReadLine();
}
答案 1 :(得分:2)
使用StringBuilder
执行此操作将非常困难,因为索引解析将非常困难。我已经使用List<string>
来实现同样的目标。
List<string> list = new List<string>();
list.Add("Hi");
list.Add("Its me!");
string s = String.Join(" ", list.Select(x => (list.IndexOf(x) + 1).ToString() + ")" + x));
Console.WriteLine(s);
其中输出为
1)嗨2)我的!
答案 2 :(得分:0)
我建议使用 Linq ,放置所有项目("Hi."
,"its me."
)并删除StringBuilder
:
using System.Linq;
...
// Or List<string>
string[] items = new string[] {
"Hi.",
"its me."
};
string result = string.Join(" ", items
.Select((item, index) => $"{index + 1}){item}"));
您的代码已修改(List<string>
而不是StringBuilder
)
List<string> abc = new List<string>(); // List<string>, not StringBuider
abc.Add("Hi.");
Fun(2, abc);
...
void Fun(int i, IList<string> abc) {
if (abc.Any())
abc.Add("its me.");
}
...
Console.WriteLine(string.Join(" ", abc
.Select((item, index) => $"{index + 1}){item}")));