【发布时间】:2020-12-16 14:29:59
【问题描述】:
我可以用 C#8 switch expression 替换此代码片段吗?
请注意,如果 ObjectType 是 Computer,ObjectClass 将包含“person”,因此排序很重要。
另外,这个问题是学术性的,我只对switch expression 感兴趣,而不是如何解决这个特定问题。
public List<string> ObjectClass { get; set; }
public ObjectType ObjectType {
get {
if (ObjectClass.Contains("group")) { return ObjectType.Group; }
if (ObjectClass.Contains("computer")) { return ObjectType.Computer; }
if (ObjectClass.Contains("person")) { return ObjectType.User; }
return ObjectType.Unknown;
}
}
【问题讨论】:
-
这是一个开关 表达式 - 语句不返回任何内容,只有表达式返回。是的,你可以,但它不会更漂亮。您发布的操作也会多次搜索该列表,因此您应该寻找避免多次迭代的方法。您可能需要一个 LINQ 调用来返回这三个单词中的任何一个单词的第一次出现并将其映射到目标值。这只会导致一次迭代,使代码速度提高 300%
-
ObjectType是枚举吗?在这种情况下,您可以使用Enum.Parse<ObjectType>()将找到的任何数据直接解析为ObjectType -
正如@PanagiotisKanavos 所指出的,使用
switch expression会导致代码不美观。这是演示如何使用switch expression: dotnetfiddle.net/W57TEO 重写你的 getter。在我看来,在这种情况下使用switch expression不是一个好方法,因为 1) 没有执行匹配的值; 2) 每个case branch不包含匹配值。 -
@IliarTurdushev 谢谢。问题是学术性的。我早些时候阅读了有关新开关的信息,并想看看我是否可以让它在这里工作。如果您想转发,我会将其标记为答案。
-
the question is academic and I am only interested in the switch expression那是一个非常糟糕的例子。这是不使用switch表达式或switch语句更清晰的情况之一
标签: c# c#-8.0 switch-expression