以编程方式搜索特定的setter

时间:2012-02-09 11:15:38

标签: c# .net wpf styles

是否可以搜索特定的setter,而不是遍历集合并执行类似的操作。

  foreach (Setter setter in dataRecord.Cells[i].Field.Settings.EditorStyle.Setters)
  {
    if (setter.Property.Name == "Format")
    {
      excelWorkSheetRow.Cells[i + level].CellFormat.FormatString = setter.Value.ToString();
      break;
    }
  }

2 个答案:

答案 0 :(得分:1)

SetterBaseCollection除了从Collection<>继承的方法之外,不提供任何方法。您可以使用FindFirstOrDefault扩展方法来检索您想要的setter:

var formatSetter=dataRecord.Cells[i].EditorStyle.Setters.OfType<Setter>()
    .FirstOrDefault(setter=>setter.Property.Name == "Format");
if (formatSetter!=null)
...

诀窍是SetterBaseCollection可以包含Setter和EventSetter对象。只有Setter对象具有Property ...属性,因此您需要OfType&lt;&gt;仅搜索Setter对象。如果有人在样式中添加了事件设置器,您的代码就会中断。

答案 1 :(得分:0)

如果对象支持IEnumerable接口,则可以使用Where()方法。

请查看以下MSDN article示例