var dict = new Dictionary<string, object>();
DateTime? myDate;
/*Next line gives: Type of conditional expression cannot be
determined because there is no implicit conversion between 'System.DateTime?'
and 'System.DBNull' */
dict.Add("breakit", myDate.HasValue ? myDate.Value : DBNull.Value);
型Objectを予期しているディクショナリに入ると、暗黙の変換が必要な理由がわかりません。この式で三項演算子を使用できないのはなぜですか?
この非常に頻繁にSOに質問をしています。詳細については、http://stackoverflow.com/questions/2215745/conditional-operator-cannot-cast-implicitly/2215959#2215959を参照してください。関連記事http://blogs.msdn.com/b/ericlippert/archive/2010/05/27/cast-operators-do-not-obey-the-distributive-law.aspx –
@Eric I'llも参照してください見てみな。ありがとう! – scottm
ようこそ。問題は、コンパイラの理由とは逆の方向で推論していることです。あなたは、「これは、オブジェクトが期待されるものになることを知っている」と言っています。しかし、コンパイラはあなたが先験的に*選択される "オブジェクト"メソッドを望んでいることを知らない。コンパイラは、逆の理由を試みています。 「この表現にオブジェクトが適合することを期待する方法はありますか?それは "表現のタイプは何ですか?" **問題は、式が動作するかどうかを判断するために式の型を動かすことができないことです** ** –