C# 以String.Format格式在同一错误消息中显示多个变量

C# 以String.Format格式在同一错误消息中显示多个变量,c#,C#,我需要用不同的变量显示错误消息 我有一份清单: List<Tuple<int, string>> listrailcar = new List<Tuple<int, string>>(); listrailcar.Add(new Tuple<int, string>(21458, "overfilled")); listrailcar.Add(new Tuple<int, string>(

我需要用不同的变量显示错误消息

我有一份清单:

  List<Tuple<int, string>> listrailcar = new List<Tuple<int, string>>();
        listrailcar.Add(new Tuple<int, string>(21458, "overfilled"));
        listrailcar.Add(new Tuple<int, string>(9986, "overweighed"));
        listrailcar.Add(new Tuple<int, string>(9986, "overtotal"));
结果是三句话:

但我只想要一条包含三个变量的消息,如下所示:

“处理错误:21458号轨道车已加满。 9986超重了。 2156太多了。”


如何修复它?

使用
控制台。改为编写
,写出文本的第一部分,然后循环浏览列表中的项目

Console.Write("error processing Railcar: ");
foreach (var item in listrailcar)
{
    Console.Write(string.Format("{0}" + " is " + "{1}. ", item.Item1, item.Item2));
}   
Console.WriteLine();
输出:


处理轨道车时出错:21458已满。9986超重了。9986太多了。
使用
控制台。改为写
,写出文本的第一部分,然后循环浏览列表中的项目

Console.Write("error processing Railcar: ");
foreach (var item in listrailcar)
{
    Console.Write(string.Format("{0}" + " is " + "{1}. ", item.Item1, item.Item2));
}   
Console.WriteLine();
输出:


处理轨道车时出错:21458已满。9986超重了。9986太多了。

一种方法是使用StringBuilder并将循环中的消息附加到其中,最后将其写入控制台:

using (var errorMessages = new StringBuilder("error processing :")) {
    foreach (var item in listrailcar)
    {
        errorMessages.append(string.Format("Railcar number : {0}" + " is " + "{1}", item.Item1, item.Item2));
    }
    Console.WriteLine(errorMessages);
}

一种方法是使用StringBuilder并将循环中的消息附加到其中,最后将其写入控制台:

using (var errorMessages = new StringBuilder("error processing :")) {
    foreach (var item in listrailcar)
    {
        errorMessages.append(string.Format("Railcar number : {0}" + " is " + "{1}", item.Item1, item.Item2));
    }
    Console.WriteLine(errorMessages);
}

为什么不使用这样一个更面向对象的解决方案呢

void Main()
{
    List<RailCar> railCars = new List<RailCar>();

    foreach(var railCar in railCars)
    {
        Console.WriteLine($"Error processing: RailCar number: {railCar.Number}. {railCar.OverFilled} is overfilled. {railCar.OverWeighed} is overweighed. {railCar.OverTotal} is over total.");
    }
}


public class RailCar
{
    public string Number { get; set;}

    public int OverFilled { get; set; }

    public int OverWeighed { get; set; }

    public int OverTotal { get; set; }
}
void Main()
{
列出轨道车辆=新列表();
foreach(轨道车中的var轨道车)
{
Console.WriteLine($“错误处理:RailCar编号:{RailCar.number}.{RailCar.OverFilled}过量。{RailCar.Overweilled}过量。{RailCar.OverTotal}过量。”);
}
}
公车
{
公共字符串编号{get;set;}
公共int溢出{get;set;}
公共int权重过大{get;set;}
public int OverTotal{get;set;}
}

为什么不使用这样一种更面向对象的解决方案呢

void Main()
{
    List<RailCar> railCars = new List<RailCar>();

    foreach(var railCar in railCars)
    {
        Console.WriteLine($"Error processing: RailCar number: {railCar.Number}. {railCar.OverFilled} is overfilled. {railCar.OverWeighed} is overweighed. {railCar.OverTotal} is over total.");
    }
}


public class RailCar
{
    public string Number { get; set;}

    public int OverFilled { get; set; }

    public int OverWeighed { get; set; }

    public int OverTotal { get; set; }
}
void Main()
{
列出轨道车辆=新列表();
foreach(轨道车中的var轨道车)
{
Console.WriteLine($“错误处理:RailCar编号:{RailCar.number}.{RailCar.OverFilled}过量。{RailCar.Overweilled}过量。{RailCar.OverTotal}过量。”);
}
}
公车
{
公共字符串编号{get;set;}
公共int溢出{get;set;}
公共int权重过大{get;set;}
public int OverTotal{get;set;}
}

使用Linq聚合,您可以执行以下操作:

Console.WriteLine("error processing :Railcar number: " + listrailcar.Aggregate("", (current, tuple) => current + $" {tuple.Item1} is {tuple.Item2}."));

使用Linq聚合,您可以执行以下操作:

Console.WriteLine("error processing :Railcar number: " + listrailcar.Aggregate("", (current, tuple) => current + $" {tuple.Item1} is {tuple.Item2}."));

你试过什么?你的问题到底在哪里?是否只是因为您不知道如何在循环中构建字符串?StringBuilder应该是您在未知数据大小的情况下寻求最佳性能的工具,但对于您正在查看的数据类型,标准字符串连接应该是合适的……您尝试了什么?你的问题到底在哪里?是否只是因为您不知道如何在循环中构建字符串?StringBuilder应该是您在未知数据大小的情况下寻找最佳性能的工具,但对于您正在查看的数据类型,标准字符串连接应该是合适的。。。