__ СТРОКА __ __ ФАЙЛ __ эквиваленты существуют в C#?

Этот может ответить на ваш вопрос (вы используете параметр shell=True)

Но не проще ли будет импортировать file2 как модуль в file1? (если вы еще не знакомы с импортом, вы можете обратиться к этому руководству )

41
задан ojblass 30 March 2009 в 06:52
поделиться

5 ответов

Это более ужасно, но можно сделать что-то вроде этого в C#using классы StackTrace и StackFrame:

StackTrace st = new StackTrace(new StackFrame(true));
Console.WriteLine(" Stack trace for current level: {0}", st.ToString());
StackFrame sf = st.GetFrame(0);
Console.WriteLine(" File: {0}", sf.GetFileName());
Console.WriteLine(" Method: {0}", sf.GetMethod().Name);
Console.WriteLine(" Line Number: {0}", sf.GetFileLineNumber());
Console.WriteLine(" Column Number: {0}", sf.GetFileColumnNumber());

Конечно, это идет с немного служебными.

28
ответ дан Ed S. 27 November 2019 в 00:13
поделиться

Самой близкой вещью тем является то, что можно создать a StackTrace возразите и узнайте название метода наверху стека, таким образом, можно быть рядом с функциональностью __FUNCTION__ макрос.

StackTrace stackTrace = new StackTrace();           
StackFrame[] stackFrames = stackTrace.GetFrames();  

foreach (StackFrame stackFrame in stackFrames)
    Console.WriteLine(stackFrame.GetMethod().Name);   

Для сокращения стоимости вывода этого вручную и также кода во время выполнения можно записать вспомогательный метод:

[Conditional("Debug")]
public void LogMethodName()
{
    Trace.WriteLine("Entering:" + new StackTrace().GetFrame(1).GetMethod().Name);
}

Отметьте, как мы получаем кадр 1, как структурируют 0, был бы LogMethodName самостоятельно. Путем маркировки его как Условное выражение ("Отладка") мы удостоверяемся, что код удален из сборок конечных версий, который является одним способом избежать стоимости во время выполнения, где это не может быть необходимо.

11
ответ дан Daniel Earwicker 27 November 2019 в 00:13
поделиться

Поскольку отслеживание стека содержит большую часть того, в чем Вы нуждаетесь. Это не даст Вам название файла, но это даст Вам класс/имя метода. Это также содержит номер строки. Этим не пропускают, это автоматически. Просто необходимо выдать исключение как Вы, делают это в Java

1
ответ дан Ender 27 November 2019 в 00:13
поделиться

Вот способ получить номер строки: http://askville.amazon.com/SimilarQuestions.do?req=line-numbers-stored-stack-trace-C%2523-application-throws-exception

При использовании log4net можно получить номер строки и имя файла в журналах, но:

  • это может уменьшить Ваше приложение. производительность
  • у Вас должны быть.PDB файлы вместе с Вашими блоками.
1
ответ дан Igor Brejc 27 November 2019 в 00:13
поделиться

Уже существуют некоторые предложения для достижения того, что Вы хотите. Или используйте объект StackTrace или лучший log4net.

В Java для получения той информации я должен был выдать исключение и поймать его.

Это не совсем верно. У Вас может быть он без выдавания исключения, также. Взгляните к log4j. Это даже регистрирует Ваше имя метода и имя класса, не загрязняя Ваш код твердыми кодированными строками, содержащими имя существующего метода (по крайней мере, я видел это в некоторых случаях).

Почему этими старыми резервными устройствами так пропускают на современных языках программирования?

Java и C# не используют (в последнем: чрезмерное использование) препроцессоров. И я думаю, что это хорошо. Злоупотребление препроцессорами для создания нечитабельного кода очень легко. И если программисты могут злоупотребить некоторой техникой... они злоупотребят ею.

Просто примечание о производительности, которая, очень вероятно, будет следующей вещью, которая открывается в Вашем уме:

При использовании StackTrace или log4net, Вы будете всегда читать или слышать, что это медленно, потому что он использует Отражение. Я использую log4net, и я никогда не встречался с входом как с горлышком бутылки производительности. Если это было бы, я могу декларативно деактивироваться (части) регистрирующийся - не изменяя исходный код. Это - чистая красота, сравненная для удаления всех строк входа в коде C/C++! (Кроме того: Если бы производительность является основной целью, я использовал бы C/C++... это никогда не будет умирать несмотря на Java и C#.)

0
ответ дан Theo Lenndorff 27 November 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: