2013-10-14 5 views
0

У меня есть следующее свойство:проверить, если объект имеет что-то или нет

IDictionary<string, object> Values { get; } 

Свойство имеет несколько значений, имеющих одну из них ключ «культура».

Я пытался использовать это значение и литье в строку:

String value = (String)data.Values["culture"] ?? defaultCulture; 

Это работает, когда элемент имеет какое-то значение, но когда это не я получаю ошибку:

Unable to cast object of type 'System.Web.Mvc.UrlParameter' to type 'System.String'. 

BTW , System.Web.Mvc.UrlParameter: http://msdn.microsoft.com/en-us/library/system.web.mvc.urlparameter%28v=vs.108%29.aspx

в отладчик data.Values ​​[ "культура"] имеет значение {}. Я тестировал и:

var test_1 = data.Values["culture"] == null; // returns false 

var test_2 = data.Values["culture"].ToString() == null; // returns false 

Как проверить, имеются ли данные.

+0

[. IDictionary имеет Содержит метод для проверки, если ключ существует] (http://msdn.microsoft.com/en-us/library/system.collections.idictionary.contains.aspx) – Mike

+0

Да, ключ существует ... но значение {} –

ответ

3

По-видимому, вы храните UrlParameter в этом словаре. Если вы хотите получить строку, вам нужно будет использовать ToString().

Точное выражение для использования будет зависеть от типа defaultCulture. Если это строка, то

String value = data.Values["culture"] == null ? defaultCulture : data.Values["culture"].ToString(); 

если это UrlParameter, то

String value = (data.Values["culture"] ?? defaultCulture).ToString(); 
+0

['UrlParameter.ToString'] (http://msdn.microsoft.com/en-us/library/system.web.mvc.urlparameter.tostring. aspx) возвращает пустую строку. – Romoku

+0

defaultValue - это строка, но ваш код не работает ... data.Values ​​["culture"] == null возвращает false ... потому что data.Values ​​["culture"] - {} (отмечено в отладчике). Я никогда не получаю это null. Это была моя первоначальная проблема. Я не знаю, как протестировать его против {} –

+0

Вы попробовали мой код? Он будет выполнять 'data.Values ​​[" culture "]. ToString()' branch. –

0

Попробуйте это:

String value = (String) (data.Values["culture"] ?? defaultCulture); 

Идея заключается в том, чтобы проверить нуль, прежде чем пытаться бросить.

+0

Опять же, я никогда не получаю data.Values ​​["culture"] как null ... Он всегда имеет значение (string) или { } ... И есть {}, который я не уверен, как проверить ... Это не null, но в нем ничего нет ... –

0

Вы использовали это?

string.IsNullOrWhiteSpace(somestring) 
+0

Вы имеете в виду String.IsNullOrWhiteSpace (data.Values ​​["culture"]. ToString ()) ;? Зачем преобразовывать его в строку и выполнять тест после него? Я имею в виду, как проверить объект, значение которого в отладчике {} ... Что это? null это не потому, что я проверил. –

1

Если вы хотите получить string, если он действительно является строкой и значение по умолчанию, в противном случае, вы можете проверить тип оценщика с использованием as. Что-то вроде:

(data.Values["culture"] as string) ?? defaultCulture 
Смежные вопросы