C#
パターン2: as + nullチェック(複数候補を並べる時)
出典: C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン) — パターン2: as + nullチェック(複数候補を並べる時)
// ✅パターン2: as + nullチェック(複数候補をフラットに並べる)
public string Describe(object obj)
{
var loader = obj as IDataLoader;
if (loader != null)return $"Loader: {loader.SourceName}";
var validator = obj as IDataValidator;
if (validator != null)return $"Validator: {validator.RuleSet}";
var formatter = obj as IDataFormatter;
if (formatter != null)return $"Formatter: {formatter.OutputType}";
return "(unknown)";
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「パターン2: as + nullチェック(複数候補を並べる時)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅パターン1: is +パターンマッチ(C# 7以降の本命) public void Process(object data) { if (data is IDataLoader loader)
▶ 実行可
パターン1: is +パターンマッチング(C# 7以降の本命)
#159cd4da0496
// ✅パターン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
