我想访问FieldInfo,用于字段上的CustomAttributes以及其他目的,但是我不想使用字符串来访问该字段,也不想运行所有字段一堂课。
如果我只是,
class MyClass
{
#pragma warning disable 0414, 0612, 0618, 0649
private int myInt;
#pragma warning restore 0414, 0612, 0618, 0649
public MyClass()
{
BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
Console.WriteLine( GetType().GetField("myInt", flags) );
foreach( FieldInfo fi in GetType().GetFields(flags) )
{
Console.WriteLine( string.Format("{0} {1} {2}", fi.Name, myInt, fi.GetValue(this) ) );
}
}
}
我知道我可以访问" myInt"的FieldInfo。直接通过" GetField"函数,如果我有它的名字串,或者循环通过" GetFields",那将再次依赖于字符串" myInt"确保您拥有合适的领域。
是否有ref myInt
或out myInt
提供的任何魔法,或某些我不知道的关键字可以让我访问,或者是我只限于需要字符串名称来获取它吗?
答案 0 :(得分:2)
你的意思是从编译的表达式而不是字符串中获取memberinfo? e.g
class Program
{
public static void Main()
{
var cls = new MyClass();
Console.WriteLine(GetMemberInfo(cls, c => c.myInt));
Console.ReadLine();
}
private static MemberInfo GetMemberInfo<TModel, TItem>(TModel model, Expression<Func<TModel, TItem>> expr)
{
return ((MemberExpression)expr.Body).Member;
}
public class MyClass
{
public int myInt;
}
}
答案 1 :(得分:1)