簡體   English   中英

C# 8 開關表達式

[英]C# 8 Switch Expression

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

這個答案建立在@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
    }
}

您可以結合 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM