C# 无法对对象进行断言
这可能是一个非常简单的面向对象编程问题。我试图做的是获取2个空对象,使用查询从数据库中提取数据,用查询返回的数据填充空对象,然后对它们进行断言。请参阅下面的代码:C# 无法对对象进行断言,c#,vb.net,oop,object,C#,Vb.net,Oop,Object,这可能是一个非常简单的面向对象编程问题。我试图做的是获取2个空对象,使用查询从数据库中提取数据,用查询返回的数据填充空对象,然后对它们进行断言。请参阅下面的代码: object test1; object test2; using (SqlConnection dbconnection = new SqlConnection(expconnstr)) { dbconnection.Open();
object test1;
object test2;
using (SqlConnection dbconnection = new SqlConnection(expconnstr))
{
dbconnection.Open();
var expcommand = new SqlCommand(expectedquery, dbconnection);
var actcommand = new SqlCommand(actualquery, dbconnection);
using (SqlDataReader expreader = expcommand.ExecuteReader())
{
if (expreader.Read())
{
test1 = expreader.GetValue(0);
expreader.Close();
}
}
using (SqlDataReader actreader = actcommand.ExecuteReader())
{
if (actreader.Read())
{
test2 = actreader.GetValue(0);
actreader.Close();
}
}
}
Assert.AreSame(test1, test2);
我按照相同的模式在VB中编写了一个非常类似的测试方法,VB代码执行得很好。然而,在从VB过渡到C#的过程中,我遇到了这样的问题。编译器在断言处说“使用未赋值变量”。但是,我认为我是在上面的代码块中赋值。我做错了什么?存在的可能性是
actreader.Read()
返回false,因此test2
可能永远不会被赋值,编译器也会出错
您可以通过显式地将test1
和test2
初始设置为null
来解决此问题:
object test1 = null;
object test2 = null;
您正在为
if
块内的变量赋值。由于局部变量未使用默认值初始化,因此无法保证在进入Assert
语句时该变量已被赋值
以下一个或多个事件正在发生:
正在返回expreader.Read()
false
正在返回actreader.Read()
false