2013-10-14 57 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 

如何檢查data.Values [「culture」]是否有內容?

+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/zh-cn/library/system.web.mvc.urlparameter.tostring。 aspx)返回一個空字符串。 – Romoku

+0

defaultValue是一個字符串,但你的代碼不工作...... data.Values [「culture」] == null返回false ...因爲data.Values [「culture」]是{}(在調試器中檢查)。我從來沒有得到它空。那是我最初的問題。我不知道如何根據{ –

+0

}進行測試您是否嘗試過我的代碼?它會執行'data.Values [「culture」]。ToString()'分支。 –

0

試試這個:

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

的想法是嘗試投放之前檢查空。

+0

比較再一次,我從來沒有data.Values [「文化」]作爲null ...它總是一個值(字符串)或{ } ... {}我不知道如何檢查...它不是null,但它沒有任何內容... –

0

你用過這個嗎?

string.IsNullOrWhiteSpace(somestring) 
+0

你的意思是String.IsNullOrWhiteSpace(data.Values [「culture」]。ToString( ));?爲什麼將它轉換爲字符串並在其後執行測試?我的意思是,如何測試一個在調試器中的值是{...這是什麼?這不是因爲我檢查過。 –

1

如果你想獲得string,如果它確實是一個字符串,否則默認值,你可以測試使用as評估師的類型。類似:

(data.Values["culture"] as string) ?? defaultCulture 
相關問題