我有这些课程:
public class Foo
{
public Bar bar;
}
public class Bar
{
public List<int> Something { get; set; }
public string Else { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有很多类似的课程Foo。它们都只包含一个字段。Bar在我的例子中,这个字段每次都是不同类型的对象,它不必是 type Bar。无论它是什么对象(Bar或其他),该字段将始终是一个具有两个属性的对象,Something和Else。
我的挑战:给定任何类似于 Foo 的对象(具有一个包含两个属性的 Field),获取这两个属性的值。鉴于这种方法:
public void DoStuff(object myObject)
{
var asdf = myObject.GetType().GetFields().First();
}
Run Code Online (Sandbox Code Playgroud)
我可以获得 Bar 的 FieldInfo。我正在寻找的是值Something和Else。这些属性的名称永远不会改变。无论字段的类型是什么,它总会有两个命名的属性,Something并且Else它们的类型相同。
遗憾的是,我的问题涉及自动生成的代码,并且没有我可以轻松使用的共享接口或基本类型。
使用此代码,您可以检索和属性的PropertyInfos :SomethingElse
Foo myObject = new Foo { bar = new Bar() };
// the FieldInfo for Foo.bar
var barField = myObject.GetType().GetFields().First();
// the Bar instance, i.e. myObject.bar
var barValue = barField.GetValue(myObject);
var somethingProperty = barField.FieldType.GetProperty("Something", BindingFlags.Instance | BindingFlags.Public);
var elseProperty = barField.FieldType.GetProperty("Else", BindingFlags.Instance | BindingFlags.Public);
Run Code Online (Sandbox Code Playgroud)
作为PsiHamster指出的,然后你可以使用GetValue与SetValue检索和设置的值somethingProperty和elseProperty这样的:
// get the value
var somethingValue = somethingProperty.GetValue(barValue);
// set the value
somethingProperty.SetValue(barValue, new List<int>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |