假设我有一组汽车,每辆车都有一个方向盘。我想编写一行代码来查找集合中的汽车并返回其方向盘,或者如果汽车不在集合中则返回 null。像这样的东西:
Car found = // either a Car or null
SteeringWheel wheel = (found == null ? null : found.steeringwheel);
found
有没有办法在表达式中不使用andnull
两次来做到这一点?我不喜欢这里重复的味道。
假设我有一组汽车,每辆车都有一个方向盘。我想编写一行代码来查找集合中的汽车并返回其方向盘,或者如果汽车不在集合中则返回 null。像这样的东西:
Car found = // either a Car or null
SteeringWheel wheel = (found == null ? null : found.steeringwheel);
found
有没有办法在表达式中不使用andnull
两次来做到这一点?我不喜欢这里重复的味道。
您可以稍等一下 C# 6.0,然后使用空条件(也称为安全导航)运算符?.
:
SteeringWheel wheel = FindCar()?.steeringwheel;
在 c# 6 到来之前没有明显的改进,但在那之前你可以在扩展方法中隐藏不愉快。
void Main() {
Car found = null;// either a Car or null
SteeringWheel wheel = found.MaybeGetWheel();
}
public static class CarExtensions {
internal static SteeringWheel MaybeGetWheel(this Car @this) {
return @this != null ? @this.steeringwheel : null;
}
}
有人说你不应该允许调用扩展方法null
,但它确实有效。这是一种风格偏好,而不是技术限制。
使用 linq 你可以做
var steeringwheel = cars.Where(c => c.name = "foo")
.Select(c => c.steeringwheel)
.SingleOrDefault();