首页 > 解决方案 > 我如何才能在 C# 中只获取异常堆栈跟踪消息的第一行?

问题描述

我不想出于调试目的打印堆栈跟踪消息,但我只想要第一行,因为我有兴趣了解问题的根源。

例子:

at Solution.Models.Class.Method() in C:\Users\...\Models\Class.cs:line 1118 <-- i´m only interested in this
at Solution.Models.Class.AddSomething(Something _something) in C:\Users\...\Solution\Models\Class.cs:line 518

标签: c#.net

解决方案


var firstLine = originalMessage
    .Split(Environment.NewLine)
    .FirstOrDefault();

在哪里:

  • originalMessage- 您要从中获取信息的字符串;
  • .Split()- 返回一个字符串数组,该数组由您originalMessage除以传递的参数的子字符串组成Environment.NewLine
  • Environment.NewLine- 获取为此环境定义的换行符字符串。\r\n对于非 Unix 平台,或\nUnix 平台;
  • .FirstOrDefault()- 返回序列的第一个元素,如果没有找到元素,则返回默认值;

Environment.NewLine这是一个 Linq 表达式,由于使用而不是硬编码,它可以在所有平台上运行,无论是 Linux、Windows 还是 Mac "\r\n"。此外,通过将 Linq 表达式彼此堆叠在一起,您可以构建一个特定的管道,上面写着:

  1. 我正在拿一根绳子;
  2. 然后我通过行分隔符将其拆分为子字符串;
  3. 并从结果中取出第一个子字符串;

推荐阅读