2011-09-27 6 views
24
public class TestClass 
{ 
     public string property1 { get; set; } 
     public string property2 { get; set; } 

     internal string property3 { get; set; } 
     internal string property4 { get; set; } 
     internal string property5 { get; set; } 
} 

次のループでプロパティを反復処理できますが、パブリックプロパティのみが表示されます。私はすべてのプロパティが必要です。Cの内部プロパティを反復するには

あなたが Type.GetProperties

にお電話してください上のBindingFlags変更する必要が

foreach (PropertyInfo property in typeof(TestClass).GetProperties()) 
{ 
    //do something 
} 
+0

またhttp://stackoverflow.com/questions/16024006/how-do-i-look-up-the-internal-propertiesを見ます-of-ac-sharp-class-protected-protecteを使用しています。 – nawfal

答えて

48

BindingFlags

foreach (PropertyInfo property in typeof(TestClass) 
      .GetProperties(BindingFlags.Instance | 
          BindingFlags.NonPublic | 
          BindingFlags.Public)) 
{ 
    //do something 
} 

静的なプロパティを含める場合は、BindingFlags.Staticを追加します。

パラメータなしオーバーロードはパブリックプロパティのみを返します。

+7

NonPublicとInstanceを与えると、小道具1と小道具2が隠されます。とにかく保護されているか内部のものだけを選択するには、すべてのプロパティ –

+0

の公開? –

+0

@NevilleNazerane:私が知っているバインディングフラグではありません。後でフィルタリングしてください。 –

10

:あなたが受け入れてoverloadを使用して、あなただけのパブリックプロパティを必要としないことを指定する必要があり

var instanceProperties = typeof(TestClass).GetProperties(
    BindingFlags.Public | 
    BindingFlags.NonPublic | 
    BindingFlags.Instance 
); 
foreach(var instanceProperty in instanceProperties) { 
    // a little something something for the instanceProperty 
} 
+0

ええ、BindingFlags.Publicも追加する必要がありました – gangt

3

使用BindingFlags

foreach (PropertyInfo property in typeof(TestClass) 
     .GetProperties(
      BindingFlags.Public | 
      BindingFlags.NonPublic | 
      BindingFlags.Instance)) 
{ 
    //do something 
} 
3

GetPropertiesの中のBindingFlags何を指定することによって:

foreach (PropertyInfo property in typeof(TestClass).GetProperties(
     BindingFlags.Instance| 
     BindingFlags.Public| 
     BindingFlags.NonPublic)) 
3

MSDNによると、民間と内部がリフレクションAPIに認識されません。

Reflectionを使用して内部メソッドを識別するには、IsAssembly プロパティを使用します。保護された内部メソッドを識別するには、 IsFamilyOrAssemblyを使用します。

いくつかのテストユニットを作成している場合InternalsVisibleTo属性を調べるとよいでしょう。内部プロパティを表示できるアセンブリを指定することができます。

そして最後に、あなたは本当に内部の性質を持っている必要があります...

+0

ええ、wcfサービスクラスです。クライアントにいくつかのプロパティを入力してからサーバーに送信し、残りのプロパティをサービスに書き込むようにします。 – gangt

関連する問題