2009-06-05 18 views
1

私は未知の "オブジェクト"を提供し、そのメンバの1つの値を返す必要があります。応答はC#で必要です。簡単な返信質問C#

総称的に私はこの方法 パブリック静的オブジェクトGetObjectMemberValueへのコードを探していると思います(myObjectという、文字列memberNameのオブジェクト)

具体的には、私はSilverlightのリソース文字列のためにこれをやって、これを記述する必要がありますよ方法。それは共通のプロジェクトに存在するいくつかの異なるResx辞書に対して使用されているので、私は型情報にアクセスする必要はありません。 public static string GetString(オブジェクトStringResources、string ResourceId)

ありがとうございます!

答えて

5

これはあなたの価値を得るでしょう...あなたは私の質問のresxの部分でより多くの情報を与えることができますか?私は必要なすべてのです

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

。ありがとうRussau。 resxの部分は解説する価値のないハックです。 Silverlight 2.0では、複数のSilverlightクラスライブラリプロジェクトにリソース辞書(xaml)を含めることができないため、私が作成したちょっとしたおかしな回避策です。結合された辞書はSilverlight 3.0でサポートされていました。移行すると、このハックを取り除くことができます。リフレクションはクールですが、強くオブジェクトを入力するときには避けるべきであるという点で、他のコメントのいくつかに完全に同意します。 – Justin

1

オブジェクトタイプを知っている場合は、そのオブジェクトにキャストしますか?

明示的な型がわからない場合は、少なくともインターフェイスを実装する必要がありますか? )(

タイプmyObjectType = myObject.GetType;

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

最初のオブジェクトの種類を取得します

次に、returned Type objectを使用してプロパティの情報を取得してから値を取得できます。

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()); 
    } 
} 
+0

オブジェクトに拡張メソッドを記述しないでください。インタフェースを作成し、その上に拡張メソッドを記述します。 – Robert

+0

私はあなたに同意します、それはそれを行う正しい方法です。 – jason

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