如何解决C#获取操作中指定的属性类型
我必须创建类似于Fluent API的文件。我有DTO:
public class Foo { public string Bar {get;set;} }
我需要提供一些属性(例如列名):
new MyFluentApi<Foo>().ColumnAttributes(**p => p.Bar**).ColumnName("Some very long column name where are Bar values")
在ColumnAttributes中,我需要获取指定属性的类型/名称,但是如何?在表达式p => p.Bar中,我得到了Bar的实际值,但是我需要输入
解决方法
赞:
public static MyFluentApi<T> ColumnAttributes<T>(this MyFluentApi<T> api,Expression<Func<T,object>> selector)
{
var expression = (MemberExpression)selector.Body; // Assume expression is accessing a member of T
var prop = (PropertyInfo)expression.Member; // Assume said member is a property
var type = prop.PropertyType; // Get the type of property
// Do something with type
return api;
}
请注意,如果您的lambda不是直接属性访问,则将引发异常。
一种替代方法是使用类型推断:
public static MyFluentApi<T> ColumnAttributes<T,TProp>(this MyFluentApi<T> api,TProp>> selector)
{
var type = typeof(TProp);
// Do something with type
return api;
}
现在,它可以与任何表达式一起使用,无论是否访问了一个属性,无论该属性是您所追求的。
例如,这将毫无例外地运行:
new MyFluentApi<Foo>().ColumnAttributes(p => new object());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。