我是C#的新手。我试图根据IF语句的评估结果是否为True将字典对的值存储在变量中,但是它的行为不如我期望的那样。我正在尝试使我正在从事的项目更具创造力,并想学习如何以这种方式使用字典。
string newFileName = "EOYReportPRF.xls";
string dirInfo_Source = "C:\Temp\"
Dictionary<string, string> fileNameChanges = new Dictionary<string, string>();
fileNameChanges.Add("EOYReportPRF.xls", "EOY_PRF.xls");
fileNameChanges.Add("PayrollEOY.xls", "EOY_SU.xls");
fileNameChanges.Add("PRFFundingStatement.xls", "FS_PRF.xls");
fileNameChanges.Add("SUFundingStatement.xls", "FS_SU.xls");
if (fileNameChanges.ContainsKey(newFileName))
{
File.Move(dirInfo_Source + newFileName, dirInfo_Source + fileNameChanges.Values.ToString());
}
我知道代码不正确。我只是想让它正常工作。我想遍历目录,将每个文件的名称传递到newFileName变量中。如果newFileName与字典中的键匹配,例如“ EOYReportPRF.xls”,那么我想将字典对的值用作文件名。需要一些思考的方法。谢谢!
答案 0 :(得分:3)
您需要获取密钥的实际值:
string newFileName = "EOYReportPRF.xls";
string dirInfo_Source = @"C:\Temp\";
Dictionary<string, string> fileNameChanges = new Dictionary<string, string>();
fileNameChanges.Add("EOYReportPRF.xls", "EOY_PRF.xls");
fileNameChanges.Add("PayrollEOY.xls", "EOY_SU.xls");
fileNameChanges.Add("PRFFundingStatement.xls", "FS_PRF.xls");
fileNameChanges.Add("SUFundingStatement.xls", "FS_SU.xls");
if (fileNameChanges.ContainsKey(newFileName))
{
var filename = fileNameChanges[newFileName];
File.Move(dirInfo_Source + newFileName, dirInfo_Source + filename);
}
应该可以。
答案 1 :(得分:1)
您可以尝试使用TryGetValue方法。
string val;
string [] fileEntries = Directory.GetFiles(dirInfo_Source);
foreach(string fileName in fileEntries){
if(fileNameChanges.TryGetValue(fileName, out val)){
File.Move(dirInfo_Source + fileName , dirInfo_Source + val);
}
}