2016-05-24 6 views
0

Мне нужно удалить подстроку в строке. Мне нужно удалить строку, начиная с определенного символа, до другого символа. Это мой код:Почему рекурсия не работает?

[Test] 
    public static void TestDeleteSign() 
    { 
     var s = "РасчНал[]{@ТипНП}/РасчНалГруп[]{@СубРФ}/@ДоляНалБаз"; 
     var result = DeleteSignature(s); 
     var acceptResult = "РасчНал/РасчНалГруп/@ДоляНалБаз"; 
     Assert.AreEqual(acceptResult, result); 
    } 
    public static string DeleteSignature(string s) 
    { 
     if (s.Contains("[]{")) 
     { 
      var firstEntry = s.IndexOf("[]{"); 
      var closeEntry = s.IndexOf('}'); 
      s = s.Remove(firstEntry, closeEntry - firstEntry + 1); 
      DeleteSignature(s); 
     } 
     return s; 
    } 

Результат:

Expected: "РасчНал/РасчНалГруп/@ДоляНалБаз" 
But was: "РасчНал/РасчНалГруп[]{@СубРФ}/@ДоляНалБаз" 
+0

И что происходит, когда вы запускаете этот код? что вы нашли, когда исследовали проблему? – Sayse

+0

Ожидаемое: «РасчНал/РасчНалГруп/@ ДоляНалБаз» Но было: «РасчНал/РасчНалГруп [] {@ СубРФ}/@ ДоляНалБаз" –

+12

Подсказка: инструкция 'DeleteSignature (s);' не собирается делать ничего полезного , потому что вы не используете возвращаемое значение ... –

ответ

4

Ваша функция возвращает строку. После первой итерации вашей функции ваша функция называется второй раз. Независимо от того, что там происходит, ваш код будет возвращать только один проход, как вы ничего не делаете, с вашим рекурсивным исполнением DeleteSignature(s). Вам нужно вернуть результат вашего рекурсивного выполнения, например:

public static string DeleteSignature(string s) 
{ 
    if (s.Contains("[]{")) 
    { 
     var firstEntry = s.IndexOf("[]{"); 
     var closeEntry = s.IndexOf('}'); 
     s = s.Remove(firstEntry, closeEntry - firstEntry + 1); 
     return DeleteSignature(s); 
    } 
    return s; 
} 
+0

Я думаю, что ошибка OP была связана с тем, что переназначение ссылки s повлияет на объект в другом месте, но эта ссылочная переменная s в каждом экземпляре DeleteSignature не зависит от других ссылок на один и тот же объект. –

Смежные вопросы