2010-12-15 5 views
15

Oto przykład funkcja:Czy mogę określić domyślny parametr koloru w C# 4.0?

public void DrawSquare(int x, int y, Color boxColor = Color.Black) 
{ 
    //Code to draw the square goes here 
} 

Kompilator wciąż daje mi ten błąd: Default parameter value for 'boxColor'must be a compile-time constant

Próbowałem

Color.Black, 
Color.FromKnownColor(KnownColor.Black), and 
Color.FromArgb(0, 0, 0) 

Jak zrobić Color.Black być domyślny kolor? Ponadto, nie chcę używać ciągu Black, aby go określić (co wiem, że zadziała). Chcę mieć wartość Color.Black.

Odpowiedz

11

Color.Black jest statyczny, a nie stały, więc nie można tego zrobić.

Aby użyć wartości domyślnej, można ustawić parametr zerowy (Color?), a jeśli jest pusty, ustawić go na Czarny.

+0

Miałem to w mojej odpowiedzi, ale jeśli masz zamiar określić zerowy argument, dlaczego nie wybrać po prostu Color.Black? :) –

+0

@George: "Color.Black jest statyczny, a nie stały". – Vlad

+0

Kolor jest strukturą, więc jeśli używałeś Nullable jako typu (lub w C# Color? Na krótki), to może być on pusty. –

11

Wykonaj:

void foo(... Color boxColor = default(Color)) 
{ 
    if(object.Equals(boxColor, default(Color))) boxColor = Color.Black; 

    // ... 
} 
+0

dlaczego nie po prostu 'if (boxColor == default (Color))? – Vlad

+0

To nie ma znaczenia. Wolę zapis Equals, ale z typami wartości, "==" jest identyczne. –

+0

@Mr. TA: cóż, w tym przypadku lepiej byłoby użyć 'Color.Equals' zamiast' object.Equals'. Lub lepiej 'default (Color) .Equals (boxColor)', abyś używał funkcji wirtualnej. Moim zdaniem '==' jest bardziej czytelne, ale jest to kwestia osobistego gustu. – Vlad

9

Co jest nie tak z ich prostota?

public void DrawSquare(int x, int y) 
{ 
    DrawSquare(x,y,Color.Black); 
} 

public void DrawSquare(int x, int y, Color color) 
{ 
    // Do your thing. 
} 
public void DrawSquare(int x, int y) 
{ 
    DrawSquare(x,y,Color.Black); 
} 

public void DrawSquare(int x, int y, Color color) 
{ 
    // Do your thing. 
} 
+1

Faktyczna funkcja nie jest taka prosta. Ma około 10 parametrów (z których większość jest opcjonalna i może być określona jako opcjonalna). Dodatkowo istnieje 5 lub 6 różnych funkcji z tymi parametrami i dwiema odmianami każdej funkcji. Aby to zrobić, dodamy zbyt wiele funkcji. Dziękuję za sugestię. –