私はこのようになりますよう、安全なキャストオブジェクトへの拡張メソッドを持っています。IsAssignableFrom、IsInstanceOfTypeとisキーワードは何ですか?
public static T SafeCastAs<T>(this object obj) {
if (obj == null)
return default(T);
// which one I should use?
// 1. IsAssignableFrom
if (typeof(T).IsAssignableFrom(obj.GetType()))
return (T)obj;
// 2. IsInstanceOfType
if (typeof(T).IsInstanceOfType(obj))
return (T) obj;
// 3. is operator
if (obj is T)
return (T) obj;
return default(T);
}
あなたが見ることができるように、私は3の選択肢を持っているので、どちら私が使用するようにする必要がありますか?実際にIsAssignableFrom
とIsInstanceOfType
とis
の違いは何ですか?
あなたの主張が正しいかどうかはわかりません。 'typeof(int)'は 'Type'型のオブジェクトを返します。最初の文は' Type'オブジェクトが明らかに 'int'ではないので失敗します。しかし、最初の文を 'a.GetType()。IsInstanceOfType(3)'に変更するとtrueを返します。私はここで 'IsInstanceOfType'を間違って使用していると思います。 –
@JeffBridgman true、私の推測私はちょうどこれらの2つのメソッドの使用の違いを表示しようとしました。 '' ' Console.WriteLine(typeof(int?)。IsInstanceOfType(null)); Console.WriteLine(typeof(int?)。IsInstanceOfType(1)); Console.WriteLine(typeof(int?)。IsAssignableFrom(typeof(int))); '' ' この回答の一部を削除します。 – outcoldman