Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异常StackTrace的返回类型_C#_Vb.net - Fatal编程技术网

C# 异常StackTrace的返回类型

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

您好,我正在从传统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;
}
“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。