Condividi tramite


Argomenti di chiamata obbligati in base a ECMA-335

ECMA-335 (Tabella III.9: Corrispondenza delle firme) descrive quali conversioni implicite sono supportate per gli argomenti di chiamata. Questa modifica aggiunge il controllo delle conversioni supportate.

Versione introdotta

6.0

Descrizione delle modifiche

Nelle versioni precedenti di .NET il compilatore JIT (Just-In-Time) non obbliga argomenti di chiamata in base a ECMA-335. Ciò comporta un comportamento non definito in alcune piattaforme. Ad esempio, in x86, il passaggio di un valore long come un registro intlascia il registro indefinito.

A partire da .NET 6, se la conversione implicita non è consentita, il compilatore JIT genera un InvalidProgramException. Esistono due casi di conversione che sono ancora consentiti:

  • int8 ->nint sulla piattaforma a 64 bit (perché viene usata spesso e non causa codice non valido)
  • byref ->nint

Motivo della modifica

Il comportamento precedente ha causato la generazione di codice invisibile all'utente in alcune piattaforme, tra cui Arm64 Apple.

Se è stato eseguito l'aggiornamento a .NET 6 e l'app genera InvalidProgramException eccezioni a causa di questa modifica, usare una conversione esplicita per l'argomento interessato oppure correggere la dichiarazione del computer chiamato.

API interessate

Nessuno.