【发布时间】:2021-12-21 17:25:18
【问题描述】:
我需要得到这个结果:
ProgrammeEtude.Description
所以,我做了类似的事情,它工作了
modelMember = $"{nameof(Gabarit.ProgrammeEtude)}.{nameof(Gabarit.ProgrammeEtude.Description)}";
但它很丑陋,如果我们要达到一个以上的类,它就不会是干净的。所以,我想知道是否可以创建一个函数来获取 fullName 属性,而无需清楚地了解第一类。仅通过调用函数
// Like that
modelMember = typeof(ProgrammeEtude).GetPropertyFullName(nameof(ProgrammeEtude.Description));
// Or like that
modelMember = GetPropertyFullName(ProgrammeEtude.Description);
谢谢!
Ecoron 提供的最终解决方案帮助:
public void Test1()
{
var result = NameOf<Gabarit>(x => x.ProgrammeEtude.Description);
}
public static string NameOf<T>(Expression<Func<T, object>> selector)
{
return string.Join(".", selector.ToString().Split('.').Skip(1));
}
【问题讨论】:
-
没有“属性的全名”这样的概念——所以无论你想实现什么,你都必须自己写。请注意,真正的“全名”可能应该包括完整的命名空间和程序集名称/版本以匹配类“全名”。另一方面,您似乎已经有了一种方法来实现您想要的,并正在寻找一些语法糖来以不同的方式编写它 - 请edit 提问以澄清您的问题/目标。
标签: c# properties classname