5

Avere il seguente codice banale:Un bug di Roslyn? Su membro non condivisa, sto errore che sto usando 'inizializzazione membro condiviso' ottenere

Class A 

    Private value As Integer = 1 

    Sub Action(Optional param1 As Integer = value) 
    End Sub 

End Class 

Visual Studio lamenta valore di default (value) con l'errore BC30369 :

Impossibile riferirsi a un membro di istanza di una classe da un metodo condiviso o da un inizializzatore di membro condiviso senza un'istanza esplicita della classe.

Questo è davvero l'errore giusto per questo caso? Il metodo non è condiviso.

In Visual Studio 2012 o 2013, l'errore nello stesso caso è

è necessaria espressione costante.

ciò che ha assolutamente senso.

+0

Questo è strano, ho ottenuto "Espressione costante è necessaria" – Steve

+0

Sì, non utilizzando VS2015 ma 2013. – Steve

risposta

2

Dopo ulteriori ricerche, penso che ci sia un problema in ordine di controlli effettuati dal compilatore.

Se cambio il codice, rendendo value membro Shared, ottengo risultato corretto: Errore BC30059

è necessaria espressione costante.

Dal momento che nulla, tranne le costanti può essere collocato in valore predefinito di opzionale clausola, controllare quanto sopra BC30059 ("è necessaria l'espressione costante.") Dovrebbe essere ovviamente fatto "in precedenza" rispetto al controllo per BC30369 (mostrato in questione).

Ho creato bug report at Microsoft Connect.

Problemi correlati