我可能过度思考这个问题,但假设有以下类结构:
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
答案 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
--------------------------