使用C#中的反射从字符串中获取属性值

使用C#中的反射从字符串中获取属性值

我正在尝试使用我的代码中的Reflection 1示例实现数据转换

GetSourceValue函数有一个比较各种类型的开关,但我想删除这些类型和属性,并GetSourceValue只使用一个字符串作为参数获取属性的值。我想在字符串中传递一个类和属性并解析属性的值。

这可能吗?

1个 原始博客文章的Web Archive版本


慕姐4208626
浏览 1618回答 4
4回答

慕森王

这样的事情怎么样:public&nbsp;static&nbsp;Object&nbsp;GetPropValue(this&nbsp;Object&nbsp;obj,&nbsp;String&nbsp;name)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(String&nbsp;part&nbsp;in&nbsp;name.Split('.'))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(obj&nbsp;==&nbsp;null)&nbsp;{&nbsp;return&nbsp;null;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;type&nbsp;=&nbsp;obj.GetType(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyInfo&nbsp;info&nbsp;=&nbsp;type.GetProperty(part); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(info&nbsp;==&nbsp;null)&nbsp;{&nbsp;return&nbsp;null;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&nbsp;info.GetValue(obj,&nbsp;null); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;obj;}public&nbsp;static&nbsp;T&nbsp;GetPropValue<T>(this&nbsp;Object&nbsp;obj,&nbsp;String&nbsp;name)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;retval&nbsp;=&nbsp;GetPropValue(obj,&nbsp;name); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(retval&nbsp;==&nbsp;null)&nbsp;{&nbsp;return&nbsp;default(T);&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;throws&nbsp;InvalidCastException&nbsp;if&nbsp;types&nbsp;are&nbsp;incompatible &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(T)&nbsp;retval;}这将允许您使用单个字符串下降到属性,如下所示:DateTime&nbsp;now&nbsp;=&nbsp;DateTime.Now;int&nbsp;min&nbsp;=&nbsp;GetPropValue<int>(now,&nbsp;"TimeOfDay.Minutes");int&nbsp;hrs&nbsp;=&nbsp;now.GetPropValue<int>("TimeOfDay.Hours");您可以将这些方法用作静态方法或扩展。
打开App,查看更多内容
随时随地看视频慕课网APP