C#
ハマりポイント— BoxingとGetType()誤用
出典: C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン) — ハマりポイント— BoxingとGetType()誤用
// ❌罠2: GetType()でInterface判定はできない
if (obj.GetType()== typeof(IDataLoader))// ←常にfalse
{
//ここには到達しない(常にfalse)
}
// ✅正しい書き方
if (obj is IDataLoader)
{
// OK
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「ハマりポイント— BoxingとGetType()誤用」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅パターン1: is +パターンマッチ(C# 7以降の本命) public void Process(object data) { if (data is IDataLoader loader)
▶ 実行可
パターン1: is +パターンマッチング(C# 7以降の本命)
#159cd4da0496
// ✅パターン2: as + nullチェック(複数候補をフラットに並べる) public string Describe(object obj) { var loader = obj as IDataLoader;未収録
パターン2: as + nullチェック(複数候補を並べる時)
#303ce1480b7a
// ✅パターン3-a:暗黙キャスト(継承関係が静的型レベルで明確) public class CsvLoader : IDataLoader { /* 実装 */ } CsvLoader csvLoader = new CsvLoader();未収録
パターン3:暗黙キャストと直接キャスト(型が確定している時だけ)
#113b3d707a4c
// ❌罠1:値型InterfaceでBoxing大量発生(性能劣化) public struct Point : IComparable<Point> { public int X { get; set; }未収録
ハマりポイント— BoxingとGetType()誤用
#41267d4898a1
