2010-07-07 80 views
-3
public IQueryable<Profile> FindAllProfiles(string CountryFrom, string CountryLoc) 
{ 
.... 
} 

對於上述方法,是否可以有可以爲空的輸入參數CountryFrom和CountryLoc?當我調用這個方法時,我必須傳入2個值,否則我可能會遇到異常。有任何想法嗎..?c#4.0可輸入參數爲空的方法

+0

我很困惑,字符串可以爲空... – heisenberg 2010-07-07 15:55:11

+0

我認爲你的意思是你需要兩個字符串輸入,它們不應該爲空,即你如何強制這些非空。 – Lazarus 2010-07-07 15:55:29

回答

3

如果您正在編寫方法並使用C#4,則可以使用optional arguments

有了它,你可以爲參數設置一個默認值。

如果您只是使用該函數,那麼您可以傳入String.Empty而不是空字符串。

1

string可爲空。你的意思是不可空?

1

string是一個引用類型,因此已經可以爲空。你可以撥打FindAllProfiles(null, null),代碼將至少編譯罰款。當然,您需要確保方法主體適當地處理null參數,但這是輔助的。

或者,如果你只是想禁止調用運行時的FindAllProfiles功能與任何空參數(?你),只是用後衛語句在方法的頂部,例如:

if (CountryFrom == null) 
    throw new ArgumentNullException("CountryFrom") 
if (CountryTo == null) 
    throw new ArgumentNullException("CountryTo") 

旁註:函數參數名稱應根據所有樣式指導書寫入camelCase

1

你的問題問他們是否可以爲空,但它似乎暗示他們一定不能爲空。

因爲string是一個引用類型,它們可以爲空(並且必須爲空)。沒有辦法強制(在編譯時)它們有一個非空值。

2

正如其他人所說,string已經可以爲空....

由於您使用的是string,你需要使用的參數,以驗證值實際存在之前測試對string.IsNullOrEmpty(yourString)

2

您需要檢查入口處的字符串,使用IsNullOrEmpty可能是最好的方法(除非空字符串(「」)有效),那麼您可以返回null或設置默認值和進程,甚至可以拋出自己的異常(並在你的調用例程中捕獲它)。

我很想說,如果你有一個方法調用,你知道不能接受空參數,你檢查之前你調用方法和處理你的調用類。