2010-08-04 13 views
12

Hier ist meine Methode:C# 4.0 Optionale Parameter - Wie gibt man den optionalen Parameter vom Typ "Guid" an?

public void SomeQuery(string email = "", Guid userId = Guid.Empty) 
{ 
    // do some query 
} 

userId ist mir ein Fehler geben, da es eine Kompilierung-Konstante sein muss, was ich verstehe. Aber selbst wenn ich erklären, eine const:

private const emptyGuid = Guid.Empty; 

dann die Methodensignatur ändern:

public void SomeQuery(string email = "", Guid userId = emptyGuid) 
{ 
    // do some query 
} 

noch keine Liebe.

Was fehlt mir?

+0

Mögliche Duplikat [Wie ich einen Parameter Guid.Empty in C# Default kann?] (Https://stackoverflow.com/questions/5117970/how-can-i-default-a-parameter-to-guid-empty-in-c) –

Antwort

20

Haben Sie es auf eine neue Instanz von Guid ala versucht Einstellung:

public void SomeQuery(string email = "", Guid userId = new Guid()) 
{ 
    // do some query 
} 

den Trick tun sollten.

+0

Das ist es. Prost! – RPM1984

+0

@ RPM1984 Freut mich zu hören! –

+3

Das gute an diesem Ansatz ist, dass Sie immer noch mit Guid.Empty in Ihrem Code dafür testen können. z.B. if (userId == Guid.Empty) {...} –

2

Wäre es nicht eine bessere Lösung, die Methode mit einer Version zu überladen, die das Guid nicht benötigt? Dies würde das Problem lösen und wäre meiner Meinung nach ein besseres Design. Natürlich kann es andere Einschränkungen geben, die mir nicht bewusst sind, dass dieses Design notwendig ist.

+0

Der ganze Punkt von C# 4 optionalen Parametern ist eine unnötige Überlastung zu vermeiden. Ich habe etwa 7 Parameter, die ich filtere (in einer LINQ-Abfrage), warum eine Methode 7 mal mit dem gleichen Code überladen? Ich schätze, das sind die anderen Einschränkungen, auf die Sie sich beziehen. =) – RPM1984

+1

für 2 Argumente ist es besser, 2 überladene Methoden als optionale Parameter IMO zu haben. Hauptsächlich ist es für Design wie mySuperObject.Add (ref eins, ref zwei, ref drei, ref vier, ref fünf) vs mySuperObject.Add(); –

2

vielleicht würde es helfen (mit Operator ?? und Guid Nullable Type)

public void some_method(string name, Guid? guid = null) 
{ 
     _name = name; 
     _guid = guid ?? Guid.NewGuid(); 
} 
+0

hi, wenn ich das versuche bekomme ich eine Nachricht (grob übersetzt): Ein Wert des Typs '' kann nicht als Standardparameter verwendet werden, da es keine Standardkonvertierung zu "System.Guid" gibt – Offler