Perché il seguente codice non funziona:valore Set di campo privato
class Program
{
static void Main (string[ ] args)
{
SomeClass s = new SomeClass();
s.GetType().GetField("id" , System.Reflection.BindingFlags.NonPublic) // sorry reasently updated to GetField from GetProperty...
.SetValue(s , "new value");
}
}
class SomeClass
{
object id;
public object Id
{
get
{
return id;
}
}
}
Sto cercando di impostare il valore di un campo privato.
Ecco eccettuati ottengo:
System.NullReferenceException era riferimento gestita Messaggio = Oggetto non impostato a un'istanza di un oggetto. Source = ConsoleApplication7
StackTrace: a Program.Main (String [] args) in C: \ Users \ Antonio \ Desktop \ ConsoleApplication7 \ ConsoleApplication7 \ Program.cs: linea a System.AppDomain._nExecuteAssembly (RuntimeAssembly assemblaggio, String [] args) a System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, string [] args) a Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() a System.Threading.ThreadHelper.ThreadStart_Context (stato oggetto) in System.Threading.ExecutionContext.Run (ExecutionContext executionContext, callback ContextCallback, stato dell'oggetto, booleano ignoreSyncCtx) in System.Threading.Executi onContext.Run (ExecutionContext ExecutionContext, ContextCallback callback, stato oggetto) a System.Threading.ThreadHelper.ThreadStart() InnerException:
Puoi specificare "non funziona"? Cosa succede e in che cosa differisce da ciò che ti aspetti? Ricevi un messaggio di errore? – Guffa
Provare a iterare attraverso GetFields() (manualmente usando il punto di interruzione del debugger) per vedere cosa viene restituito. Afaik, non vi è alcuna garanzia che l'ID della variabile rimarrà id nominativo, ma non ne sono sicuro. Inoltre, ho avuto problemi a ottenere proprietà/metodi privati in precedenza e in genere viene risolto utilizzando BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance (ad esempio) – Alxandr