2

次のコードは、演算子を使用して正常にコンパイルされますcomparison

If(dateTimeVariable > SqlDateTime.MinValue) //compiles Ok. dateTimeVariable is of type DateTime
{
}

ただし、次のコードはコンパイルに失敗します。

DateTime dateTimeVariable=SqlDateTime.MinValue;
//Throws exception , cannot convert source type SqlDateTime to DateTime. Which is obvious.

私の質問は、comparisonと の間SqlDateTimeでが許可されているDatetimeのに が許可されていない理由ですassignment。(comparisonオペレーターがなんらかのimplicit変換を行っている場合を除きます。)

本当に基本的な何かが欠けているに違いないと思います。

4

2 に答える 2

2

には、追加の作業なしSqlDateTimeで aDateTimeを anに変換する暗黙の変換があります。SqlDateTime

public static implicit operator SqlDateTime(DateTime value)
{
    return new SqlDateTime(value);
}

// SqlDateTime mySqlDate = DateTime.Now

起こっているに違いないのは、比較のためにaから andateTimeVariableに暗黙的に変換されていることです。DateTimeSqlDateTime

if (dateTimeVariable > SqlDateTime.MinValue)
{
    // if dateTimeVariable, after conversion to an SqlDateTime, is greater than the
    //  SqlDateTime.MinValue, this code executes
}

しかし、次のコードの場合、単純SqlDateTimeに変数に an を詰め込むことを許可するものは何もDateTimeないため、許可されません。

DateTime dateTimeVariable = SqlDateTime.MinValue;  // fails

初期値をキャストすると問題なくコンパイルされますが、 の一部でSqlDateTimeあって ではない貴重な情報が失われる可能性がありますDateTime

DateTime dateTimeVariable = (DateTime)SqlDateTime.MinValue;
于 2015-06-03T03:01:10.640 に答える