Sto sviluppando per Unity3D utilizzando C# e ho deciso che sarebbe utile avere una funzione di asserzione. (In Unity3D, System.Diagnostics.Debug.Assert
esiste, ma non fa nulla.)Ottieni stringa che rappresenta l'espressione utilizzata come argomento di funzione in C#
Come sviluppatore che lavora principalmente in C++, io sono abituato ad affermare i messaggi che contengono l'espressione rivendicato dell'operatore preprocessore stringizing. Cioè, data la mancata affermazione del modulo ASSERT(x > 0, "x should not be zero.")
, il messaggio visualizzato al messaggio di runtime può includere il testo "x> 0". Mi piacerebbe essere in grado di fare lo stesso in C#.
Sono a conoscenza di ConditionalAttribute e DebuggerHiddenAttribute e sto utilizzando entrambi (anche se quest'ultimo sembra essere ignorato dalla build personalizzata di MonoDevelop in bundle con Unity). Durante la ricerca di una soluzione a questo problema, ho trovato tre attributi nello spazio dei nomi System.Runtime.CompilerServices
che sembrano correlati a ciò che sto cercando di fare: CallerFilePathAttribute, CallerLineNumberAttribute e CallerMemberNameAttribute. (Nella mia implementazione, io uso System.Diagnostics.StackTrace
con fNeedFileInfo == true
invece.)
Mi chiedo se non v'è forse alcuna magia di riflessione (sembra improbabile) o un attributo magico (sembra un po 'più probabile) che può aiutarmi a raggiungere la stessa funzionalità Sono abituato a C++.
Sì, esattamente quello che stavo pensando. Dato che hai fornito il codice di lavoro, ho cancellato la mia risposta. –