不要在C#8开关语法中重复返回值

时间:2019-12-13 21:19:05

标签: c# switch-statement c#-8.0

假设我在经典C#中具有以下特征:

#Make example data
sampleData <- data.frame(
  date_first_followup = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12),
  Activity.Date.x = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12)
)

naNums <- sample.int(12, 5)
sampleData[naNums, 1] <- NA

# Replace values
for (i in 1:length(sampleData$date_first_followup)){
  ifelse(is.na(sampleData[i, 1]),
     sampleData[i, 1] <- sampleData[i, 2],
     sampleData[i, 1] <- pmin(sampleData[i, 1], sampleData[i, 2]))
}

C#8开发人员正确地认识到语法中存在很多不足之处。因此,在C#8中,我可以像这样紧凑地编写它:

public string Size(byte b)
    {
        switch (b)
        {
            case 0:
            case 1:
                return "small";
            default:
                return "big";
        }
    }

绝对是一种改进。但是有一件事困扰着我。我必须重复“小”值。以前我没有。我想知道是否有可能以C#8的方式实现而无需重复“ small”值?

2 个答案:

答案 0 :(得分:2)

您可以通过添加when子句来尝试以下代码段

public string SizeCs8(byte b)
            => b switch
            {
                var x when x == 0 || x == 1 => "small",
                _ =>"big",
            };

答案 1 :(得分:1)

我认为第一个(较长)版本是可取的。紧凑的代码不错,但如果编译为更多字节则不好。

但是为什么不扔switch语句呢?这更紧凑:

public string SizeCs8(byte b) => (b <= 1) ? "small" : "big";