C#のswitch文とtypeof演算子を使用したタイプに基づく条件分岐の例


例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演算子を組み合わせて、異なる型に基づく条件分岐を行う例です。必要に応じて、他の型や条件に基づく分岐も追加することができます。それぞれの例は、異なるシナリオでの使用を示しています。