gpt4 book ai didi

c# - 获取嵌套属性及其父项的全名

转载 作者:行者123 更新时间:2023-11-30 13:25:33 24 4
gpt4 key购买 nike

如何在 C# 中使用反射获取其父项的嵌套属性的全名?我的意思是,例如我们有这样的类(class):

public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public DateTime? DateOfBirth { get; set; }
public Grade Grade { get; set; }
}

public class Grade
{
public int GradeId { get; set; }
public string GradeName { get; set; }
public string Section { get; set; }
public GradGroup GradGroup { get; set; }
}

public class GradGroup
{
public int Id { get; set; }
public string GroupName { get; set; }
}

我将“GradGroup”和 Student 作为方法参数,并希望将“Grade.GradeGroup”作为输出:

public string GetFullPropertyName(Type baseType, string propertyName)
{
// how to implement that??
}

调用方法:

GetFullPropertyName(typeof(Student), "GradeGroup"); // Output is Grade.GradeGroup

最佳答案

该属性可能不是唯一的,因为它可能存在于多个组件中,因此您应该返回 IEnumerable<string> .也就是说,您可以使用 GetProperties 遍历属性树。的 Type :

public static IEnumerable<string> GetFullPropertyName(Type baseType, string propertyName)
{
var prop = baseType.GetProperty(propertyName);
if(prop != null)
{
return new[] { prop.Name };
}
else if(baseType.IsClass && baseType != typeof(string)) // Do not go into primitives (condition could be refined, this excludes all structs and strings)
{
return baseType
.GetProperties()
.SelectMany(p => GetFullPropertyName(p.PropertyType, propertyName), (p, v) => p.Name + "." + v);
}
return Enumerable.Empty<string>();
}

关于c# - 获取嵌套属性及其父项的全名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49892828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com