访问C#属性名称或属性

Fre*_*nkR 14 c# properties

我想从类实例中自动生成SQL语句.该方法应该看起来像Update(object []属性,对象PrimaryKeyProperty).该方法是实例的一部分(类,基本方法 - 任何子代的通用).属性数组是类属性的数组,将在update语句中使用.属性名称等于表字段名称.

问题是我无法获得属性名称.

有没有选项在类实例中获取属性名称?样品:

public class MyClass {
public int iMyProperty { get; set; }
public string cMyProperty2 { get; set; }
{

main() {
 MyClass _main = new MyClass();

_main.iMyProperty.*PropertyName* // should return string "iMyProperty"

{
Run Code Online (Sandbox Code Playgroud)

我知道PropertyInfo,但我不知道从GetProperties()数组中获取属性的ID.

有什么建议吗?

Geo*_*uer 28

上周二为我们的用户组编写了一个关于lambda的演示文稿.

  • 你可以做

    MembersOf <Animal> .GetName(x => x.Status)

  • 要么

    var a = new Animal()a.MemberName(x => x.Status)

代码:

public static class MembersOf<T> {
    public static string GetName<R>(Expression<Func<T,R>> expr) {
        var node = expr.Body as MemberExpression;
        if (object.ReferenceEquals(null, node)) 
            throw new InvalidOperationException("Expression must be of member access");
        return node.Member.Name;
    }
}
Run Code Online (Sandbox Code Playgroud)


Meh*_*ANI 10

我在This Post找到了一个完美的解决方案

public static string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
{
   return (propertyExpression.Body as MemberExpression).Member.Name;
}
Run Code Online (Sandbox Code Playgroud)

然后用于:

var propertyName = GetPropertyName(
() => myObject.AProperty); // returns "AProperty"
Run Code Online (Sandbox Code Playgroud)

奇迹般有效


Vin*_*jip 6

你可以这样做:

Type t = someInstance.getType();

foreach (MemberInfo mi in t.GetMembers())
{
    if (mi.MemberType == MemberTypes.Property)
    {
        Console.WriteLine(mi.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

获取所有类型的属性名称instance.