【问题标题】:Returning ternary within lambda在 lambda 中返回三元
【发布时间】:2023-03-07 02:45:01
【问题描述】:

我有一个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 而不是列表。

干杯

【问题讨论】:

    标签: c# lambda ternary-operator


    【解决方案1】:

    你可以写一个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 会很好

    【讨论】:

      【解决方案2】:

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

      var existinglist = new List<string> { "three", "one", "five" };
      
      var condition = true;
      
      var resultList = condition ? new[] { "owl" }.Concat(existinglist).ToList() : existinglist;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多