您好我正在使用旧版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'来自。
我想我在这方面完全失败了。有人可以帮帮我吗?
答案 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;
}