Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 对象引用未设置为对象的实例。(WPF实体框架)_C#_Wpf_Entity Framework - Fatal编程技术网

C# 对象引用未设置为对象的实例。(WPF实体框架)

C# 对象引用未设置为对象的实例。(WPF实体框架),c#,wpf,entity-framework,C#,Wpf,Entity Framework,我是实体框架的新手。 现在,我正在用一个按钮编写delete函数。当我点击此按钮时,我的数据将被删除;但是,它会弹出“对象引用未设置为对象实例”的警报。我无法理解这个问题 private void btnDelete_Click(object sender, RoutedEventArgs e) { try { if (UserDataGrid.SelectedItems.Count == 0)

我是实体框架的新手。 现在,我正在用一个按钮编写delete函数。当我点击此按钮时,我的数据将被删除;但是,它会弹出“对象引用未设置为对象实例”的警报。我无法理解这个问题

private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (UserDataGrid.SelectedItems.Count == 0)
                    return;
                if (UserDataGrid.SelectedItems.Count > 0)
                    if (MessageBox.Show("Would you want to delete?", "Yes", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                    {
                        var selected = UserDataGrid.SelectedItem as User;
                        var index = selected.Index;

                        User user = new User();
                        user = ssEntities.User.Where(x => x.Index == index).First();

                        if (user != null)
                        {
                            ssEntities.User.DeleteObject(user);
                            ssEntities.SaveChanges();
                        }
                    }
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
            finally { }
        }

如果没有足够的信息,请告诉我添加它。

考虑到您的意见,以下是您应该做的:

因为看起来所有的
try-catch
块都是这样写的

try { }
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
finally { }
您完全不知道异常发生在哪里,因为您正在丢失整个堆栈跟踪。你应该改变这种行为,因为这有很多问题。查找使用此模式的所有代码块,并将其更改为以下内容:

try { }
catch (Exception ex)
{ 
    Debug.WriteLine(string.Format("An exception has occurred in <some function>: {0}\n{1}", ex.Message, ex));
    MessageBox.Show(ex.Message); 
}
finally { }
试试{}
捕获(例外情况除外)
{ 
Debug.WriteLine(string.Format(“在:{0}\n{1}”,例如Message,ex)中发生异常);
MessageBox.Show(例如Message);
}
最后{}
通过这种方式,您将能够在调试窗口中看到更详细的输出,并且应该能够通过检查StackTrace找到确切的异常。

当然,除了使用
Debug.WriteLine
,您还可以使用另一种日志机制,如
log4net

考虑到您的评论,下面是您应该做的:

因为看起来所有的
try-catch
块都是这样写的

try { }
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
finally { }
您完全不知道异常发生在哪里,因为您正在丢失整个堆栈跟踪。你应该改变这种行为,因为这有很多问题。查找使用此模式的所有代码块,并将其更改为以下内容:

try { }
catch (Exception ex)
{ 
    Debug.WriteLine(string.Format("An exception has occurred in <some function>: {0}\n{1}", ex.Message, ex));
    MessageBox.Show(ex.Message); 
}
finally { }
试试{}
捕获(例外情况除外)
{ 
Debug.WriteLine(string.Format(“在:{0}\n{1}”,例如Message,ex)中发生异常);
MessageBox.Show(例如Message);
}
最后{}
通过这种方式,您将能够在调试窗口中看到更详细的输出,并且应该能够通过检查StackTrace找到确切的异常。

当然,除了使用
Debug.WriteLine
,您还可以使用另一种日志机制,如
log4net

引发异常的行是什么?更好的是,在获得异常之前,您是否会看到“Well you want delete?”消息框,我的猜测可能是UserDataGrid为null,或者它所选的项可转换为或不可转换为UserIt’s奇怪的是,我的程序没有转到catch函数。在visual studio中,可以将其设置为在出现异常时停止。引发异常的行是什么?更好的是,您是否看到“是否要删除?”获取异常之前的消息框?如果没有第#行,我的猜测可能是UserDataGrid为null,或者它的选定项可转换为或不可转换为UserGrid。这太奇怪了,我的程序没有转到catch函数。在visual studio中,它可以设置为在异常时停止。感谢您的答复,但我已检查了断点。它不会转到
catch
块,甚至不会显示在调试窗口中。但是您是否更改了使用此try-catch块的所有代码块?这个特定断点从未被命中的事实意味着异常发生在其他地方。嘿,@Roel谢谢你的建议。现在,我知道我错在哪里了。我只是在我的datagrid中有一个多余的列,所以当我添加或删除它时;会出错的。谢谢你的回复,但我已经检查了断点。它不会转到
catch
块,甚至不会显示在调试窗口中。但是您是否更改了使用此try-catch块的所有代码块?这个特定断点从未被命中的事实意味着异常发生在其他地方。嘿,@Roel谢谢你的建议。现在,我知道我错在哪里了。我只是在我的datagrid中有一个多余的列,所以当我添加或删除它时;它会出错的。