2013-09-30 89 views
3

我有一個實現IValueConverter的Convert方法。我的第一個陳述是 var returnText = value as string not working to take over the value as string。然而,它不起作用,當我調試時,我發現「值」變量的值沒有分配給returnText,所以returnText總是爲空。這很奇怪。有人知道爲什麼嗎?why var returnText = value as string not working?

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var returnText = value as string; 

     if (!string.IsNullOrEmpty(returnText)) 
     { 
      ..... 
+3

你確定的價值類型爲字符串? – Nitin

+2

你確定'value'屬於'string'類型嗎?如果'value'不是'string','value as string'將返回'null'。 – Styxxy

回答

9

問題和解決方案

的問題是,as string不轉換,它只是強制轉換對象爲字符串。如果這不起作用,它將產生null。該對象最初必須是字符串類型,在這種情況下顯然不是這種情況。這可能會在你的情況下工作

一種選擇是調用.ToString()的對象,像這樣:

var returnText = value.ToString(); 

但請注意,這確實取決於你的對象類型,以及它的.ToString()方法實際上產生。你可能會得到一個你並不期待的價值。如果對象是null開始與


附加建議

作爲添有評論,ToString()將拋出異常。建議在調用對象上的任何方法之前對此進行測試。像這樣的東西會做:

string returnText = null; 
if(value != null) 
    returnText = value.ToString(); 

進一步閱讀

See here for more information。從該鏈接幾個有用的報價:

as運算符就像一個投射操作。但是,如果轉換不可行,則返回null而不是引發異常。

注意的是,作爲運營商只執行基準轉換,可空轉換和裝箱轉換。 as運算符不能執行其他轉換,例如用戶定義的轉換,而應該使用轉換表達式來執行轉換。

+1

請注意,如果'value'爲'null',則會引發異常。如果你想將它默認爲一個空字符串,你可以做'(value ??「」).ToString()'。 –

+0

@TimS .:好點。請注意,我沒有使用您的單行程序,因爲我希望儘可能使代碼儘可能不言自明。如果你的例子不熟悉語法 – musefan

1

因爲這個var returnText = value as string;表示:嘗試轉換值爲string如果沒有,則返回null。

作爲(C#參考)http://msdn.microsoft.com/en-us/library/vstudio/cscsdfbt.aspx

爲什麼System.Convert.ToString()的代替.ToString() ......

我寧願使用var returnText = System.Convert.ToString(value);,因爲這將使用IConvertable接口。 ToString()可能會導致一個錯誤的結果。 (如類名等)

更多信息:Convert.ToString方法http://msdn.microsoft.com/en-us/library/astxcyeh.aspx

+0

,你的例子可能會混淆OP。它看起來Convert不起作用,因爲它本身就是一個Convert方法。 –

+0

你應該使用全名(使用命名空間):System.Convert.ToString() –

+0

好的,這聽起來不錯。 –

4

嘗試

var returnText = value==null ? "": value.ToString(); 
+0

非常感謝。 ToString工作。 –

相關問題