C # Exception - сделать «Source Error» в строке, где был вызван метод - PullRequest
0 голосов
/ 07 декабря 2018

В C #, если я вызываю постоянный метод (например, Regex.Replace) и выдает исключение, сообщение об ошибке отмечает строку, где был вызван метод, например:

Вызов метода:

//
//
string str = Regex.Replace("Hello", null, "");
//
//

enter image description here

Однако, если я напишу свой собственный метод (например, MyRegex.MyReplace) и он выдаст исключение, сообщение об ошибке помечает строку, гдебыло сгенерировано исключение:

public static class MyRegex
{
    public static string MyReplace(string input, string pattern, string replacement)
    {
        if (pattern == null)
        {
            throw new Exception("Pattern must not be null.");
        }
        else
        {
            return Regex.Replace(input, pattern, replacement);
        }
    }
}

Вызов метода:

//
//
string str = MyRegex.MyReplace("Hello", null, "");
//
//

enter image description here

Как создать исключение в методе,и иметь метку сообщения об ошибке, где метод был вызван (например, стандартные методы), а не где было выброшено исключение?

1 Ответ

0 голосов
/ 07 декабря 2018

Показанная строка является самой низкой точкой в ​​стеке вызовов, где доступен исходный код.

Вы не можете видеть какой-либо код внутри Regex.Replace, поэтому он показывает только строку в вашемкод, в котором вы его назвали.

Но поскольку throw new Exception() - это ваш код, это то, что он показывает.

Если вы создали DLL и использовали ее в другом проекте (а не копировали.файл pdb), тогда он будет вести себя так же, как ваш Regex.Replace пример, так как новый проект не может увидеть исходный код внутри DLL.

Но если вы скопируете файл .pdb и запуститеНовый проект на том же компьютере, где находится исходный код DLL, затем Visual Studio знает , где найти исходный код, и он все равно покажет вам исключение в вашем коде DLL.(по крайней мере, я знаю, что Visual Studio будет вести себя так - я не уверен, что ASP.NET отобразит это в браузере)

...