web-dev-qa-db-ja.com

C#Nullable配列

検索機能がありますが、LocationIDを単一の整数ではなく、整数の配列にしたいのですが。これもnull許容にしたいので、これを行う方法がわかりません。 int?[]を実行することを検討しましたが、すべてのエントリのHasValueを確認する必要があります。もっと良い方法はありますか?

これは私が現在持っているものです:

public ActionResult Search(string? SearchString, int? LocationId,
    DateTime? StartDate,  DateTime? EndDate)
15
Pr0n

stringと同様に、配列は常に参照型であるため、すでに null許容です。使用する必要があるのはNullable<T>のみです(そしてcan useのみ)。ここで、Tはnull許容でない値型です。

だからあなたはおそらく欲しい:

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>を渡すことができます。

28
Jon Skeet

配列は参照型であるため、何もする必要はありません。すでにnullを渡すことができます。

次のシグネチャを持つメソッドは、すべてのパラメータをnullとして呼び出すことができます。

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


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

注意:stringの後の疑問符も参照型であるため、追加で削除しました。

10
Daniel Hilgarth