内のすべての命令の後で、条件がtrue
の場合、予期しない動作をします。ループが壊れます。私はifステートメントをコメントしようとし、すべてうまく動作する(すべての要素をienumerableに反復する)。誰かがなぜ私を説明することができますか?予期しないForeachの動作C#
var allRef = projDefinition
.Element(msbuild + "Project")
.Elements(msbuild + "ItemGroup")
.Elements(msbuild + "COMReference")
.Where(refElem => find.Any(f => refElem.FirstAttribute.Value.ToLower().Contains(f)))
.Select(refElem => refElem);
foreach (var xElement in allRef)
{
var name = xElement.FirstAttribute.Value;
var dllPath = dllFiles.FirstOrDefault(dll => dll.ToLower().Contains(name.ToLower()));
if (dllPath != null)
{
var dllName = dllPath.Substring(dllPath.LastIndexOf('\\') + 1, dllPath.LastIndexOf('.') - dllPath.LastIndexOf('\\') - 1);
xElement.Remove();
XElement elem = new XElement(msbuild + "Reference", new XAttribute("Include", dllName));
elem.Add(new XElement(msbuild + "HintPath", HintPath.GetHintPath(dllPath)));
elem.Add(new XElement(msbuild + "EmbedInteropTypes", "False"));
projDefinition.Root.Elements(msbuild + "ItemGroup").ElementAt(0).Add(elem);
}
}
projDefinition.Save(fullProjectPath);
ifブロックを通して行単位でデバッグする際に例外がありますか? – woohoo
'if(dllPath!= null)'がforeachループで混乱するのですか?これがあなたの実際のコードなら、私は自分の目で見ることなくあなたが言ったことを信じません。 –
人はいませんが、例外はありません。 – CRK