当前位置: 首页 > 编程语言 > C#

C#如何获取类属性的名称(在字符串中)?分享

时间:2023-04-11 01:51:42 C#

C#如何获取类属性的名称(在字符串中)?公共课时区{公共intId{得到;放;}publicstringDisplayName{get;放;我在其他一些班级:vargmtList=newSelectList(repository.GetSystemTimeZones(),"Id","DisplayName");注意:System.Web.Mvc.SelectList我不喜欢用“Id”和“DisplayName”来写属性名。稍后,属性名称可能会更改,编译器将不会检测到此错误。C#如何获取字符串中的属性名称?更新1在ChristianHayter的帮助下,我能够使用:vartz=newTimeZone();vargmtList=newSelectList(repository.GetSystemTimeZones(),NameOf(()=>tz.Id),NameOf(()=>tz.TranslatedName));或vargmtList=newSelectList(repository.GetSystemTimeZones(),NameOf(()=>newTimeZone().Id),NameOf(()=>newTimeZone().TranslatedName));如果有人有其他想法而没有创建新对象。随时分享:)谢谢。您可以创建一个实用方法来从表达式树中提取属性名称,如下所示:stringNameOf(Expression>expr){return((MemberExpression)expr.Body).Member.Name;然后你可以这样称呼它:vargmtList=newSelectList(repository.GetSystemTimeZones(),NameOf(()=>tz.Id),NameOf(()=>tz.DisplayName));请注意,由于您没有读取属性值,因此该类的Any实例将执行此操作。(顺便说一句,这些不是参数,它们是属性。)好吧,一种选择是使用委托。例如:publicclassSelectList{publicSelectList(IEnumerablesource,FuncidProjection,FuncdisplayProjection){...}}然后:vargmtList=newSelectList(repository.GetSystemTimeZones(),tz=>tz.Id,tz=>tz。显示名称);varname=(string)typeof(TimeZone).GetProperty("DisplayName").GetValue(0);字符串id=typeof(TimeZone).GetProperties()[0].Name;字符串displayName=typeof(TimeZone).GetProperties()[1].Name;vargmtList=newSelectList(repository.GetSystemTimeZones(),id,displayName);这将起作用,除了声明的id和displayname的顺序不会改变。或者可以考虑为attributes定义属性来区分id和displayname。从C#6.0开始,你现在可以使用上面的C#学习教程:C#如何获取类属性的名称(在字符串中)?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——vargmtList=newSelectList(repository.GetSystemTimeZones(),nameof(TimeZone.Id),nameof(TimeZone.DisplayName));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: