例1: クラスの型に基づく条件分岐
public class Animal
{
public string Name { get; set; }
}
public class Dog : Animal { }
public class Cat : Animal { }
public void ProcessAnimal(Animal animal)
{
switch (animal)
{
case Dog dog:
Console.WriteLine($"This is a dog named {dog.Name}.");
break;
case Cat cat:
Console.WriteLine($"This is a cat named {cat.Name}.");
break;
default:
Console.WriteLine("This is an unknown animal.");
break;
}
}
// 使用例
Animal animal = new Dog() { Name = "Buddy" };
ProcessAnimal(animal);
この例では、Animalクラスを継承したDogクラスとCatクラスがあります。ProcessAnimalメソッドでは、渡されたanimalオブジェクトの型に基づいて処理を分岐しています。Dog型の場合は"This is a dog named {dog.Name}."というメッセージが表示され、Cat型の場合は"This is a cat named {cat.Name}."というメッセージが表示されます。
例2: 値型の型に基づく条件分岐
public void ProcessValue(object value)
{
switch (value)
{
case int intValue:
Console.WriteLine($"This is an integer with value {intValue}.");
break;
case double doubleValue:
Console.WriteLine($"This is a double with value {doubleValue}.");
break;
default:
Console.WriteLine("This is an unknown value type.");
break;
}
}
// 使用例
ProcessValue(42);
この例では、ProcessValueメソッドに渡された値の型に基づいて処理を分岐しています。int型の場合は"This is an integer with value {intValue}."というメッセージが表示され、double型の場合は"This is a double with value {doubleValue}."というメッセージが表示されます。
これらはC#のswitch文とtypeof演算子を組み合わせて、異なる型に基づく条件分岐を行う例です。必要に応じて、他の型や条件に基づく分岐も追加することができます。それぞれの例は、異なるシナリオでの使用を示しています。