0

なぜこのコードが私に問題を与えているのか疑問に思っていましたか?

this.adminList.Invoke((Delegate)(() => this.adminList.Items.Add((object)this.arg2)));

それが私に与えているエラーは次のとおりです。

エラー 1 デリゲート型ではないため、ラムダ式を 'System.Delegate' 型に変換できません

なぜこれが起こっているのか誰にも分かりますか?ああ、ところで、単純にやろうとするとadminList.Items.Add(arg2); エラーが表示されます.「作成されたスレッドでクロススレッドが使用されていません」というエラーが表示されarg2ます. . これはc#です。ご協力いただきありがとうございます:D PS これを修正していただけると非常に助かります。ありがとうございます!

PSS: リクエストによる追加コード

            if (this.str.StartsWith("!addadmin") || this.str.StartsWith("!admin"))
            {
                if (Enumerable.Contains<char>((IEnumerable<char>)this.str, this.space))
                {
                    if (this.arg2 == this.names[m.GetInt(0U)])
                        con.Send("say", new object[1]
        {
          (object) (this.names[m.GetInt(0U)].ToUpper() + ": You can't make yourself an admin.")
        });
                    else if (this.mods.Contains((object)this.names[m.GetInt(0U)]))
                    {
                        if (this.names.ContainsValue(this.arg2))
                        {
                            if (!this.adminList.Items.Contains((object)this.arg2))
                            {
                                if (this.adminList.InvokeRequired)
                                    this.adminList.Invoke((Delegate)(() => this.adminList.Items.Add((object)this.arg2)));
                                con.Send("say", new object[1]
            {
              (object) (this.names[m.GetInt(0U)].ToUpper() + ": " + this.arg2.ToUpper() + " is added as an admin.")
            });
                            }
                            else
                                con.Send("say", new object[1]
            {
              (object) (this.names[m.GetInt(0U)].ToUpper() + ": " + this.arg2.ToUpper() + " is already an admin...")
            });
                        }
                        else
                            con.Send("say", new object[1]
          {
            (object) (this.names[m.GetInt(0U)].ToUpper() + ": " + this.arg2.ToUpper() + " doesn't exist in this world.")
          });
                    }
                    else
                        con.Send("say", new object[1]
        {
          (object) (this.names[m.GetInt(0U)].ToUpper() + ": You need to be a mod or the owner to use \"" + this.arg1 + "\"")
        });
                }
                else
                    con.Send("say", new object[1]
      {
        (object) ( this.names[m.GetInt(0U)].ToUpper() + ": Use it like: \"" + this.arg1 + " USERNAME\"")
      });
            }

names はユーザー名を格納する辞書、mods は管理者よりも強力な ppl のリスト、m は PlayerIOClient.Message、arg1 は最初に言った単語、str はユーザーが話すときにテキストが含まれる文字列です。

前に言ったように、adminList はリストボックスです

4

1 に答える 1

5

ラムダ式は特定のデリゲート型に推論できないため (一致する署名を持つ複数のデリゲートが存在する可能性があるため)、デリゲート型を明示的に指定する必要があります。Delegateは具体的なデリゲート型ではなく、すべてのデリゲートの基本クラスであるため、使用できません。

あなたの場合、Actionデリゲートを使用できます:

this.adminList.Invoke(new Action(() => this.adminList.Items.Add(this.arg2)));
于 2013-11-09T01:29:16.527 に答える