如何在IF ELSE之外获取变量值

时间:2015-12-10 15:21:41

标签: c#

我有一个字符串数组变量,它将根据条件获取文件路径,但收到如下错误:

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
}

6 个答案:

答案 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

之前声明文件路径