Я пытаюсь написать библиотеку с .NetStandard 2.0, и, по-видимому, нет перегрузки для метода string.Join
, который принимает IEnumerable. Этот код отлично работает в .NetCore 2.0, но не стандарт:
string.Join('/', parts.Skip(index))
Я пытаюсь написать библиотеку с .NetStandard 2.0, и, по-видимому, нет перегрузки для метода string.Join
, который принимает IEnumerable. Этот код отлично работает в .NetCore 2.0, но не стандарт:
string.Join('/', parts.Skip(index))
Перегрузка существует с string separator
вместо просто char separator
:
string s = string.Join("/", parts.Skip(index));
так ... использовать это?
parts
это IEnumerable<string>
? Вы предполагаете, что parts
на самом деле string
?
- person Marc Gravell; 10.04.2018
parts
- это IEnumerable<string>
, я предполагаю, что это была одна строка.
- person Ron Beyer; 10.04.2018
<TargetFramework>netstandard2.0</TargetFramework>
, и, похоже, он работает нормально , пока вы используете string
в качестве разделителя ...
- person Marc Gravell; 10.04.2018
Чтобы добавить немного контекста к ответу Марка Гравелла: .NET Standard и .NET Core имеют другой набор API.
.NET Standard представляет собой набор API-интерфейсов, которые должны быть реализованы платформой, если она поддерживает версию .NET Standard.
.NET Core - это платформа, реализующая .NET Standard. Помимо этих API, он реализует еще несколько.
API, доступные в .NET Standard для string.Join
: (из 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
.
string.Join(string, IEnumerable<string>)
перегрузка ... Может, вам понадобитсяstring.Substring
вместоparts.Skip
? - person Ron Beyer   schedule 10.04.2018