2

私は持っています:

DateTime?[] dates

私はに変換する必要があります:

Double?[] oaDates

このワンライナーをクリーンアップする方法はありますか?それとも、関数に頼るべきですか?

DateTime?[] dates = new DateTime?[]{DateTime.Now, DateTime.Now.AddDays(1), DateTime.Now.AddDays(2)}; //example array
Double?[] oaDates = dates.Select(t => (t==null)?((double?)null):(t??DateTime.MinValue).ToOADate()).ToArray();

nullであることを確認せずにtのメソッドを呼び出すことはできず(したがって、3次演算子)、OADateを呼び出すことができるように、メソッドも合体する必要があります(したがって、合体とフィラーのDateTime.MinValueはヒットしません)。

それは一行で仕事を成し遂げます、しかしそれは少しperlのように見えます。

多分拡張メソッド?そうすれば、醜さを隠して、次のようなことをすることができます。

dates.ToNullableOADates();
4

4 に答える 4

3

実際には、null参照に対して拡張メソッドを呼び出すことができます。DateTime?したがって、単一をdouble?同様のものに変換する拡張メソッドを定義できます。

public static class DateUtil
{
    public static double? ConvertToDouble(this DateTime? date)
    {
        return date.HasValue ? date.Value.ToOADate() : (double?)null;
    }
}

次に、次のように呼び出します。

double?[] oaDates = dates.Select(t => t.ConvertToDouble()).ToArray();

ただし、メソッドグループ構文を使用して同様に呼び出すことができます。

double?[] oaDates1 = dates.Select(DateUtil.ConvertToDouble).ToArray();
于 2012-05-18T05:30:11.453 に答える
2

なぜあなたはtを持っているのか分かりませんか?

あなたはただすることはできません...

Double?[] oaDates = 
   dates.Select(t => (t == null) ? (double?)null : t.Value.ToOADate()).ToArray();
于 2012-05-18T05:05:26.383 に答える
0
var array = dates.Select(t => t.HasValue ? t.Value.ToOADate() : (double?)null).ToArray();
于 2012-05-18T05:52:03.970 に答える
0
 dates.Select( t=> t==default(DateTime?) || t.HasValue==false ? (double?)(null):t.Value.ToOADate() ).ToArray()
于 2012-05-18T05:57:53.457 に答える