2011-07-12 11 views
4

私は処方と呼ばれるクラスを持っています。それは他のクラスであるプロパティを持っています。たとえば、Fillsのプロパティ名は、必要な値についての他のプロパティを持つPDIntクラスのものです。別のオブジェクト内のオブジェクトの名前

私は処方クラスで塗りつぶしプロパティの値を設定したい場合は、だから今、私は塗りつぶしプロパティの名前を取り、それを詰め込むしたい

Prescription p = new Prescription(); p.Fills.Value = 33;

ようなものになるだろうwinformコントロール内のtagプロパティ

this.txtFills.Tag = p.Fills.GetType().Name; 

ただし、これを行うと、プロパティ名ではなくプロパティの基本クラスが取得されます。したがって、「塗りつぶし」を得る代わりに、「PDInt」を取得します。

プロパティのインスタンス化された名前を取得するにはどうすればよいですか?

ありがとうございます。

+1

だけリンクをありがとうございましたが、これはありませんが、最初のhttp://www.csharp-examples.net/reflection-property-names/ –

+0

Astanderを打つ、「C#の反射特性名を」グーグルでみてください私が探しているもの。私は、親クラスを反映させ、それを繰り返して単一のプロパティを見つける必要はありません。私は自分のクラスのプロパティ名を持つエディットコントロールのグループを記入し、クラスである単一のプロパティを取得し、インスタンス化された名前を取得する方法を探しています。 – MikeMalter

答えて

7

よう

何かが、私はあなたのような仕事をしたいとき、私はそれを使用するextension methodです:についての詳細は

var name = p.Item(x=>x.Fills); 

public static class ModelHelper 
{ 
    public static string Item<T>(this T obj, Expression<Func<T, object>> expression) 
    { 
     if (expression.Body is MemberExpression) 
     { 
      return ((MemberExpression)(expression.Body)).Member.Name; 
     } 
     if (expression.Body is UnaryExpression) 
     { 
      return ((MemberExpression)((UnaryExpression)(expression.Body)).Operand) 
        .Member.Name; 
     } 
     throw new InvalidOperationException(); 
    } 
} 

は、としてそれを使用します方法の仕組みを見てくださいExpression Tree in .Net

+0

+1その良い一人の仲間 –

+0

+1。おい、あなたがそれをしたとは信じられない。私が必要としたものの完璧な例。私は周りの表現木をしばらく見てきました。私はそれを磨き、もっと学ぶ必要があります。どうもありがとうございました。 – MikeMalter

+0

@ MikeMalter、@ Pranay Rana、ありがとう。 –

1

チェックに便利です。このブログ投稿:http://handcraftsman.wordpress.com/2008/11/11/how-to-get-c-property-names-without-magic-strings/

はあなたの.NET Frameworkのリフレクション機能を利用するために必要なこれを行います。以下は、この

Type type = test.GetType(); 

PropertyInfo[] propInfos = type.GetProperties(); 
for (int i = 0; i < propInfos.Length; i++) 
{ 
    PropertyInfo pi = (PropertyInfo)propInfos.GetValue(i); 
    string propName = pi.Name; 
} 
+1

Uはより多くの使用可能なコードでリフレクションなしで式ツリーを使用できます。 –

+1

ブログ投稿良い、あなたのサンプルコードが悪い(それはまさにブログの作者が避けようとしているものです) –

+0

@Ben Voigt - 返信ありがとう......... –

0

あなたはあなたのようにあなたを得ることができますか? ↓

public class Prescription 
{ 
    public PDInt Fills; 
} 

public class PDInt 
{ 
    public int Value; 
} 




Prescription p = new Prescription(); 
foreach(var x in p.GetType().GetFields()) 
{ 
    // var type = x.GetType(); // PDInt or X //Fills 
} 
+0

Scott、この例のおかげで。私は、親クラスを反映させ、それを繰り返して単一のプロパティを見つける必要はありません。私は自分のクラスのプロパティ名を持つエディットコントロールのグループを記入し、クラスである単一のプロパティを取得し、インスタンス化された名前を取得する方法を探しています。理にかなっている? – MikeMalter

+0

@MikeMalter OH ...はい、申し訳ありませんが、私は今あなたを捕まえることができます...そして、私も上記の完璧な例を見つけました....ありがとう~~ – shenhengbin

関連する問題