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);
Nie rozumiem, dlaczego musi istnieć niejawna konwersja, jeśli jedna lub druga wchodzi do słownika oczekującego typu Object.Dlaczego nie mogę używać operatora potrójnego z tym wyrażeniem?
Jest to bardzo często zadawane pytanie na SO. Szczegółowe informacje można znaleźć na stronie http://stackoverflow.com/questions/2215745/conditional-operator- cannon -cast-implicitly/2215959#2215959. Zobacz także mój powiązany artykuł http://blogs.msdn.com/b/ericlippert/archive/2010/05/27/cast-operators-do-not-obey-the-distributive- law.aspx –
@Eric Będę Sprawdź to. Dzięki! – scottm
Nie ma za co. Problem polega na tym, że rozumujesz w przeciwnym kierunku, niż to wynika z kompilatora. Mówisz: "Wiem, że to będzie coś, co oczekuje obiektu". Ale kompilator nie wie, że ty * a priori * chcesz wybrać metodę "obiektu". Kompilator próbuje rozumować w inny sposób. Pyta "czy metoda oczekuje obiektu zgodnego z tym wyrażeniem?" Aby wiedzieć, że musi zapytać "Jaki jest typ wyrażenia?" ** Problem polega na tym, że nie można ustalić typu wyrażenia, aby zdecydować, czy wyrażenie działa. ** –