无法分配给“ arg”,因为它是“ foreach迭代变量”

时间:2018-08-07 01:29:10

标签: c#

arg用红色下划线标明arg = localpath
无法分配给'arg',因为它是'foreach迭代变量'

if (args != null)
{
    foreach (var arg in args)
    {
        //download files locally if needed
        if (!File.Exists(arg))
        {
            try
            {
                var localPath = Helper.DownloadLocally(arg, Helper.ApplicationDirectory);
                arg = localPath;
            }
            catch (Exception)
            {

                throw;
            }
        }
        foreach (var arg in args)
        {
            powerShell.AddArgument(arg);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

如果您确实需要在循环中更改项目,请改用for,因为它不使用枚举器

for (var index = 0; index < args.Length; index++)
{

   //download files locally if needed
   if (!File.Exists(args[index]))
   {
      var localPath = Helper.DownloadLocally(args[index], Helper.ApplicationDirectory);
      args[index] = localPath;
   }

然而,您还有更多要做的事情

循环中没有意义的循环

foreach (var arg in args)
{
   powerShell.AddArgument(arg);
}

您想做的“似乎”(宽松地使用)是

var newArgs = args.Select(x => Helper.DownloadLocally(x, Helper.ApplicationDirectory));
foreach (var arg in newArgs)
   powerShell.AddArgument(arg);

答案 1 :(得分:0)

我刚刚解决了自己的问题。.感谢TheGeneral也发布了他们的答案版本。

if (args != null)
{
    for (int i = 0; i < args.Length; i++)
    {
        if (!File.Exists(args[i]))
        {
            try
            {
                var localPath = Helper.DownloadLocally(args[i], Helper.ApplicationDirectory);
                args[i] = localPath.ToString(); ;
            }
            catch (Exception)
            {
                throw;
            }
        }

    }
    foreach (var arg in args)
    {
            powerShell.AddArgument(arg);
    }
}