无法识别String.Join重载

时间:2018-08-04 20:06:12

标签: c# resharper .net-standard-2.0

在.NET Standard 2.0项目中,我具有与String.Join(',', new List<ulong>())等效的代码。我从这行中得到两个错误:

  1. Argument 1: cannot convert from 'char' to 'string'
  2. Argument 2: cannot convert from 'System.Collections.Generic.List<ulong>' to 'System.Collections.Generic.IEnumerable<string>'

这些是String的重载.Join ReSharper在导航到符号时显示:

enter image description here

我认为将选择倒数第二个重载public static string Join<T>(char separator, IEnumerable<T> values);,但这不会发生。

当我将代码更改为String.Join<ulong>(',', new List<ulong>())(明确指定通用类型)时,第二个错误消失了。我是在做错什么,还是VS中的错误?

2 个答案:

答案 0 :(得分:6)

.NET Standard没有String.Join作为第一个参数的char重载,只有.NET Core拥有。

您必须使用String.Join(",", new List<ulong>())

https://docs.microsoft.com/en-us/dotnet/api/system.string?view=netstandard-2.0

从.NET Core代码导航到符号时,R#和Rider都显示错误信息,我可以确认这一点。

答案 1 :(得分:1)

.NET Standard 2.0的char类型的第一个参数没有重载。所有string.Join重载都具有字符串类型的第一个参数?

似乎Resharper向您显示的是netstandard 2.0的实现而非合同。

standard.System.cs:3279

    public static System.String Join(System.String separator, System.Collections.Generic.IEnumerable<string> values) { throw null; }
    public static System.String Join(System.String separator, params object[] values) { throw null; }
    public static System.String Join(System.String separator, params string[] value) { throw null; }
    public static System.String Join(System.String separator, string[] value, int startIndex, int count) { throw null; }
    public static System.String Join<T>(System.String separator, System.Collections.Generic.IEnumerable<T> values) { throw null; }