C# switch元组模式匹配报错:无法用Arc处理IGeometry元组表达式
错误原因
你传入switch的是元组类型(IGeometry, IGeometry),但case里的Arc a1, Arc a2没有用括号包裹,C#编译器会把它解析成两个独立的模式,而非匹配元组的两个元素——编译器无法将单个Arc类型模式应用到元组整体上,因此抛出错误。
额外注意:Arc是值类型(struct),当它被转换为IGeometry接口时会触发装箱操作,但这不是当前报错的直接原因。
修复方法
将case中的模式改为元组模式,用括号包裹两个元素的类型匹配,让编译器明确要分别匹配元组的两个元素:
public static int Intersects(this IGeometry object1, in IGeometry object2) { switch (object1, object2) { case (Arc a1, Arc a2): // 在这里实现圆弧交点数量的计算逻辑 // 示例:return CalculateArcIntersectionCount(a1, a2); return 0; // 替换为实际计算结果 default: return 0; } }
如果需要扩展支持更多几何类型组合,直接添加对应的元组模式case即可,比如:
case (Arc arc, Line line): // 处理圆弧与直线的交点计算 return CalculateArcLineIntersectionCount(arc, line); case (Line line, Arc arc): // 复用圆弧与直线的计算逻辑 return CalculateArcLineIntersectionCount(arc, line);
内容的提问来源于stack exchange,提问作者WDUK
相关产品推荐
相关产品推荐

