如何使用C#的is关键字对指定元组进行模式匹配?
解决Blazor中装箱元组的类型检查问题
问题原因
当值类型元组(如(IdentityUser, string))被装箱为object后,直接使用is (IdentityUser, string)会触发CS1061编译错误——编译器无法直接识别装箱后的元组类型,需要明确匹配值元组的具体类型或使用解构模式。
正确的类型检查语法
以下两种方式均可正确检查装箱对象是否为(IdentityUser, string)元组:
方式1:匹配具体的ValueTuple类型
object droppedObject = // 拖拽得到的装箱对象 if (droppedObject is ValueTuple<IdentityUser, string> tuple) { IdentityUser student = tuple.Item1; string extraInfo = tuple.Item2; // 编写后续处理逻辑 }
方式2:使用解构模式(C# 7.0及以上版本支持)
这种写法更简洁,还能直接解构出元组内的变量:
object droppedObject = // 拖拽得到的装箱对象 if (droppedObject is (IdentityUser student, string extraInfo)) { // 直接使用解构后的student和extraInfo变量 // 编写后续处理逻辑 }
同时支持IdentityUser和元组的完整逻辑
结合你需要同时兼容两种类型的场景,完整代码示例如下:
object droppedObject = // 拖拽得到的装箱对象 if (droppedObject is IdentityUser user) { // 处理单个IdentityUser实例的逻辑 } else if (droppedObject is (IdentityUser student, string extraInfo)) { // 处理元组类型的逻辑 } else { // 处理不支持类型的逻辑 }
内容的提问来源于stack exchange,提问作者Bennyboy1973
相关产品推荐
相关产品推荐

