Ссылка на строку передается по значению. Существует большая разница между передачей ссылки по значению и передачей объекта по ссылке. К сожалению, слово «ссылка» используется в обоих случаях.
Если вы do передаете ссылку на строку ссылкой , она будет работать так, как вы ожидать:
using System;
class Test
{
public static void Main()
{
string test = "before passing";
Console.WriteLine(test);
TestI(ref test);
Console.WriteLine(test);
}
public static void TestI(ref string test)
{
test = "after passing";
}
}
Теперь вам нужно различать внесение изменений в объект, на который ссылается ссылка, и внесение изменений в переменную (например, параметр), чтобы она ссылалась на другой объект , Мы не можем вносить изменения в строку, потому что строки неизменяемы, но мы можем продемонстрировать ее с помощью StringBuilder
:
using System;
using System.Text;
class Test
{
public static void Main()
{
StringBuilder test = new StringBuilder();
Console.WriteLine(test);
TestI(test);
Console.WriteLine(test);
}
public static void TestI(StringBuilder test)
{
// Note that we're not changing the value
// of the "test" parameter - we're changing
// the data in the object it's referring to
test.Append("changing");
}
}
См. мою статью о передаче параметра для более подробная информация.
Когда выполняется анализ решения Resharper и nCrunch Boths, он останавливает мой текстовый редактор.
Слишком много для моих шести ядер.
Решение - это 14 проектов и около 120 тыс. Строк кода.
Я использую ReSharper 6 и NCrunch. Если у вас многоядерный компьютер (и вы человек TDD), то NCrunch просто необходим. Он дает постоянную обратную связь о том, как ваш код выглядит с точки зрения тестов. Он мгновенно показывает тестовое покрытие - отличный помощник. ReSharper - инструмент рефакторинга для меня.
Я запускаю тесты с ReSharper, как раньше, NCrunch все время работает в фоновом режиме.
Из того, что я время от времени замечал, NCrunch и ReSharper сообщают о неудачных тестах, когда другой сообщает, что все в порядке. Каждый раз в такой ситуации оказывается, что в коде что-то не так. Когда NCrunch настроен на параллельную работу, могут быть обнаружены некоторые новые недостатки:)
ИМХО они оба дополняют друг друга.