2016-07-08 7 views
0

この質問のタイトルをどのようにするかはわかりませんでした。
私は別の変数を介してクラスのメンバ変数を取得しようとしています。例を挙げて説明しましょう。他の変数名でメンバ変数を取得するC#

これは私のコードで、Networkクラスのメンバー変数の値にアクセスしようとしています。
itemは、NOT私がアクセスしようとしている変数の名前ですitemは、私がアクセスしようとしている変数の文字列を保持している。)

private void addKeyValuePairRow(string item) { 
    addRow(item); 
    addKeyLabel(item, false); 
    addValueLabel(item); 

    if (item.Contains("_")) 
     item = item.Replace("_", ""); 

    setValue(Network[item]); 
} 

ネットワーククラス:

public class Network { 
    public string DefaultGateway { get; set; } 
    public string ExternalIP { get; set; } 
    public string SSID { get; set; } 
    public string NetworkConnection { get; set; } 
    public string NetworkConnectionType { get; set; } 
    public string InternetConnection { get; set; } 

    ... 
} 

だから私はDefaultGatewayを取得しようとしている、これはメソッドを呼び出す私のコードだろう:

addKeyValuePairRow("Default_Gateway"); 

これは比較的単純な作業だと思うが、何も見つかりません。

助けてください。

+2

リフレクションを使用できます。詳細については、https://msdn.microsoft.com/en-us/library/system.reflection.fieldinfo.getvalue(v=vs.110).aspxを参照してください。 –

+0

アプリケーションが実行する操作量に応じて、問題はかなり広く変わるかもしれませんが、確かに一つのことです。リフレクションや、Automapperのような第三者のライブラリの使用は、それを行う方法です。リフレクション(これらすべてのGetType()、GetProperty()など)は動作が遅く、高いワークロードでパフォーマンスの問題を引き起こす可能性があります。 – Fabjan

答えて

3

ネットワークのクラスはしかし、あなたの質問のどこにインスタンス化されている場所が定義されていませんでした

var src = new Network(); 
setValue(src.GetType().GetProperty(item).GetValue(src, null)); 

ような何か。

+1

これは完全に機能します!ありがとうございました! – wmash

関連する問題