返回类中属性的每个值的最快方法

时间:2017-06-28 22:15:03

标签: c# linq stringbuilder

我可能过度思考这个问题,但假设有以下类结构:

public class Car {
    public string Make {get;set;}
    public string Model {get;set;}
    public string Year {get;set;}
}

List<Car> MyCarList = new List<Car>();

MyCarList.Add(new Car(
Make = "Honda",
Model = "Civic",
Year = "1997"
));

MyCarList.Add(new Car(
Make = "Ford",
Model = "Tarus",
Year = "2005"
));

MyCarList的每个元素组合每个属性的最快方法是什么?

我想出的一个解决方案是重载类中的ToString()函数,并返回每个元素+属性值 - 但这感觉很糟糕。

另一个(远不那么优雅)解决方案是简单地连接每个属性并手动构建它。

我试图提出的解决方案是使用Lambda或LINQ,但我得到的最接近的只是类列表中的一个属性。

我也考虑过StringBuilder,但我不确定这是否是这个问题的好选择。

输出将用于记录目的,连接值如下所示:

Make: Honda
Model: Civic
Year: 1997

Make: Ford
Model: Tarus
Year: 2005

3 个答案:

答案 0 :(得分:4)

另一种非常简单的方法是将对象转换为带有JSon.NET库的字符串 它只是一行代码

var car = new Car
{
    Make = "Honda",
    Model = "Civic",
    Year = "1997"
};

string result  = JsonConvert.SerializeObject(car);
Console.WriteLine(result); 

// output will be 
{"Make":"Honda","Model":"Civic","Year":"1997"}

答案 1 :(得分:1)

这可以使用反射来完成。查看Type.GetProperties

示例:

var car = new Car
{
    Make = "Honda",
    Model = "Civic",
    Year = "1997"
};

var builder = new StringBuilder();
foreach (PropertyInfo info in car.GetType().GetProperties())
{
    if (builder.Length > 0)
    {
        builder.Append(", ");
    }

    var value = info.GetValue(car, null) ?? "null";
    builder.Append(info.Name);
    builder.Append(" = ");
    builder.Append(value);
}

Console.WriteLine(builder.ToString()); // "Make = Honda, Model = Civic, Year = 1997"

答案 2 :(得分:0)

var props = typeof(Car).GetProperties();
var stb = new StringBuilder();
foreach (var element in MyCarList)
{
    foreach (var prop in props)
    {
        stb.Append(prop.Name);
        stb.Append(": ");
        stb.Append(prop.GetValue(element));
        stb.AppendLine();
    }
    stb.AppendLine("--------------------------");
}

结果。

Make: Honda
Model: Civic
Year: 1997
--------------------------
Make: Ford
Model: Tarus
Year: 2005
--------------------------