c# - 来自无法访问的代码的无法捕获的异常

标签 c# winforms exception

我在我的 C# 2.0 WinForms 应用程序中遇到了一个非常奇怪的问题,我什至不确定是否值得问这个问题,因为这个问题发生在一个奇怪的设置中,我认为没有我的帮助你无法重现它来源,但我完全没有想法。

我有一个表单,左边有一个 TreeView,右边有一个 ListViewTreeView 显示特定文件夹中的所有可用文件和子文件夹(其中包含我的应用程序所需的文档)。如果选择了文件夹,ListView 会显示所选文件夹中的所有文件和子文件夹。在启动时,我从文件夹中填充 TreeView,然后我通过代码选择第一个 TreeNode(在我的例子中它是一个文件夹)。之后 TreeView 的内容如下所示:

-folder
   -file1
   -file2

选择文件夹会触发 TreeViewAfterSelecedEvent。因为选择了一个文件夹,所以我使用以下方法填充 ListView:

private void fillOverview(FAFolder folder)
{
    lv_overview.Items.Clear();
    ListViewItem item;
    foreach (FAFile file in folder.sortedContent)
    {
        if (file is FAFolder)
        {
            item = new ListViewItem(file.Name, "Folder"); //exception got thrown here
        }
        else
        {
            item = new ListViewItem(file.Name, file.Name);
        }
        item.Tag = file;
        lv_overview.Items.Add(item);
    }
}

如您所见,没有子文件夹,因此在此设置中永远不应触及 item = new ListViewItem(file.Name, "Folder"); 行,但时不时NullReferenceException 被抛出。如果我用 try/catch 包装这一行,异常就会在 catch block 内抛出。我尝试检查所有内容是否为 null,但没有 nullreferences。或者,如果我在此行之前添加一个 MessageBox,异常仍然会被抛出,并且不会弹出任何 MessageBox。这使我得出结论,execption 堆栈跟踪是错误的和/或此异常来自其他 Thread 或类似的东西。

我是一个非常乐观的人,我知道 SO 社区有多么聪明,但我认为没有人能指出问题所在。所以我真正要寻找的是提示和建议,我可以如何找到和调试这种奇怪行为的原因。

编辑:

internal abstract class FAFile
{
    internal string Name;
    internal readonly FAFolder Parent;
    internal FAFile(FAFolder parent)
    {
        this.Parent = parent;
    }
}

internal sealed class FAFolder : FAFile
{
    internal readonly IDictionary<string, FAFile> Content = new Dictionary<string, FAFile>();
    internal FAFolder(FAFolder parent, string name) : base(parent)
    {
        this.Name = name;
    }
}

internal sealed class FADocument : FAFile
{
    public readonly string Path;
    public FADocument(FAFolder parent, string path): base(parent)
    {
        this.Path = path;
        this.Name = System.IO.Path.GetFileNameWithoutExtension(path);
    }
}

最佳答案

您是否尝试过对 folder.sortedContent 进行空检查?

通常 ReSharper 会提示我类似的东西应该进行空检查。

如果您想确定,请将以下行添加到您的代码中,在 foreach 循环之上:

if (folder.sortedContent == null) throw new Exception("It was null, dangit!");

关于c# - 来自无法访问的代码的无法捕获的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288704/

相关文章:

c# - BluetoothAdapter ActionDiscoveryFinished

c# - 我可以在 C# *using* block 中使用不同类型的对象吗?

javascript - 如何删除从特定加载文件生成的所有事件监听器?

ios - 在 sqlite ios NULL cString' 中出现错误?

c# - 如何删除 wpf 中除一个以外的所有选项卡项?

c# - C# 中的简单游戏,仅包含 native 库

c# - C#中如何显示当前时间和日期

c# - DataGridView SelectLine 颜色为无?

java - 由 : There is no result type defined for type 'chain' mapped with name 'success' 引起

.net - DateTime.Now 抛出异常