C# 异常StackTrace的返回类型
您好,我正在从传统VB代码编写C#代码,我有一个函数:C# 异常StackTrace的返回类型,c#,vb.net,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 me
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;
}
“foreach”下有一条错误消息:“无法将类型“char”转换为“string”
当我从MSDN中读取StackTrace时,它返回一个字符串,这很奇怪。所以我不知道为什么在传统的VB代码中会有for循环。另外,我也不知道“char”来自哪里
我想我在这一带完全迷路了。有人能帮我吗
根据文档获取字符串表示形式
调用堆栈上立即帧的
所以,当你迭代一个字符串,它实际上会遍历它的字符,这在你的例子中发生
其中,正如在VB中一样,它表示堆栈跟踪,这是一个
遍历帧
StackTrace是异常的字符串属性,所以若您使用foreach循环其成员,则其成员应为字符数据类型(char)
If (ex.StackTrace.Length > 0)
{
messagestr += ex.StackTrace;
}
ex.StackTrace
的返回类型是字符串
。通过迭代字符串
得到的对象是字符
而不是另一个字符串
。因此foreach
循环必须是:
foreach (char stackTrace in ex.StackTrace)
{
}
或者只需将堆栈跟踪附加到字符串:
messagestr += ex.StackTrace;
如果要单独获取所有函数调用,请使用以下代码将字符串拆分为行:
var stackLines = ex.StackTrace.Split('\n')
首先,为什么您认为StackTrace类是VB特有的?其次,要获得该类的实例,必须严格地实例化该类,如
Dim trace作为新的StackTrace
;访问异常类实例的StackTrace属性将得到一个字符串,不管是C#、VB还是其他.NET语言令人困惑的是,VB允许您使用不适当的类型(即“String”,其中“Char”是正确的)并对其进行排序——可能是使用的原始VB代码选项Strict Off。