【发布时间】:2021-08-20 13:39:46
【问题描述】:
预期的结果是获取方法参数T属性名称。这是我的代码,
我尝试了一些建议的解决方法来使用类 ABC typeof(ABC).GetProperties - 没有得到预期的结果。
public class ABC
{
public string Name { get; set; }
public int RecordCount { get; set; }
public decimal Total { get; set; }
public DateTime CreatedDate { get; set; }
}
public void ExecuteMain()
{
var item = new ABC
{
Name = "TestUser A",
RecordCount = 10,
Total = 100.20m,
CreatedDate = DateTime.Now
};
AddTest<string>(item.Name);
AddTest<int>(item.RecordCount);
AddTest<decimal>(item.Total);
AddTest<DateTime>(item.CreatedDate);
}
private string AddTest<T>(T field)
{
var resultName = nameof(field); // should return as "Name"
var resultValue = field.ToString(); // this returns "TestUser A" which is correct
//Record Count, Total, CreatedDate to add later
return $"Name = {resultName}:{resultValue}";
}
期待这一行的结果
var resultName = nameof(field); // should return as "Name"
【问题讨论】:
-
既然
nameof (field) == "field"和ToString返回默认的对象类型或层次结构中覆盖方法中定义的内容,那么问题和疑问是什么?你的目标和预期结果是什么?如果有帮助:Get parameter's "source caller's variable name" -
您使用的是属性值,而不是使用 item.Name 的属性本身。您需要使用反射。 docs.microsoft.com/fr-fr/dotnet/api/…
-
这在没有反射的情况下不容易做到(它会涉及传递表达式树)并且在任何情况下都没有效率。您当前的
AddTest方法很简单,不应该存在(只需写出插入的字符串,在nameof方法中使用nameof);对于更一般的场景,你可以有更复杂的东西,但前提是它确实被证明是必要的。 -
当我致电
AddTest<string>("Hello world")时,您希望得到什么结果?它是文字,而不是属性,因此没有名称。或者AddTest<string>(item.Name + "")怎么样?
标签: c# generics reflection