C# 未分配局部变量误差

C# 未分配局部变量误差,c#,C#,所以我有一个只有2个文本文件的文件夹,我正在读取它们并存储值。这是代码的外观: public static void UnionFiles() { var dinfo = new DirectoryInfo( @"\http"); var files = dinfo.GetFiles("*.txt"); int i = 1; System.Collections.Generic.IEnumerable<String&g

所以我有一个只有2个文本文件的文件夹,我正在读取它们并存储值。这是代码的外观:

public static void UnionFiles()
{
    var dinfo =
        new DirectoryInfo(
            @"\http");
    var files = dinfo.GetFiles("*.txt");
    int i = 1;
    System.Collections.Generic.IEnumerable<String> _eValA, _eValB;

    foreach (var file in files)
    {
        if (i == 1)
        {
             _eValA = File.ReadLines(file.Name);
            ++i;
        }
        else 
        {
            _eValB = File.ReadLines(file.Name);
            i = 1;

        }
    }
    IEnumerable<String> union = _eValA.Union(_eValB);
    File.WriteAllLines(@"\http\union.txt", union.Cast<String>());
}
公共静态文件()
{
var dinfo=
新目录信息(
@“\http”);
var files=dinfo.GetFiles(“*.txt”);
int i=1;
System.Collections.Generic.IEnumerable _eValA,_eValB;
foreach(文件中的var文件)
{
如果(i==1)
{
_eValA=File.ReadLines(File.Name);
++一,;
}
其他的
{
_eValB=File.ReadLines(File.Name);
i=1;
}
}
IEnumerable并集=_eValA.union(_eValB);
writeAllines(@“\http\union.txt”,union.Cast());
}
但是我得到了这个错误:
使用未赋值的局部变量'\u eValB,\u eValA'

我怎样才能克服它


谢谢。

考虑一下代码可能采用的路径。可能是
\u eValA
没有初始化,或者
\u eValB
没有初始化,因此您会得到一个错误。由于编译器可以检测到这一点,因此会出现编译错误。您需要确保将它们设置为等于一个值(或null,如前所述,这让编译器知道您对它们负责,但请注意null在这种情况下并不合适,因为对于0或1个文件,在使用它们之前,您将在
.Union
调用中获得
ArgumentNullException
)。尝试:

var _eValA = new string[0];
var _eValB = new string[0];

foreach (var file in files)
{
    if (i == 1)
    {
         _eValA = File.ReadLines(file.Name);
        ++i;
    }
    else 
    {
        _eValB = File.ReadLines(file.Name);
        i = 1;
    }
}

这将确保它们在使用之前都已初始化。

考虑代码可能采用的路径。可能是
\u eValA
没有初始化,或者
\u eValB
没有初始化,因此您会得到一个错误。由于编译器可以检测到这一点,因此会出现编译错误。您需要确保将它们设置为等于一个值(或null,如前所述,这让编译器知道您对它们负责,但请注意null在这种情况下并不合适,因为对于0或1个文件,在使用它们之前,您将在
.Union
调用中获得
ArgumentNullException
)。尝试:

var _eValA = new string[0];
var _eValB = new string[0];

foreach (var file in files)
{
    if (i == 1)
    {
         _eValA = File.ReadLines(file.Name);
        ++i;
    }
    else 
    {
        _eValB = File.ReadLines(file.Name);
        i = 1;
    }
}

这将确保它们在使用前都已初始化。

第一次通过循环时,您将永远不会同时分配
\u evalA
\u evalB
。您需要同时指定这两个属性以避免该问题

还有其他相关问题。例如,当没有两个文件时会发生什么

因为正好有两个文件,所以不需要使用循环。如果避免循环,则可以轻松避免当前问题。例如:

var files = dinfo.GetFiles("*.txt");
System.Collections.Generic.IEnumerable<String> _eValA, _eValB;

// Should really assert that files.Count == 2
_evalA = File.ReadLines(files.First().Name);
_eValB = File.ReadLines(files.Last().Name);

IEnumerable<String> union = _eValA.Union(_eValB);
var files=dinfo.GetFiles(“*.txt”);
System.Collections.Generic.IEnumerable _eValA,_eValB;
//确实应该断言files.Count==2
_evalA=File.ReadLines(files.First().Name);
_eValB=File.ReadLines(files.Last().Name);
IEnumerable并集=_eValA.union(_eValB);

第一次通过循环时,您将永远不会同时分配
\u evalA
\u evalB
。您需要同时指定这两个属性以避免该问题

还有其他相关问题。例如,当没有两个文件时会发生什么

因为正好有两个文件,所以不需要使用循环。如果避免循环,则可以轻松避免当前问题。例如:

var files = dinfo.GetFiles("*.txt");
System.Collections.Generic.IEnumerable<String> _eValA, _eValB;

// Should really assert that files.Count == 2
_evalA = File.ReadLines(files.First().Name);
_eValB = File.ReadLines(files.Last().Name);

IEnumerable<String> union = _eValA.Union(_eValB);
var files=dinfo.GetFiles(“*.txt”);
System.Collections.Generic.IEnumerable _eValA,_eValB;
//确实应该断言files.Count==2
_evalA=File.ReadLines(files.First().Name);
_eValB=File.ReadLines(files.Last().Name);
IEnumerable并集=_eValA.union(_eValB);

如果需要,在声明中初始化为
null
。@sstan我知道它可能是重复的,但至少有100个问题具有类似的前提。你指的那个没有确切的前提,但有一个相似的前提,不一定要精确。如果它能为您提供适当的信息,那么一个类似的例子也很好。我们来这里不是为了解决每个人的具体问题,而是为了分享知识。你有责任运用这些知识并将其应用于你的情况。我们不需要200个问题,比如如何添加两个整数变量A和B,然后是如何添加两个整数变量B和C?我看到了关于A&B的那个,但是我的变量的名称不同。@jeet:重复项不需要完全相同,只要你能将这个原则应用到你的案例中。否则,因为每个程序都会与下一个程序略有不同,所以我们最终会对问题的每一种可能的排列提出一个问题,这可能就是已经发生的事情,不管我喜欢与否(很遗憾)。如果需要,请在声明中初始化为
null
。@sstan我知道它可能是重复的,但至少有100个问题具有类似的前提。你指的那个没有确切的前提,但有一个相似的前提,不一定要精确。如果它能为您提供适当的信息,那么一个类似的例子也很好。我们来这里不是为了解决每个人的具体问题,而是为了分享知识。你有责任运用这些知识并将其应用于你的情况。我们不需要200个问题,比如如何添加两个整数变量A和B,然后是如何添加两个整数变量B和C?我看到了关于A&B的那个,但是我的变量的名称不同。@jeet:重复项不需要完全相同,只要你能将这个原则应用到你的案例中。否则,因为每一个程序都会与下一个程序略有不同,所以我们最终会针对问题的每一种可能的排列提出一个问题,这可能是已经发生的事情,不管我喜欢与否(很遗憾)。谢谢。确实有效。为什么要在那里创建数组实例?@Evantimboli,因为eval变量在使用前需要初始化。的确,显示的整个代码块都可以重构,因此不需要重构,但我