在lambda中返回三元组

时间:2017-06-02 05:14:52

标签: c# lambda ternary-operator

我有一个Func<IList<string>>我要分配给一个属性。

我想检查列表中是否有任何内容,如果有,那么我想在开头插入一个项目,然后返回列表。

如果不存在,我只想返回一个列表。

我似乎可以这样做:

Errors = new Func<IList<string>>(() =>
                {
                    if (errors.Any())
                    {
                        errors.Insert(0, $"{tp.Name}");
                        return errors;
                    }
                    else
                    {
                        return null;
                    }

                })(),

有没有办法用三元组来做到这一点?还是更整洁的方式?使用三元组时,我无法执行List.Insert(T)之类的操作,因为它返回void而不是列表。

干杯

2 个答案:

答案 0 :(得分:0)

您可以撰写extension method

public static class ListExtensions {
    public static InsertAndReturnSelf<T>(this List<T> source, T item){
        source.Insert(0, item);
        return source;
    }
}

然后你可以做

Errors = errors.Any() ? errors.InsertAndReturnSelf($"{testCastStep.Name}") : null;

如果标准库有更多fluent interface

,那肯定会很好

答案 1 :(得分:0)

你是对的,将一个项目插入一个列表会返回void,而不是列表。您可以做的是返回一个新列表:

float:right