C# 是否有一种更干净/更简单的方法来实现a在(aa、bb、cc)中的等效位置?

C# 是否有一种更干净/更简单的方法来实现a在(aa、bb、cc)中的等效位置?,c#,linq,C#,Linq,有人知道是否有一种更干净/更简单的方法来做同样的事情吗 还有,我应该注意的副作用是什么 var setters = from setterBase in Style.Setters let setter = (setterBase as Setter) let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty }

有人知道是否有一种更干净/更简单的方法来做同样的事情吗

还有,我应该注意的副作用是什么

var setters = from setterBase in Style.Setters
              let setter = (setterBase as Setter)
              let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty }
              where setter!=null && properties.Contains(setter.Property)
              select setterBase;

到目前为止,这是我想到的最好的…

不太好。对于两个选项,使用
可能更具可读性,并且您可以使用类型为的
,而不是作为
-cast和first
let
<类型为的code>不会返回
null
元素,因此您也可以删除该筛选器:

var setters = from setter in Style.Setters.OfType<Setter>()
              where (setter.Property == HorizontalContentAlignmentProperty ||
                     setter.Property == VerticalContentAlignmentProperty)
              select setter;
var setters=来自Style.setters.OfType()中的setter
其中(setter.Property==HorizontalContentAlignmentProperty||
setter.Property==VerticalContentAlignmentProperty)
选择设定器;

不太可能。对于两个选项,使用
可能更具可读性,并且您可以使用类型为的
,而不是作为
-cast和first
let
<类型为的code>不会返回
null
元素,因此您也可以删除该筛选器:

var setters = from setter in Style.Setters.OfType<Setter>()
              where (setter.Property == HorizontalContentAlignmentProperty ||
                     setter.Property == VerticalContentAlignmentProperty)
              select setter;
var setters=来自Style.setters.OfType()中的setter
其中(setter.Property==HorizontalContentAlignmentProperty||
setter.Property==VerticalContentAlignmentProperty)
选择设定器;

我会这么做。我仍然喜欢将属性放在数组中,以便轻松支持更多属性。很好

var setters = from setter in Style.Setters.OfType<Setter>()
              let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty }
              where properties.Contains(setter.Property)
              select setter;
var setters=来自Style.setters.OfType()中的setter
let properties=new[]{HorizontalContentAlignmentProperty,VerticalContentAlignmentProperty}
其中properties.Contains(setter.Property)
选择设定器;

我会这么做。我仍然喜欢将属性放在数组中,以便轻松支持更多属性。很好

var setters = from setter in Style.Setters.OfType<Setter>()
              let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty }
              where properties.Contains(setter.Property)
              select setter;
var setters=来自Style.setters.OfType()中的setter
let properties=new[]{HorizontalContentAlignmentProperty,VerticalContentAlignmentProperty}
其中properties.Contains(setter.Property)
选择设定器;

无需为每个setter创建新的数组

var properties = new []{
  HorizontalContentAlignmentProperty,
  VerticalContentAlignmentProperty };

var setters = from setter in Style.Setters.OfType<Setter>() 
              where properties.Contains(setter.Property) 
              select setter;
var properties=new[]{
HorizontalContentAlignmentProperty,
VerticalContentAlignmentProperty};
var setters=来自Style.setters.OfType()中的setter
其中properties.Contains(setter.Property)
选择设定器;

无需为每个setter创建新的数组

var properties = new []{
  HorizontalContentAlignmentProperty,
  VerticalContentAlignmentProperty };

var setters = from setter in Style.Setters.OfType<Setter>() 
              where properties.Contains(setter.Property) 
              select setter;
var properties=new[]{
HorizontalContentAlignmentProperty,
VerticalContentAlignmentProperty};
var setters=来自Style.setters.OfType()中的setter
其中properties.Contains(setter.Property)
选择设定器;

不错!我刚才也在用打字机重写。使用OfType时,您不需要进行null检查,对吗?@Robert-我不确定-集合可能包含
null
s,但您可能可以将其删除。(setter!=null)是多余的,因为null永远不会计算为setter类型。如果集合中有null,则它们将不是setter类型。:)你们都是对的,我不确定,只是测试了一下以确认。谢谢美好的我刚才也在用打字机重写。使用OfType时,您不需要进行null检查,对吗?@Robert-我不确定-集合可能包含
null
s,但您可能可以将其删除。(setter!=null)是多余的,因为null永远不会计算为setter类型。如果集合中有null,则它们将不是setter类型。:)你们都是对的,我不确定,只是测试了一下以确认。谢谢感谢您指出“let”每次都会重新创建数组,我忘记了那个。。。这取决于两个集合的大小(‘属性’和‘SETER’’)会有很大的影响,如果属性有很大的大小,考虑使用HasSeT而不是数组。谢谢指向“让”每次重新创建数组,我忘记了一个。这取决于两个集合(‘属性’和‘SETER’)的大小会有很大的影响,如果属性具有很大的大小,考虑使用HasSeT而不是数组。