2013-04-16 38 views
7

如何在一些函數或子函數中聲明一個可選的顏色參數,就像我以正常方式執行那樣(我的意思是爲該可選參數提供一些默認顏色)因爲vb.net編譯器會抱怨代碼中存在一些錯誤。我如何解決這個問題。下面 示例代碼:使用顏色作爲可選參數在類中的函數

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

     End Function 

編譯器不接受 '= Color.Black'

回答

15

MSDN說的Visual Basic

Optional Parameters對於每個可選參數,你必須指定一個常數表達式爲 該參數的默認值。如果表達式的計算結果爲 Nothing,則使用值數據類型的默認值作爲該參數的默認值 。

所以你不能使用的語法,而不是你可以寫這樣的事情

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 

相同的代碼寫在C#是以下

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

在C#中無法測試一個值類型(如顏色,點,尺寸等)與空值。這些類型永遠不會爲null,但它們具有類型的默認值(如0表示整數),因此,如果您需要爲值類型傳遞可選參數,則可以使用關鍵字new創建它喜歡用作默認值或使用default keyword,並讓框架決定哪個值是該類型的默認值。如果讓框架選擇,那麼屬性將是真實的。

+0

這很奇怪,在C#編譯器不會讓聲明的參數,當我宣佈「顏色C =空」。它抱怨說不能將null賦值給值類型。我不得不說「顏色c =新的顏色()」,然後在我的代碼測試「c.IsEmpty」。 –

+1

@BillGregg添加了C#版本 – Steve

5

你可以重載方法

''' <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 
相關問題