Si consideri il seguente codice di esempio:La creazione di due istanze delegato per lo stesso metodo anonimo non sono uguali
static void Main(string[] args)
{
bool same = CreateDelegate(1) == CreateDelegate(1);
}
private static Action CreateDelegate(int x)
{
return delegate { int z = x; };
}
Si potrebbe immaginare che le due istanze delegato paragonerei ad essere uguali, proprio come avrebbero quando si usa il buon vecchio metodo metodo denominato (nuova azione (MyMethod)). Non vengono confrontati per essere uguali perché .NET Framework fornisce un'istanza di chiusura nascosta per istanza delegata. Poiché queste due istanze delegate hanno ciascuna le loro proprietà di destinazione impostate sulla loro singola istanza nascosta, esse non vengono confrontate. Una possibile soluzione è che l'IL generato per un metodo anonimo memorizzi l'istanza corrente (questo puntatore) nella destinazione del delegato. Ciò consentirà ai delegati di confrontare correttamente e anche di aiutare da un punto di vista del debugger poiché vedrai la tua classe come target, invece di una classe nascosta.
È possibile leggere ulteriori informazioni su questo problema nel bug che ho inviato a Microsoft. Il bug report fornisce anche un esempio del perché stiamo usando questa funzionalità, e perché riteniamo che dovrebbe essere cambiato. Se ritieni che questo sia un problema, ti preghiamo di supportarlo fornendo rating e convalida.
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=489518
Potete vedere ogni possibile ragione per cui la funzionalità non dovrebbe essere cambiato? Pensi che questa sia stata la migliore linea di condotta per risolvere il problema, o ti consiglio di prendere una strada diversa?
In quale specifica ha Microsoft contare che questi due dovrebbero essere uguali? Con lo stesso ragionamento, posso affermare che 'new MyClass() == new MyClass()' dovrebbe essere 'true' se' MyClass' è una classe vuota, per esempio. Sei troppo veloce per nominare un comportamento che non è menzionato in alcuna specifica come "bug". –
In quale specifica hanno menzionato che non dovrebbero essere uguali? –