Assegna la stringa letterale come proprietà di un oggetto dinamico durante il runtime e accederlo
-
12-11-2019 - |
Domanda
Come posso assegnare il fieldname di un SQLDataReader durante il runtime dinamicamente a un oggetto dinamico?
Consente di assumere di aver letto il nome di campo di un SQLDataReader in una variabile:
string sqlDataReaderFieldNameStringVariable = reader.GetName(index);
.
Non posso dire:
dynamic dyn = new ExpandoObject();
dyn.sqlDataReaderFieldNameStringVariable = "test";
.
Come posso farlo?
Aggiornamento:
ancora tempo per ottenere un punto ;-) Aggiungo il mio oggetto Dyn a un elenco di tipo ExpandoObject che è il valore di ritorno di un metodo.Quando accedo all'elenco tramite dati [0] ..Test proprietà non esiste durante la compilazione TIME ???
Quando lo faccio al di fuori del metodo che restituisce l'elenco:
dynamic bla = (ExpandoObject)data[0];
String shit = bla.Name;
.
Perché devo gettarlo?Qualsiasi soluzione alternativa?Grazie Jon.
Soluzione
Devi lanciare il ExpandoObject
dyn
a IDictionary<string, object>
prima a farlo:
dynamic dyn = new ExpandoObject();
var dynDict = dyn as IDictionary<string, object>;
dynDict[sqlDataReaderFieldNameStringVariable] = "test";
. Altri suggerimenti
per più oggetti dinamici, è difficile.Fareble (usando IDynamicMetaObjectProvider
) ma complicato.Se sei davvero usando ExpandoObject
, è semplice perché ciò implementa IDictionary<string, object>
:
.dynamic dyn = new ExpandoObject();
var dictionaryView = (IDictionary<string, object>) dyn;
dictionaryView[sqlDataReaderFieldNameStringVariable] = "test";