C# 将FieldInfo转换为PropertyInfo,反之亦然

C# 将FieldInfo转换为PropertyInfo,反之亦然,c#,C#,我有一个具有组件目标,字符串属性名称,字段信息mFieldInfo和属性信息mPropertyInfo,其中mPropertyInfo=target.GetType().GetProperty(property)和mFieldInfo=target.GetType().GetField(属性)

我有一个具有
组件目标
字符串属性名称
字段信息mFieldInfo
属性信息mPropertyInfo
,其中
mPropertyInfo=target.GetType().GetProperty(property)
mFieldInfo=target.GetType().GetField(属性)mProperty
,它可以由PropertyInfoFieldInfo设置。我不能到处使用属性,因为我的代码也从非我的类获取属性和字段。

我使用这些扩展来获取:

public static List<MemberInfo> GetPropertiesOrFields(this Type t, BindingFlags bf = BindingFlags.Public | BindingFlags.Instance) =>
    t.GetMembers(bf).Where(mi => mi.MemberType == MemberTypes.Field || mi.MemberType == MemberTypes.Property).ToList();

public static List<string> GetPropertyOrFieldNames(this Type t) => t.GetPropertiesOrFields().Select(mi => mi.Name).ToList();

public static MemberInfo GetPropertyOrField(this Type t, string memberName, BindingFlags bf = BindingFlags.Public | BindingFlags.Instance) =>
    t.GetMember(memberName, bf).Where(mi => mi.MemberType == MemberTypes.Field || mi.MemberType == MemberTypes.Property).Single();

可以使用这两个属性的基类型创建属性:

MemberInfo mProperty { get; set; }
然后分配:

mProperty = target.GetType().GetProperty(property);
而且:

mProperty = target.GetType().GetField(property);
另见:


使用MemberInfo作为MPProperty的类型,因为FieldInfo和PropertyInfo都是从中派生的,因为字段和属性都是类成员。此外,如果单个变量可以包含字段信息,则不应将其称为mProperty,因为字段不是属性,反之亦然。
FieldInfo
PropertyInfo
都继承自
MemberInfo
,您可以使用它吗?我尝试使用MemberInfo,但我无法使用它获取和设置值,这是我的目标。我还知道字段不是属性。我只是没有发明更好的名字。在代码上下文中,这个名称是可以理解的,我希望有一个不同的解决方案,但谢谢!我试图想出类似的办法,但没有成功。我知道MemberInfo,但我可能不明白它是如何工作的。再次感谢。@Пааааааааааааааааа.Net没有更好的
Member。总的来说,反思是缓慢的。这不是我需要的
mProperty = target.GetType().GetField(property);