假设我在经典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”值?
答案 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";