0

我可以用 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;
    }
}
4

2 回答 2

0

这个答案建立在@IliarTurdushev 提供的解决方案之上,应该归功于他。还使用@NetMage 的建议进行了重构,谢谢。

public class Program
{
    public  List<string> ObjectClass { get; set; }
    public  ObjectType sample
    {
        get => ObjectClass switch {
            _ when ObjectClass.Contains("group") => ObjectType.Group,
            _ when ObjectClass.Contains("computer") => ObjectType.Computer,
            _ when ObjectClass.Contains("person") => ObjectType.Person,
            _ => ObjectType.Unknown};
    }

    public enum ObjectType
    {
        Group = 1,
        Computer = 2,
        Person = 3,
        Unknown = 4
    }
}
于 2020-08-27T20:50:35.233 回答
0

您可以结合 LINQ 并switch拥有一个(半)高效的版本:

public ObjectType type
{
    get => ObjectClass.Select(c => c switch { "group" => ObjectType.Group, "computer" => ObjectType.Computer, "person" => ObjectType.Person, _ => (ObjectType?)null})
                      .FirstOrDefault(t => t != null) ?? ObjectType.Unknown;
}
于 2020-08-28T21:44:46.157 回答