轻松反思问题C#

时间:2009-06-05 03:15:56

标签: c# .net reflection

我想提供未知的“对象”并返回其中一个成员的值。 C#中需要响应。

通常我想我正在寻找这种方法的代码 public static object GetObjectMemberValue(object myObject,string memberName)

更具体地说,我正在为Silverlight中的资源字符串执行此操作,并且需要编写此方法。它驻留在一个共同的项目中用于对几个不同的Resx词典,因此我无法访问类型信息。 public static string GetString(object StringResources,string ResourceId)

谢谢!

5 个答案:

答案 0 :(得分:5)

这会得到你的价值......你能在问题的resx部分给我更多信息吗?

public static object GetObjectMemberValue(object myObject, string memberName)
{
  PropertyInfo dateProperty = myObject.GetType().GetProperty(memberName);
  return dateProperty.GetValue(myObject, null);
}

答案 1 :(得分:1)

如果您知道对象类型,那么转换为它?

如果您不知道显式类型,它至少应该实现一个接口?

MyType value = (MyType)objectGetter() //this is the function that returns the unknown.
value.GetMember()

答案 2 :(得分:1)

static class ObjectExtensions {
    public static object GetObjectPropertyValue(this object o, string propertyName) {
        return o.GetType().GetProperty(propertyName).GetValue(o, null);
    }
}

class Test {
    public string Message {get; set;}
}

class Program {
    static void Main(string[] args) {
        object t = new Test { Message = "Hello, World!" };
        Console.WriteLine(t.GetObjectPropertyValue("Message").ToString());
    }
}

答案 3 :(得分:0)

首先获取对象的类型:

输入myObjectType = myObject.GetType();

然后,您可以使用returned Type object获取属性的信息,然后使用它的值。

答案 4 :(得分:0)

o.GetType().InvokeMember( "MemberName", BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, o, null );