2013-04-16 14 views
7

Come posso dichiarare un parametro di colore opzionale in alcune funzioni o sub, come se lo facessi nel modo normale (intendo dare un colore predefinito per quel parametro facoltativo) come il compilatore vb.net si lamenta che c'è qualche errore in quel codice. Come risolvo questo problema. codice di esempio qui sotto:Uso del colore come parametro opzionale In una funzione all'interno di una classe

Public Shared Function SomeFunction(ByVal iParam As Integer, Optional ByVal oColor As Color = Color.Black) 

     End Function 

Il compilatore non accetta '= Color.Black'

risposta

15

MSDN dice di Optional Parameters per Visual Basic

Per ogni parametro opzionale, è necessario specificare un costante espressione come il valore predefinito di quel parametro. Se l'espressione è uguale a Nothing, il valore predefinito del tipo di dati del valore viene utilizzato come valore predefinito del parametro .

Così non si può usare quella sintassi, invece si potrebbe scrivere qualcosa di simile

Private Sub Test(a As Integer, Optional c As Color = Nothing) 
    If c = Nothing Then 
     c = Color.Black ' your default color' 
    End If 
    ...... 
End Sub 

Lo stesso codice scritto in C# è la seguente

private void Test(int a, Color c = default(Color)) 
{ 
    if (c.IsEmpty) 
     c = Color.Black; 
} 

In C# non è possibile verificare un tipo di valore (come Colore, Punto, Dimensione ecc.) contro un valore nullo. Questi tipi non sono mai nulli, ma hanno un valore predefinito per il tipo- (Mi piace 0 per i numeri interi), quindi, se devi passare un parametro facoltativo per un tipo di valore, puoi crearlo con la parola chiave new con i valori che desideri piace usare come predefinito o usare il default keyword e lasciare che il framework decida quale valore è il default per il tipo. Se si lascia che il framework scelga la proprietà IsEmpty sarà vera.

+0

E 'strano che in C# il compilatore non mi permette di dichiarare "Color c = null" quando si dichiara il parametro. Si lamentava di non poter assegnare null al tipo di valore. Ho dovuto dire "Colore c = nuovo colore()" e poi nel mio test del codice per "c.IsEmpty". –

+1

@BillGregg ha aggiunto la versione C# – Steve

5

Si potrebbe sovraccaricare il metodo

''' <summary> 
''' requires two parameters 
''' </summary> 
''' <param name="a">an integer</param> 
''' <param name="c">a color</param> 
''' <remarks></remarks> 
Private Sub Test(a As Integer, c As Color) 
    'Your function 
End Sub 

''' <summary> 
''' one parameter, uses default color of black 
''' </summary> 
''' <param name="a">an integer</param> 
''' <remarks></remarks> 
Private Sub Test(a As Integer) 
    Test(a, Color.Black) 
End Sub 
Problemi correlati