1. ホーム
  2. c#

[解決済み] モディファイドクロージャーへのアクセス

2022-02-17 01:35:48

質問事項

string [] files = new string[2];
files[0] = "ThinkFarAhead.Example.Settings.Configuration_Local.xml";
files[1] = "ThinkFarAhead.Example.Settings.Configuration_Global.xml";

//Resharper complains this is an "access to modified closure"
for (int i = 0; i < files.Length; i++ )
{
    // Resharper disable AccessToModifiedClosure
    if(Array.Exists(Assembly.GetExecutingAssembly().GetManifestResourceNames(),
    delegate(string name) { return name.Equals(files[i]); }))
         return Assembly.GetExecutingAssembly().GetManifestResourceStream(files[i]);
    // ReSharper restore AccessToModifiedClosure
}

上記は正常に動作しているようですが、ReSharperはこれが"modified closure"へのアクセスであるとクレームを出してきます。 どなたかこの問題を解決できる方はいらっしゃいますか?

(このトピックの続き こちら )

解決方法は?

この場合、実際にはデリゲートを実行しているので、大丈夫です。 内の をループさせます。

しかし、このデリゲートを保存しておいて後で使用する場合、files[i] にアクセスしようとすると、すべてのデリゲートが例外をスローすることがわかります。 変数 i は、デリゲート作成時の値ではありません。

要するに、「SEO対策」として気をつけるべきことなのです。 潜在的 しかし、この場合、それはあなたを傷つけるものではありません。

をご覧ください。 このページの下 は、より複雑な例で、結果は直感的ではありません。