C#.NetStandard 2.0中的IEnumerable字符串连接

时间:2018-04-10 15:47:08

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

我正在尝试使用.NetStandard 2.0编写一个库,显然接收IEnumerable的string.Join方法没有重载。此代码在.NetCore 2.0中运行良好,但不是标准的:

string.Join('/', parts.Skip(index))

2 个答案:

答案 0 :(得分:5)

重载存在于string separator而非char separator

string s = string.Join("/", parts.Skip(index));

所以......用那个?

答案 1 :(得分:3)

为Marc Gravell的答案添加一些上下文:.NET Standard和.NET Core有一组不同的API。

.NET Standard表示一组API,如果它支持.NET Standard版本,则需要由平台实现。

.NET Core是一个实现.NET Standard的平台。除了那些API,它还实现了一些。

.NET Standard for string.Join上提供的API(来自https://github.com/dotnet/standard/blob/master/netstandard/ref/mscorlib.cs):

    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; }

对于.NET Core,API集更大,因为API已添加到.NET Core平台但不是.NET Standard(来自https://github.com/dotnet/corefx/blob/master/src/System.Runtime/ref/System.Runtime.cs#L2307):

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

如果您的目标是.NET Core,则可以使用占用char的重载。 如果您的目标是.NET Standard,则可以使用带有string

的重载