3

假设我有一组汽车,每辆车都有一个方向盘。我想编写一行代码来查找集合中的汽车并返回其方向盘,或者如果汽车不在集合中则返回 null。像这样的东西:

Car found = // either a Car or null
SteeringWheel wheel = (found == null ? null : found.steeringwheel);

found有没有办法在表达式中不使用andnull两次来做到这一点?我不喜欢这里重复的味道。

4

3 回答 3

7

您可以稍等一下 C# 6.0,然后使用空条件(也称为安全导航)运算符?.

SteeringWheel wheel = FindCar()?.steeringwheel;
于 2015-05-01T22:48:54.373 回答
3

在 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,但它确实有效。这是一种风格偏好,而不是技术限制。

于 2015-05-01T22:58:24.920 回答
0

使用 linq 你可以做

var steeringwheel = cars.Where(c => c.name = "foo")
                        .Select(c => c.steeringwheel)
                        .SingleOrDefault();
于 2015-05-01T23:15:07.110 回答