无法断言对象

时间:2012-06-25 23:21:10

标签: c# vb.net oop object

这可能是一个非常简单的面向对象编程问题。我要做的是获取2个空对象,使用查询从数据库中提取数据,使用查询返回的数据填充空对象,然后对它们进行断言。请参阅以下代码:

        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#时,我遇到了诸如此类的问题。编译器在断言处说“使用未分配的变量”。但是,我以为我在上面的代码块中分配了一个值。我做错了什么?

2 个答案:

答案 0 :(得分:2)

存在actreader.Read()返回false的可能性,因此test2可能永远不会被分配并且编译器错误。

您可以通过明确设置test1&来解决问题。 test2最初是null

object test1 = null;
object test2 = null;

答案 1 :(得分:1)

您要将值分配给if块中的变量。由于局部变量未使用默认值进行初始化,因此无法保证在到达Assert语句时该变量已被赋值。

发生了以下一种或多种情况:

  • expreader.Read()正在返回false
  • actreader.Read()正在返回false