我正在尝试编写一个函数,它将使用如下语法提取属性的名称和类型:
private class SomeClass { Public string Col1; } PropertyMapperpropertyMapper = new PropertyMapper (); propertyMapper.MapProperty(x => x.Col1)
有没有办法将属性传递给函数而不对此语法进行任何重大更改?
我想获取属性名称和属性类型.
所以在下面的例子中我想要检索
Name = "Col1"
和 Type = "System.String"
有人可以帮忙吗?
这里有一个使用Expressions获取属性或字段名称的示例,以帮助您入门:
public static MemberInfo GetMemberInfo(Expression > expression) { var member = expression.Body as MemberExpression; if (member != null) return member.Member; throw new ArgumentException("Expression is not a member access", "expression"); }
调用代码如下所示:
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); } }
但需要注意的是:简单的陈述(Program p) => p.Name
实际上涉及相当多的工作(并且可以花费可测量的时间).考虑缓存结果而不是经常调用方法.