繁体   English   中英

如何通过带有反射C#的属性获取类信息

[英]How can I get class information by property w/ reflection C#

我有代码:

// entity
public class PermissInfo
{
    public int PermissValue { get; set; }
}

// used class
public class MenuPermiss
{
    public static readonly PermissInfo PermissView = new PermissInfo { PermissValue = 1 };
    public static readonly PermissInfo PermissEdit = new PermissInfo { PermissValue = 2 };
    public static readonly PermissInfo PermissDelete = new PermissInfo { PermissValue = 4 };
}

并实现如下代码:

// implement class: check permiss
public static class ImplementClass
{
    // used like: return CheckPermiss(MenuPermiss.PermissEdit);
    public static bool CheckPermiss(PermissInfo permiss)
    {
        // How to get "MenuPermiss" class info by "permiss" param

        return false;
    }
}

我如何通过MenuPermiss.PermissEdit参数获取MenuPermiss类?

不能使用以下语法:

ImplementClass.DoSomething(MyClass.MyProperty);

但可能与此:

ImplementClass.DoSomething(() => MyClass.MyProperty);

解:

using System.Linq.Expressions;

public static class ImplementClass
{
    public static bool DoSomething<T>(Expression<Func<T>> propertyExpression)
    {
        var memberInfo = ((MemberExpression)propertyExpression.Body).Member;
        var declaringType = memberInfo.DeclaringType;

        Console.WriteLine(declaringType.Name); // outputs "MyClass"

        return false;
    }
}

链接参考在这里

它可以很好地与语法配合使用:

PermissHelper.CheckPermiss(()=>MenuPermiss.PermissDelete) 

我尝试使用此代码实现,并且返回“ <> c__DisplayClass0”值。 如何解决?

PermissHelper.CheckPermiss(MenuPermiss.PermissDelete) 

public static string CheckPermiss(PermissInfo permissInfo)
{
    Expression<Func<PermissInfo>> x = () => permissInfo;

    var memberInfo = ((MemberExpression)x.Body).Member;
    var declaringType = memberInfo.DeclaringType;

    return declaringType != null ? declaringType.Name : "";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM