2010-04-28 25 views
22

默認值每當我嘗試設置可選參數,以在資源文件的東西的默認值,我得到設置的C#可選參數

默認參數值的'編譯時錯誤消息'必須是編譯時常量。

有什麼辦法可以改變資源文件的工作方式嗎?

public void ValidationError(string fieldName, 
          string message = ValidationMessages.ContactNotFound) 

在此,ValidationMessages是一個資源文件。

+0

@Joel:謝謝!那次選旗者有點棘手,我沒有意識到我有點瘋狂。 :-) – Jaxidian 2010-04-28 13:12:33

回答

12

不,您將無法使資源直接在默認狀態下工作。你需要做的是將默認值設置爲null,然後在參數在方法體中具有默認值時執行資源查找。

+0

這就是我所害怕的。我非常喜歡它的開發時間方便性,它告訴開發者字符串是什麼:我意識到我所要求的(編譯資源文件)會導致部分原因它存在,但我用它不是用於本地化和動態更改,而是用作重用字符串的常用存儲。 – Jaxidian 2010-04-28 13:16:38

+0

但當然! Thanx爲這個答案 – 2012-03-16 13:25:58

+0

,但一些默認值是不可空的像'int'。你怎麼處理那件事呢? – 2013-09-12 03:34:50

13

一種選擇是使默認值null,然後填充該適當:

public void ValidationError(string fieldName, string message = null) 
{ 
    string realMessage = message ?? ValidationMessages.ContactNotFound; 
    ... 
} 

當然,這僅適用,如果你不希望允許null作爲一個真正的價值。

另一個潛在的選擇是預先構建一個步驟,該步驟根據資源創建一個包含const字符串的文件;然後你可以引用這些常量。這將是相當尷尬的,但。

+0

這就是我所害怕的。我非常喜歡它的開發時間方便性,它告訴開發者字符串是什麼:我意識到我所要求的(編譯資源文件)會導致部分原因它存在,但我用它不是用於本地化和動態更改,而是用作重用字符串的常用存儲。 – Jaxidian 2010-04-28 13:17:10

11

另一種選擇是你的方法一分爲二,並有一個過載撥打對方,就像這樣:

public void ValidationError(string fieldName) 
{ 
    ValidationError(fieldName, ValidationMessages.ContactNotFound); 
} 

public void ValidationError(string fieldName, string message) 
{ 
    ... 
} 

這種方式,您還可以通過null作爲案例message一個值,也是該參數的有效值。