2010-08-04 51 views
12

這裏是我的方法:C#4.0可選參數 - 如何指定類型「Guid」的可選參數?

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

userId是給我一個錯誤,因爲它必須是一個編譯時間常數,這我明白。但是,即使當我宣佈一個const:

private const emptyGuid = Guid.Empty; 

那麼該方法的簽名更改爲:

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

仍然沒有愛。

我在想什麼?

+0

的可能重複[我怎樣才能默認在C#中的參數Guid.Empty?](https://stackoverflow.com/questions/5117970/how-can-i-default-a-parameter-to-guid -in-in-c) – 2017-11-19 11:49:22

回答

20

您是否嘗試過將其設置爲Guid ALA的新實例:

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

應該做的伎倆。

+0

就是這樣。乾杯! – RPM1984 2010-08-04 00:45:32

+0

@ RPM1984很高興聽到它! – 2010-08-04 00:48:08

+3

這種方法的好處在於,您仍然可以在代碼中使用Guid.Empty進行測試。例如 if(userId == Guid.Empty){...} – 2010-08-04 00:51:24

2

難道一個更好的解決方案是重載方法的版本不需要Guid?這將解決這個問題,並且在我看來這將是一個更好的設計。當然,我可能還有其他限制,我不知道需要這種設計。

+0

C#4可選參數的要點是避免不必要的重載。 我有大約7個參數,我正在過濾(在LINQ查詢中),爲什麼重載一個方法7次使用相同的代碼?我想這就是你提到的'其他限制'。 =) – RPM1984 2010-08-04 00:46:20

+1

2個參數最好有2個重載方法比可選參數IMO。主要是像mySuperObject.Add(參考一,參考二,參考三,參考四,參考五)與mySuperObject.Add(); – 2010-08-04 01:34:30

2

也許這將有助於(使用運營商??和GUID可空類型)

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

嗨,如果我嘗試這個我得到一個消息(粗略翻譯):類型''kann的值不能用作標準參數,因爲沒有標準轉換爲「System.Guid」 – Offler 2013-01-17 16:20:58