Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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# 无法对对象进行断言_C#_Vb.net_Oop_Object - Fatal编程技术网

C# 无法对对象进行断言

C# 无法对对象进行断言,c#,vb.net,oop,object,C#,Vb.net,Oop,Object,这可能是一个非常简单的面向对象编程问题。我试图做的是获取2个空对象,使用查询从数据库中提取数据,用查询返回的数据填充空对象,然后对它们进行断言。请参阅下面的代码: object test1; object test2; using (SqlConnection dbconnection = new SqlConnection(expconnstr)) { dbconnection.Open();

这可能是一个非常简单的面向对象编程问题。我试图做的是获取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#的过程中,我遇到了这样的问题。编译器在断言处说“使用未赋值变量”。但是,我认为我是在上面的代码块中赋值。我做错了什么?

存在的可能性是
actreader.Read()
返回false,因此
test2
可能永远不会被赋值,编译器也会出错

您可以通过显式地将
test1
test2
初始设置为
null
来解决此问题:

object test1 = null;
object test2 = null;

您正在为
if
块内的变量赋值。由于局部变量未使用默认值初始化,因此无法保证在进入
Assert
语句时该变量已被赋值

以下一个或多个事件正在发生:

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

请原谅假设有值的变量(actreader、expcommand、dbconnection等)。他们被认为具有价值观,工作正常。失败的是断言。太好了,这解决了问题!虽然我在路上又犯了一个错误。。我使用的断言'assert.AreName'正在检查两个对象是否为名称。我需要做的是检查数据值是否为名称。相反,我使用了“Assert.AreEqual”,测试工作得非常好。再次感谢!