MSBuild15 CS0121模糊&#39; List <t> .List(params T [])&#39;和&#39;列出<t> .List(params List <t> [])&#39;

时间:2017-11-06 20:16:47

标签: c# msbuild-15

以下代码将在MSBuild12中编译,但在MSBuild15中将失败

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace Example
{
    public class List<T> : IEnumerable<T>
    {
        private readonly T[] _items;

        public List(params T[] items)
        {
            _items = items;
        }

        public List(params List<T>[] args)
        {
            _items = args.SelectMany(t => t).ToArray();
        }

        public static List<T> New
        {
            get { return new List<T>(); }
        }


        public IEnumerator<T> GetEnumerator()
        {
            foreach (var item in _items)
                yield return item;
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return _items.GetEnumerator();
        }
    }
}

结果

  

CS0121以下方法或属性之间的调用不明确:&#39; List.List(params T [])&#39;和&#39; List.List(params List [])&#39;示例D:\ Example \ Test.cs

在MSBuild 12中,此构造函数默认为。 Shows default constructor called

1 个答案:

答案 0 :(得分:3)

问题出在以下几行:

public static List<T> New
{
    get { return new List<T>(); }
}

并且导致它不明确应该使用两个构造函数中的哪一个。您可以通过提供适当的参数指定要使用的两个中的哪一个来克服这个问题:

public static List<T> New => new List<T>(new T[]{});

public static List<T> New => new List<T>(new List<T>{});

另一个方法是声明一个无参数构造函数

public List()
{ 
    _items = new T[0];
}

然后有这个:

public static List<T> New => new List<T>();