isFooObject我认为模式匹配会比在你的对象中有一个标志来表明该对象是 class 的实例要慢得多Foo。我大错特错了!
这是我的实验的可运行代码https://dotnetfiddle.net/E6LYjw以下是我的代码:
var obj1 = new Foo { Id = 123, Name = "12341", isFooObj = true };
var watch1 = Stopwatch.StartNew();
for(int i=0; i<100 000 000; i++) {
if (obj1.isFooObj) { // Do something }
}
watch1.Stop();
var watch2 = Stopwatch.StartNew();
for(int i=0; i<100 000 000; i++) {
if(obj1 is Foo) { //Do something }
}
watch2.Stop();
事实证明,模式匹配方法的速度大约是检查标志的两倍!这是真的还是我的测试方法有误?如果是真的,为什么?我认为模式匹配会慢得多,因为需要检查整个对象以查看它是否匹配Foo。