0

sourceValue が bool で T が int である T 型にこの関数を確実にキャストするにはどうすればよいですか?

public static T ConvertTo<T>(Object sourceValue)
{
  // 同じタイプの場合 --> すぐに戻る
  if (sourceValue は T)
    (T) sourceValue を返します。

  var val = ConvertTo(sourceValue, typeof (T));
  (T) 値を返します。
}

現在、false を 0 に、true を 1 に変換しようとすると、InvalidCastException がスローされます。型は事前定義されていないため、ここではジェネリックを使用する必要があります。ただし、失敗する唯一のケースは、T:Int32 および sourceValue:Boolean の場合です。

4

5 に答える 5

2

bool を int に変換することは未定義だと思います。ただし、その特別なケースを関数に明示的に書き出すことも適切ではないと思います。そうしないと、関数は.NETがintとboolを暗黙的に処理する方法と一致しません。

あなたは書くのが一番です:

int value = someFlag ? 1 : 0;
于 2009-09-11T21:27:00.520 に答える
1

何をしようとしているのか完全にはわかりませんが、.net は への変換をサポートしていboolますint:

Convert.ToInt32(true);

を取り、それが であるかどうかを判断することもできobjectますbool
参照: Convert.ToInt32(bool)Convert.ToInt32(Object)

于 2009-09-11T21:39:19.087 に答える
-1

非常に一般的なソリューションが必要でした。これは私が思いつくことができる最高のものです:

public static T ConvertTo(Object sourceValue)
    {{
      //同じタイプの場合->すぐに戻る
      if(sourceValueはT)
        return(T)sourceValue;

      var val = ConvertTo(sourceValue、typeof(T));

      //特殊なケース:bool(sourceValue)をint(T)に変換します
      if(val is bool)
      {{
        var b =(bool)val;
        (b)の場合
          return(T)(オブジェクト)1; // valがtrueの場合、1を返します

        return(T)(オブジェクト)0;
      }

      return(T)val;
    }
于 2009-09-11T21:38:21.040 に答える