C# 无法分配给';arg';因为它是一个';foreach迭代变量';

C# 无法分配给';arg';因为它是一个';foreach迭代变量';,c#,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 local

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

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

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);
    }
}
if(args!=null)
{
for(int i=0;i
如果确实需要更改循环中的项目,请使用
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;
   }
你想做的是“看起来”(这个词用得很松散)

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

您试图在这里完成什么?为什么要尝试分配给
arg
?在循环运行时,不允许更改循环的迭代器。使用另一个变量。我将把你的变量标记为答案。我也发布了我的答案版本。
var newArgs = args.Select(x => Helper.DownloadLocally(x, Helper.ApplicationDirectory));
foreach (var arg in newArgs)
   powerShell.AddArgument(arg);