3

IValueConverter を実装する Convert メソッドがあります。私の最初のステートメントは var returnText = value as string で、値を文字列として引き継ぐために機能しません。ただし、機能せず、デバッグ中に、「値」変数の値が returnText に割り当てられていないことがわかったため、returnText は常に null です。奇妙です。理由を知っている人はいますか?

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

        if (!string.IsNullOrEmpty(returnText))
        {
           .....
4

3 に答える 3

9

問題と解決策

問題は、as string変換しないことです。オブジェクトを文字列にキャストするだけです。それが機能しない場合は、null代わりに生成されます。オブジェクトは元々文字列型でなければなりませんが、この場合は明らかにそうではありません。

あなたの場合にうまくいく可能性が高いオプションの1つは、.ToString()次のようにオブジェクトを呼び出すことです。

var returnText = value.ToString();

.ToString()ただし、これは実際にはオブジェクトの種類と、そのメソッドが実際に生成するものに依存することに注意してください。予期しない値が得られる可能性があります。


追加の推奨事項

ティムがコメントしToString()たように、オブジェクトが最初からある場合、例外がスローnullされます。オブジェクトのメソッドを呼び出す前に、これをテストすることをお勧めします。このようなことができます:

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

参考文献

詳しくはこちらをご覧ください。そのリンクからのいくつかの有用な引用:

as 演算子はキャスト操作に似ています。ただし、変換が不可能な場合、as は例外を発生させる代わりに null を返します。

as 演算子は、参照変換、null 許容変換、およびボックス化変換のみを実行することに注意してください。as 演算子は、代わりにキャスト式を使用して実行する必要がある、ユーザー定義の変換などの他の変換を実行できません。

于 2013-09-30T13:20:08.277 に答える
1

このvar returnText = value as string; であるためです。意味:値をそうでないかのようにキャストstringしようとし、null を返します。

as (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

于 2013-09-30T13:20:52.257 に答える