有没有办法将字典对的值传递给C#中的变量?

时间:2019-01-14 23:16:30

标签: c# ssis

我是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”,那么我想将字典对的值用作文件名。需要一些思考的方法。谢谢!

2 个答案:

答案 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);   
       }

 }