在我的ToString()
覆盖中,我正在做一些大致如下的事情:
public class MyObject
{
public string Prop1 { get; set; } = "value1";
public string Prop2 { get; set; } = "value2";
public override string ToString()
{
var parts = new[]
{
$"{nameof(Prop1)}={Prop1}",
$"{nameof(Prop2)}={Prop2}",
};
return string.Join(",", parts);
}
}
与其一遍又一遍地重复相同的"name=value"操作,有没有可能有一个函数可以计算出该props 的名称(例如Prop1
)和值?
例如,我可以这样做吗:
public override string ToString()
{
var parts = new[]
{
GetProp(x => x.Prop1), // returns "Prop1=value1"
GetProp(x => x.Prop2), // returns "Prop2=value2"
// ...
};
return string.Join(",", parts);
}
我想我需要一个类似于此的函数,但我不确定用于获取成员名称的实现:
private string GetProp(Expression<Func<MyObject, object>> exp)
{
var name = ""; // <---- How to get the name?
var value = exp.Compile().Invoke(this);
return $"{name}={value}";
}
如果我判断exp
,我可以看到成员名称确实存储在exp.Body.Member.Name
下,但我不知道如何访问它.