根据字符串构建器的长度在字符串构建器中添加文本/数字

时间:2017-12-26 07:03:33

标签: c# string visual-studio

我希望在显示之前在我的字符串构建器中添加数字(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)我的。

3 个答案:

答案 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}")));