C#中Annotations无法用Any/Find时,如何用Linq查指定名称Chart注释?
解决Chart控件Annotations无法使用Linq方法的问题
Chart控件的Annotations集合虽继承自Collection<Annotation>,但默认无法直接调用Linq的Any()、Find()等扩展方法——这是因为Linq扩展方法依赖IEnumerable<T>接口支持,需要先将集合转换为泛型可枚举类型。
解决方案
将Annotations转换为IEnumerable<Annotation>后,即可正常使用Linq方法,有两种常用方式:
Cast<Annotation>():强制转换集合内所有元素为Annotation类型OfType<Annotation>():筛选出集合内属于Annotation类型的元素(适合元素类型不确定的场景)
代码示例
using System.Linq; using System.Windows.Forms.DataVisualization.Charting; Chart chart = new Chart(); string annotationNameToFind = "YourAnnotationName"; // 方式1:用Any()直接判断是否存在匹配名称的注释 bool annotationExists = chart.Annotations.Cast<Annotation>() .Any(annotation => annotation.Name == annotationNameToFind); // 方式2:先查找匹配的注释实例,再判断是否存在 var targetAnnotation = chart.Annotations.Cast<Annotation>() .FirstOrDefault(annotation => annotation.Name == annotationNameToFind); bool annotationExists2 = targetAnnotation != null;
补充说明
原集合提供的Contains()方法仅能检查是否存在某个具体的Annotation实例,无法通过名称进行匹配,因此必须结合类型转换才能使用Linq的条件筛选能力。
内容的提问来源于stack exchange,提问作者Mich
相关产品推荐
相关产品推荐

