Отладка с помощью метода расширения - PullRequest
4 голосов
/ 02 сентября 2011

Я создал метод в C #, который расширяет строковый тип данных, создавая дополнительную перегрузку для функции Split, чтобы можно было определить спецификатор текста. Пример Строковые данные определяются как «поле 1», «поле 2», «поле 3»

string[] splitData = data.Split(',','"')

Расширение отлично работает. Я могу получить доступ к методу, как только я ссылаюсь и использую пространство имен. Однако есть проблема в методе, который я пытаюсь отладить, но отладчик не вступит в метод расширения.

Добавочный код

namespace Extensions
{
  public static class StringExtension
  {
    public static string[] Split(this string s, char delimiter, char qualifier)
    {
      // Method does work
    }
  }
}

Код в тесте nUnit

string testString = "\"Field 1\",\"Field 2\",\"Field 3\"";
int expectedCount = 3;

// Do Test.
string[] result = testString.Split(',','"');

Assert.AreEqual(expectedCount, result.Length);

Я не могу войти в testString.Split (',', '"'). Он возвращает результат, а intellisense показывает метод расширения. Отладчик просто перешагивает через него, как это было бы для встроенного метода Split.

Есть идеи ??

Ответы [ 4 ]

6 голосов
/ 02 сентября 2011

Фактически, когда вы вызываете testString.Split(',','"'), то, что на самом деле вызывается , вызывается перегрузкой public string[] Split(params char[] separator), а не вашим методом расширения. Это потому, что члены экземпляра, если применимо, всегда имеют приоритет над методами расширения.

Единственные две вещи, которые вы можете сделать, это либо переименовать ваш метод, либо каким-либо образом изменить сигнатуру, чтобы это отличалось от различных String.Split перегрузок.

2 голосов
/ 02 сентября 2011

Это должно вызвать как StringExtension.Split(...); Или попробуйте ниже

enter image description here

0 голосов
/ 02 сентября 2011

Проверить код, который нужно вызвать, можно нажатием клавиши F12 (перейти к def) или просмотром выхода рефлектора. Я задал связанный вопрос о том, как это сделать в отладчике VS2010.

0 голосов
/ 02 сентября 2011

Вы можете поставить точку останова в методе расширения;исполнение на этом остановится.

Однако должен быть другой способ, который подходит и пригоден для использования.
Я еще не нашел его.

...