2009-08-07 6 views
6

Ho una classe come questa:Type.GetProperties Metodo

class ItemList 
{ 
    Int64 Count { get; set; } 
} 

e quando scrivo:

ItemList list = new ItemList (); 

Type type = list.GetType (); 
PropertyInfo [ ] props = type.GetProperties (); 

ottengo un array vuoto per i puntelli.

Perché? È perché GetProperties non include proprietà automatiche?

+6

'Per tutti coloro che vengono da Google:' Se non è ancora possibile mettere le "proprietà" anche dopo aver impostato le bandiere, se siete nuovi a C# e non si conosce il differenza tra 'Properties' e' Fields', prova a usare 'GetFields()'. Probabilmente hai cercato per sempre "campi"! – user1306322

risposta

18

Il problema è che GetProperties restituirà solo proprietà pubbliche per impostazione predefinita. In C#, i membri non sono pubblici per impostazione predefinita (credo che siano interni). Prova questo invece

var props = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic); 

L'enumerazione BindingFlags è abbastanza flessibile. La combinazione precedente restituirà tutte le proprietà di istanza non pubbliche sul tipo. Ciò che si vorrebbe comunque è tutte le proprietà dell'istanza indipendentemente dall'accessibilità. In tal caso, provare il seguente

var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var props = type.GetProperties(flags); 
+0

Grazie, non lo sapevo. Inoltre, come è possibile fornire più opzioni per un singolo argomento? I bit BindingFlags si spostano? –

+1

@ Joan, sì. BindingFlags è un'enumerazione che utilizza flag di bit che è possibile manipolare con |. Non fornisce più argomenti, ma crea semplicemente un valore di enumerazione con varie combinazioni di bit impostate. – JaredPar

+1

Joan: le flag di binding sono un enumerazione di flags, quindi puoi usare | per passare più flag nella funzione. –

Problemi correlati