4. いままで(定数パターン)
class Program
{
static void Main(string[] args)
{
int id = 1;
switch(id)
{
case 0:
Console.WriteLine("Id was 0");
break;
case 1:
Console.WriteLine("Id was 1");
break;
default:
Console.WriteLine("Not found");
break;
}
}
}
これが実行される
定数を条件として処理を分岐
19. 変換用のメソッドを作る
public record RecordSample
{
public int Id { get; init; }
public string Name { get; init; } = "";
public RecordSample(int id, string name) { Id = id; Name = name; }
public static bool TryParse(object original, out RecordSample? result)
{
result = null;
var type = original.GetType();
var idValue = type.GetProperty("Id")?.GetValue(original)?.ToString();
var nameValue = type.GetProperty("Name")?.GetValue(original)?.ToString();
if(idValue == null || nameValue == null) { return false; }
if(int.TryParse(idValue, out var id) == false) { return false; }
result = new RecordSample(id, nameValue);
return true;
}
}
20. case を追加
private static void Play(object target)
{
switch(target)
{
case RecordSample r:
Console.WriteLine($"Record Id: {r.Id} Name: {r.Name}");
break;
case var o when RecordSample.TryParse(o, out var r):
Console.WriteLine($"Property Id: {r!.Id} Name: {r!.Name}");
break;
default:
Console.WriteLine("Not found");
break;
}
}
RecordSampleに変換できず、
かつ同じプロパティを持っていれば
ここが実行されるはず
21. 呼び出し
public class ClassSample
{
public int Id { get; set; }
public string Name { get; set; } = "";
}
static void Main(string[] args)
{
var c = new ClassSample
{
Id = 0,
Name = "Hello"
};
Play((object)c);
}
同じプロパティを持つClassSampleというクラスを作って先ほどのswitchに渡す