pyt*_*ips 37 c# reflection lambda
我正在尝试编写一个函数,它将使用如下语法提取属性的名称和类型:
private class SomeClass
{
Public string Col1;
}
PropertyMapper<Somewhere> propertyMapper = new PropertyMapper<Somewhere>();
propertyMapper.MapProperty(x => x.Col1)
Run Code Online (Sandbox Code Playgroud)
有没有办法将属性传递给函数而不对此语法进行任何重大更改?
我想获取属性名称和属性类型.
所以在下面的例子中我想要检索
Name = "Col1"
和 Type = "System.String"
有人可以帮忙吗?
Jac*_*ter 62
这里有一个使用Expressions获取属性或字段名称的示例,以帮助您入门:
public static MemberInfo GetMemberInfo<T, U>(Expression<Func<T, U>> expression)
{
var member = expression.Body as MemberExpression;
if (member != null)
return member.Member;
throw new ArgumentException("Expression is not a member access", "expression");
}
Run Code Online (Sandbox Code Playgroud)
调用代码如下所示:
public class Program
{
public string Name
{
get { return "My Program"; }
}
static void Main()
{
MemberInfo member = ReflectionUtility.GetMemberInfo((Program p) => p.Name);
Console.WriteLine(member.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
但需要注意的是:简单的陈述(Program p) => p.Name
实际上涉及相当多的工作(并且可以花费可测量的时间).考虑缓存结果而不是经常调用方法.
归档时间: |
|
查看次数: |
26453 次 |
最近记录: |