我有一个字符串数组变量,它将根据条件获取文件路径,但收到如下错误:
if (chkIncludeSubFolders.Checked == true)
{
string[] filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.AllDirectories);
}
else
{
string[] filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.TopDirectoryOnly);
}
foreach (string item in filePaths)//Error: The name filePaths dose not exist in current context
{
//my code
}
答案 0 :(得分:10)
在方法之外拉变量声明:
string[] filePaths;
if (chkIncludeSubFolders.Checked)
{
filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.AllDirectories);
}
else
{
filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.TopDirectoryOnly);
}
// You can use filePaths here
答案 1 :(得分:10)
您可以按照其他答案的建议,在if / else之外声明filePaths
。但是,你重复自己,因为两个调用之间唯一不同的是选项。所以先设置它们然后拨打电话:
var searchOptions = chkIncludeSubFolders.Checked
? SearchOption.AllDirectories
: SearchOption.TopDirectoryOnly;
string[] filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, searchOptions);
foreach (string item in filePaths)
{
//my code
}
答案 2 :(得分:3)
您需要在“if”块之外声明您的变量:
string[] filePaths;
if (chkIncludeSubFolders.Checked == true)
{
filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.AllDirectories);
}
else
{
filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.TopDirectoryOnly);
}
foreach (string item in filePaths)
{
}
答案 3 :(得分:3)
您需要在if / else语句之外定义filePaths变量:
string[] filePaths;
if (chkIncludeSubFolders.Checked == true)
{
filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.AllDirectories);
}
else
{
filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, SearchOption.TopDirectoryOnly);
}
foreach (string item in filePaths)
{
//your code
}
答案 4 :(得分:2)
如果您对?:
运算符感到满意,则可以省略整个if,并且有更简洁(更令人困惑)的代码:
string[] filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text,
chkIncludeSubFolders.Checked ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
您可以单独定义SearchOption
以使代码更具可读性,如下所示:
string searchOption = chkIncludeSubFolders.Checked
? SearchOption.AllDirectories
: SearchOption.TopDirectoryOnly;
string[] filePaths = Directory.GetFiles(txtPath.Text, txtFormat.Text, searchOption);
否则,只需在if
之前声明变量。请注意,这只是一个声明,因此您可以自由地将其取消初始化,只要您事后(可证明)将其初始化即可。
既然你有一个简单的if / else,只有2个分支,并且在它们中都设置了filePaths
的值,那么编译器足够聪明,知道变量肯定会有一个值{{1执行。
答案 5 :(得分:1)
在if-else
之前声明文件路径