Я разместил здесь вопрос: Выбор подстроки из строки в C # и я получил хорошее предложение использовать следующий код:

int index = String2.IndexOf(String1);
if(index >= 0)
{
    string result = String1;
    if (String1.Length < String2.Length)
    {
        string rest = String2.Substring(index + String1.Length);
        var chars = rest.TakeWhile(c => !Char.IsLetter(c) && !Char.IsWhiteSpace(c));
        result = result + string.Join("", chars);
    }
}

Я использовал его в .Net 4.0, и он работает нормально. Проблема в том, что мне приходится использовать .Net 3.0. Могу ли я как-нибудь использовать String.Join в .NET 3.0 или .NET 3.5?

0
Kamran 5 Мар 2014 в 18:13

3 ответа

Лучший ответ

В .NET 3 есть только две перегрузки для String.Join, поэтому вам нужны строки, а у вас нет LINQ.

Другой способ - вообще не использовать String.Join, но, например, StringBuilder:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < rest.Length; i++)
{
    char c = rest[i];                       
    bool takeChar = !Char.IsLetter(c) && !Char.IsWhiteSpace(c);
    if (takeChar)
        sb.Append(c);
    else
        break;
}
result = result + sb.ToString();
1
Tim Schmelter 5 Мар 2014 в 14:30

Я не знаю. Я дам вам способ сделать это.

Преобразуйте вашу строку в StringBuilder в пространстве имен System.Text

Затем сделайте что-нибудь вроде:

StringBuilder sb = new StringBuilder();
sb.Append(chars);

И передайте свои символы.

Результат будет таким же

0
Oscar Bralo 5 Мар 2014 в 14:18

String.Join работает в версиях .NET до 4.0, за исключением перегрузок, принимающих IEnumerable<T> и IEnumerable<string>.

В вашем коде chars - это IEnumerable<char>, поэтому используемый вами метод будет недоступен. Вы можете использовать другую перегрузку, например

String.Join("", chars.Select(c => c.ToString()).ToArray());

Который будет использовать String.Join(string, string[]) один.

0
Dirk 5 Мар 2014 в 14:18