0

2つのメソッドを追加したいリポジトリクラスがあります。

public IEnumerable<OpenCall> OpenCalls()
{
    return something;
}

public IEnumerable<OpenCall> OpenCalls(DateTime start, DateTime endd)
{
    return something_slightly_different;
}

各メソッド内で、平均解像度のリストを返す別のメソッド(AverageResolutions())を呼び出します。明らかに、このメソッドも0パラメーターまたは2パラメーターを取る必要があります。現時点での作業方法は、OpenCalls()のほぼ同一の2つのコピー、またはAverageResolutions()のほぼ同一の2つのコピーで終了し、DateTimeパラメーターを許可するようにわずかに変更されています。

私はこれを間違っていると思います-0または2つのパラメーターを取り、それらがnullまたはnullでない場合に、さらに下の行で何を呼び出すかを決定するメソッドの1つのバージョンを作成するにはどうすればよいですか?

4

2 に答える 2

1

オプションの引数を使用するようにメソッドシグネチャを変更できます。

public IEnumerable<OpenCall> OpenCalls(DateTime? start=null, DateTime? end=null)
{
    if (start.HasValue && end.HasValue)
    {
        return something_slightly_different;
    }
    return something;
}

-parametersをnull許容にする必要があることに注意してくださいDateTime。そうしないと、デフォルト値(コンパイル時定数である必要があります)を設定できなくなります。

null許容型とシンタックスシュガーの詳細については(Nullable型に関するMSDNの記事を参照するDateTime?代わりに書く)Nullable<DateTime>

オプションのパラメータの詳細については、名前付き引数とオプションの引数に関するMSDNの記事の「オプションの引数」セクションを参照してください。

于 2013-02-07T12:32:26.713 に答える
0
public IEnumerable<OpenCall> OpenCalls()
{
    return OpenCalls(null, null);
}

public IEnumerable<OpenCall> OpenCalls(DateTime? start, DateTime? endd)
{
    //if (!start.HasValue) ... etc.
    return something_slightly_different;
}

このソリューションが「賢い」かどうかは、他のコードに依存します。ヌルチェックを数十回行うのは良くありません。1回か2回だけチェックする必要がある場合は、それが良い解決策になる可能性があります。また、オプションのパラメータを使用することもできます。

于 2013-02-07T12:33:34.923 に答える