をキャスト私はそうのように見える小さなユーティリティメソッドがあります:私は、データテーブルのうち、記録を取って、特定のフィールドを取っています、私の特定のシナリオでボックス化解除と一般的な方法で1つのステートメントで
/// <summary>
/// Replaces a DBNull value with the default of the type specified
/// </summary>
/// <typeparam name="T">Resulting type</typeparam>
/// <param name="p_this">Object to check for DBNull</param>
/// <returns>p_this if it is not DBNull.Value, else default(T)</returns>
public static T ReplaceDBNullWithDefault<T>(this object p_this)
{
return p_this == System.DBNull.Value ? default(T) : (T)p_this;
}
をそれから弱いタイプを使用して、私が得ている特定のフィールドはobject
に囲まれているlong
です。
var obj = 2934L;
int num = obj.ReplaceDBNullWithDefault<int>();
それは、(T)p_this
で、InvalidCastException
で失敗し、次のようにこれを再現する例があります。
object myLong = 234L;
int myInt = (int)myLong;
しかし、アンボクシングして、キャスト正常に動作します:
私はlong
がint
に直接キャストし、このようにそれをやろうとするも失敗することはできません箱入りの理由を、理解
object myLong = 234L;
int myInt = (int)(long)myLong;
私の方法でこれを回避するにはどうしたらいいですか?
はあなたがint' 'にキャストされている理由ではなく、long''に手の込んだてもらえますか? (したがって、 'long'として' T'を指定します) –
正しい型を指定することによって) –
結果を入れているフィールドは 'long'ではなく' int'です。私はちょうどそこにキャストをすることができたと思う。 – Logan