C#实现从对象路径获取字符串格式属性完整路径的方法
C# 获取嵌套属性完整路径的解决方案
需求说明
我们需要获取形如以下格式的属性完整路径:
ProgrammeEtude.Description
现有实现痛点
目前可通过逐段拼接nameof的方式实现:
modelMember = $"{nameof(Gabarit.ProgrammeEtude)}.{nameof(Gabarit.ProgrammeEtude.Description)}";
该写法冗余度高,当类嵌套层级较多时,代码可读性和整洁度会大幅下降。
理想调用效果
我们希望通过封装好的函数直接获取属性路径,无需手动逐层拼接nameof,理想调用方式如下:
// 调用方式1 modelMember = typeof(ProgrammeEtude).GetPropertyFullName(nameof(ProgrammeEtude.Description)); // 调用方式2 modelMember = GetPropertyFullName(ProgrammeEtude.Description);
最终可行解决方案
可以通过表达式树实现更简洁的调用,具体实现代码如下:
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)); }
该实现通过解析表达式树的字符串形式,自动截取并拼接属性路径,无需手动逐层处理嵌套层级,大幅优化代码整洁度。
内容的提问来源于stack exchange,提问作者Pierre-olivier Dubois-Nadeau
相关产品推荐
相关产品推荐

