2012-03-29 15 views
0

クラスのプロパティを作成し、変数値を使用してそのプロパティの名前を設定したいとします。変数値を使用してPropertyNameを設定する

など。

string resultValue = "stack"; 
MyClass myclass = new MyClass(); 
myclass.resultValue = "overflow"; 

が今ここに、この場合、stackは、プロパティ名で、"overflow"stackプロパティの値です。

どのように可能か教えてください。

ありがとうございます。

+0

なぜあなたはプロパティを生成しようとしていますか? –

答えて

-1

私が知る限り、これは不可能です。あなたは辞書を使ってみることができます。

+2

オフコースこれは反射を使用して可能です。 – ABH

+0

@hamadかもしれないMariuszは反射について知りませんでした、そして、彼は嘘をつきませんでした!:) – Bazzz

+0

@Bazzz :) 1つは、研究と適切な理解なしで返信すべきではありません – ABH

3

Reflectionを使用できます。たとえば、次のように

string name = "stack"; 
string value = "overflow"; 
PropertyInfo pi = typeof(MyClass).GetProperty(name); 
MyClass instance = new MyClass(); 
pi.SetValue(instance, value, null); 
// at this stage instance.stack equals to "overflow" 

これは明らかにMyClassが公共のセッターを持つパブリックプロパティ・スタックを持っていることを前提としています

public class MyClass 
{ 
    public string stack { get; set; } 
} 
+0

instance.stack = valueの違いは何ですか? –

+1

違いは、コンパイル時に変数の名前を知る必要がないことです。 –

+0

とにかく、名前で取得した後に 'pi!= null'をチェックする必要があります。 –

0

ためにリフレクションを使用する必要がありますMSDNのセクションに必要な情報が記載されているはずです。

.NET Frameworkが単一に基づいて、実行時に複数のプログラミング言語 でソースコードを生成する ソースコードを放射するプログラムの開発を可能にするコードドキュメント オブジェクトモデル(のCodeDOM)と呼ばれる機構を含みますモデルは のコードを表します。

私はあなたもReflectionを使ってこれを行うことができると思います。

0

あなたのクラスにプロパティを生成する理由を想像することはできませんが、他の方法を検討してください。例えば。 Dictionaryを使用して:

class MyClass 
{ 
    Dictionary<string, object> _values = new Dictionary<string, object>(); 

    public object this[string name] 
    { 
     get 
     { 
      if (!_values.ContainsKey(name)) 
       throw new ArgumentException(name); 

      return _values[name]; 
     } 

     set 
     { 
      if (!_values.ContainsKey(name)) 
      { 
       _values.Add(name, value); 
       return; 
      } 

      _values[name] = value; 
     } 
    } 
} 

使用法:

MyClass myClass = new MyClass(); 
myClass["stack"] = "overflow"; 
Console.WriteLine(myClass["stack"]); 
+0

素敵なテクニック...ありがとうございます – user1300007

+0

'value' [name] = value'が存在しなければキーを追加するので、' set'メソッドの 'if'節全体をスキップできます。 – ChrisWue

+0

@ChrisWueありがとう、忘れてしまった! –

0

をたぶん、あなたはDynamicObjectを見てみる必要があります。これにより、実行時に値を割り当てるだけでプロパティを作成できます。例はMSDN articleにもあります。

0

マークGravellのFastMember

を見にそれはあなたが動的な方法でプロパティを設定することができます持っています。

// obj could be static or DLR 
var wrapped = ObjectAccessor.Create(obj); 
string propName = // something known only at runtime 

FastMember Blog Post

関連する問題