C#
パターン1: is +パターンマッチング(C# 7以降の本命)
出典: C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン) — パターン1: is +パターンマッチング(C# 7以降の本命)
// ✅パターン1: is +パターンマッチ(C# 7以降の本命)
public void Process(object data)
{
if (data is IDataLoader loader)
{
var rows = loader.Load();
// loaderはここでIDataLoader型に確定、Nullでないことも保証される
}
else if (data is IDataValidator validator)
{
validator.Validate();
}
else
{
Console.WriteLine("対応するInterface実装ではありません");
}
}
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「パターン1: is +パターンマッチング(C# 7以降の本命)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅パターン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
// ❌罠2: GetType()でInterface判定はできない if (obj.GetType()== typeof(IDataLoader))// ←常にfalse { //ここには到達しない(常にfalse)未収録
ハマりポイント— BoxingとGetType()誤用
#c0d195d72647
