2

outパラメータを持つデリゲートとイベントがあります:

パブリックデリゲートvoidExampleDelegate(object sender、EventArgs e、out string value);

パブリックイベントExampleDelegateExample;

イベントを処理しようとしているとき:

 mg.Example += (sender, e, val) =>
 {
    //do stuff
 };

エラーが発生しますパラメータ3は「out」キーワードで宣言する必要があります

私が次のように提案されたキーワードを投げているとき:

 mg.Example += (sender, e, out val) =>
 {
    //do stuff
 };

名前空間名' val 'のタイプが見つかりませんでした。

私は何が間違っているのですか?

4

2 に答える 2

4

さて、ここで明確に述べられているように、次のタイプを指定する必要がありますval

(sender, e, out string val)=> ...
于 2012-07-17T12:32:43.807 に答える
2

イベント ハンドラーが .net ガイドラインに準拠していません。

そのように使用する必要がある場合は、イベントではなくデリゲートを使用してください。

out パラメーターを変更する 2 つのイベント ハンドラーがあると、問題が発生します。

参照:イベント チュートリアル

.NET フレームワークのガイドライン

C# 言語では、イベントで任意のデリゲート型を使用できますが、.NET Framework には、イベントに使用する必要があるデリゲート型に関するより厳密なガイドラインがあります。コンポーネントを .NET Framework で使用する場合は、おそらく次のガイドラインに従う必要があります。

.NET Framework のガイドラインでは、イベントに使用されるデリゲート型は、イベントのソースを示す "オブジェクト ソース" パラメーターと、イベントに関する追加情報をカプセル化する "e" パラメーターの 2 つのパラメーターを取る必要があることを示しています。「e」パラメーターの型は、EventArgs クラスから派生する必要があります。追加情報を使用しないイベントの場合、.NET Framework は適切なデリゲート型 EventHandler を既に定義しています。

zmbq は、エラーを修正する方法について既に回答を提供しています。

完全を期すためにこれを追加しています。

于 2012-07-17T12:40:44.723 に答える