Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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#_Asp.net_Variables - Fatal编程技术网

C# 未赋值局部变量的使用

C# 未赋值局部变量的使用,c#,asp.net,variables,C#,Asp.net,Variables,我不知道为什么会出现这个错误 我错过了什么?第一次分配给标记时收集的在while(Data1.Read())循环中,该循环不能保证执行 通过在声明变量时初始化该变量来解决此问题: ... ... ... try { string Tags_collect; SqlDataReader Data1 = cmd.ExecuteReader();

我不知道为什么会出现这个错误
我错过了什么?

第一次分配给
标记时收集的
while(Data1.Read())
循环中,该循环不能保证执行

通过在声明变量时初始化该变量来解决此问题:

    ...
    ...
    ...

            try
            {
                string Tags_collect;

                SqlDataReader Data1 = cmd.ExecuteReader(); 
                Data1.Read();
                lbl_q_title.Text = Data1["subject"].ToString();

               Data1.NextResult();


               while (Data1.Read())
               {
                   Tags_collect = Data1.GetString(0);
                   Tags_collect= Tags_collect+ Tags_collect;
               }

               lbl_tags.Text = Tags_collect;
    .....
    ....

   ....
更好的方法是使用
StringBuilder
,而不是依赖重复的连接:

string Tags_collect = string.Empty;

在循环中将字符串连接到自身是非常低效的,因为字符串是不可变的,所以每次连接都会创建一个全新的实例。使用
StringBuilder
可以通过使用单个缓冲区来防止这种情况。

编译器必须考虑while循环条件中的
Data1.Read()
可能永远不会返回true。如果发生这种情况,则Tags\u collect永远不会初始化,因此会出现错误。

因为If
Data1.Read()
在开始时返回false
Tags\u collect
未分配。

您需要在while循环中设置读卡器,如以下小示例:

SqlDataReader=command.ExecuteReader()

试试这个:

    // Call Read before accessing data.
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}, {1}",
            reader[0], reader[1]));
    }

Tags_collect是一个未赋值的局部变量。执行可能永远不会进入while块。告诉我们编译器具体抱怨的地方如何?@Bob+1注意,“更好”之后的所有内容都可以忽略,直到您想解决性能/内存使用问题为止。这是重要的信息,但与“未分配变量”问题无关。
    // Call Read before accessing data.
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}, {1}",
            reader[0], reader[1]));
    }
string Tags_collect=string.empty;