2009-05-27 5 views
3

私はあきらめて、これをどのようにキャストしますか?Converterでオブジェクトをintにキャストするにはどうすればよいですか?

class AmountIsTooHighConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //int amount = (int)value; 
     //int amount = (int)(string)value; 
     //int amount = (int)(value.ToString); 
     //int amount = Int32.Parse(value); 
     //int amount = (int)Convert.ChangeType(value, typeof(int)); 
     //int amount = Convert.ToInt32(value); 
     if (amount >= 35) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
} 

答えて

4

両方Convert.ToInt32またはInt32.Parse動作するはず...そうでない場合、値は間違いなくint型ではありませんが、)
は値を見て、あなたのコンバータにブレークポイントを配置しようとすると、それが表示される場合がありますなぜそれが動作しないのですか?

+0

に解析する前に文字列に変換することをお勧めします。オブジェクトがIConvertibleを実装している場合、Convertは機能します。 –

+0

あなたはそうです。Parseはオブジェクトではなく文字列を取ります。 –

+0

Convert.ToInt32()とInt32.Parseは、すべての値をコンマで "2,000"のように解析しません。私はFormatExceptionの試しとキャッチをお勧めします – abhilash

0

Convertメソッドの開始括弧にブレークポイントを設定します。デバッグモードでアプリケーションを起動します。ブレークポイントがヒットしたら、の実際のタイプを分析します。キャストしてください。値が文字列の場合は文字列にキャストし、結果を解析して整数を取得します。プログラムを再実行してください。今回はうまくいくはずです。

int amount = Int32.Parse((string)value); 

Convert.ToInt32に変換することができる最も何かを処理することができなければならない:

2

値(整数値を表すコンテンツを含む)は、文字列オブジェクトが実際にある場合は、これは、少なくともオーバーヘッドを与えますintに、数字を含む文字列、またはintが処理できる範囲内の任意の数値タイプを含む文字列のようになります。

0

値がオブジェクトである場合、ToString()はパースでもコンパイルされませんInt int amount = Int32.Parse(value.ToString());

+0

コードをハイライト表示してCtrl + Kキーを押してフォーマットしてください – WhatsThePoint

関連する問題