gpt4 book ai didi

C# 如何获取类属性的名称(以字符串形式)?

转载 作者:行者123 更新时间:2023-11-30 19:03:29 30 4
gpt4 key购买 nike

public class TimeZone
{
public int Id { get; set; }
public string DisplayName{ get; set; }
}

我在其他一些课上:

   var gmtList = new SelectList(
repository.GetSystemTimeZones(),
"Id",
"DisplayName");

注意:System.Web.Mvc.SelectList

我不喜欢用“Id”和“DisplayName”来写属性名。稍后,属性名称可能会更改,编译器将不会检测到此错误。C# 如何获取字符串中的属性名称?

更新 1

在 Christian Hayter 的帮助下,我可以使用:

var tz = new TimeZone();
var gmtList = new SelectList(
repository.GetSystemTimeZones(),
NameOf(() => tz.Id),
NameOf(() => tz.TranslatedName));

var gmtList = new SelectList(
repository.GetSystemTimeZones(),
NameOf(() => new TimeZone().Id),
NameOf(() => new TimeZone().TranslatedName));

如果有人有其他想法而不需要创建新对象。欢迎分享:) 谢谢。

最佳答案

您可以创建一个实用方法来从表达式树中提取属性名称,如下所示:

string NameOf<T>(Expression<Func<T>> expr) {
return ((MemberExpression) expr.Body).Member.Name;
}

然后你可以这样调用它:

var gmtList = new SelectList(repository.GetSystemTimeZones(),
NameOf(() => tz.Id),
NameOf(() => tz.DisplayName));

请注意,该类的任何实例都可以,因为您不是在读取属性值,而只是读取名称。

关于C# 如何获取类属性的名称(以字符串形式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4266426/

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