返回Exception StackTrace的类型

时间:2017-01-23 06:13:03

标签: c# vb.net

您好我正在使用旧版VB代码编写C#代码,我有一个函数:

Public Shared Sub logError(ByVal ex As Exception, ByVal additionalInfo As String) 
    Dim messagestr As String
    If ex.StackTrace.Length > 0 Then
        For Each stackTrace As String In ex.StackTrace
             messagestr &= stackTrace
        Next
    End If

我将for循环转换为:

foreach (string stackTrace in ex.StackTrace)
{
      messagestr += stackTrace;
}

''''''''''''''到'字符串'。

当我从MSDN读取StackTrace它返回一个字符串时,这很奇怪。所以我不知道为什么遗留VB代码中存在for循环。此外,我不知道' char'来自。

我想我在这方面完全失败了。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:2)

ex.StackTrace的返回类型是string。通过迭代string获得的对象是char而不是string。所以你foreach循环必须是:

foreach (char stackTrace in ex.StackTrace)
{

}

或者只是将堆栈跟踪追加到您的字符串中:

messagestr += ex.StackTrace;

如果您想单独获取所有函数调用,请使用此代码将字符串拆分为行:

var stackLines = ex.StackTrace.Split('\n')

答案 1 :(得分:1)

  

根据文档StackTrace获取字符串表示   调用堆栈中的直接帧。

因此,当你迭代一个实际上会遍历其字符的字符串时,就会发生这种情况。

  

在VB中,它表示堆栈跟踪,即ordered collection of one or more stack frames。所以当你迭代它   遍历框架

答案 2 :(得分:1)

StackTrace是Exception的字符串属性,因此如果使用foreach循环遍历其成员,则其成员应为字符数据类型(char)。你可以简单地转换为

If (ex.StackTrace.Length > 0) 
{
    messagestr += ex.StackTrace;
}