[英]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.