2013-04-17 39 views
12

我有一個搜索函數,但我想LocationID是一個整數數組而不僅僅是一個整數。我不知道如何做到這一點,因爲我希望它也可以爲空。我已經看過了int?[],但之後我必須檢查每個條目的HasValue。有沒有更好的辦法?C#可空數組

這是我目前有:

public ActionResult Search(string? SearchString, int? LocationId, 
    DateTime? StartDate, DateTime? EndDate) 
+1

Mods,這個質量問題過濾器難以置信地過去。最後,在標題中加入'使用'是它的工作原理。我不明白爲什麼這是一個可怕的問題,也許你可以詳細說明。 – Preston

+0

'C#','nullable'和'arrays'都是標籤。這就是爲什麼你的頭銜被拒絕了。 –

+0

@EsotericScreenName ...這聽起來不太合理,因爲標籤是人羣來源。 – Preston

回答

26

數組總是參考類型,因爲它們是string - 所以它們是已經是可以爲空。您只需要使用(並且只能使用可以使用Nullable<T>其中T是不可空值類型。

所以,你可能想:

public ActionResult Search(string searchString, int[] locationIds, 
          DateTime? startDate, DateTime? endDate) 

請注意,我已經改變了你的參數名稱遵循.NET的命名規則,並改變LocationIdlocationIds,以表明它是多個位置。

您可能還需要考慮將參數類型更改爲IList<int>或者甚至將IEnumerable<int>更改爲更一般。

public ActionResult Search(string searchString, IList<int> locationIds, 
          DateTime? startDate, DateTime? endDate) 

這樣呼叫者可以傳遞一個List<int>例如。

9

數組是引用類型,所以你沒有做任何事情,你已經可以通過null

的方法具有以下簽名與所有參數稱爲null

public ActionResult Search(string SearchString, int[] LocationIds, 
          DateTime? StartDate, DateTime? EndDate) 


foo.Search(null, null, null, null); 

請注意:我還刪除了問號後,因爲它也是一個參考類型。