2011-01-12 6 views
1

オーバーロードされたメソッドではいくつかの問題があります。私の署名は次のようになります。私はこのような最初のものを呼び出すようにしようとしているメソッドのオーバーロードと文字列とEventHandlerの間のあいまいさ

void Register(object source, EventHandler mapped_handler) 
void Register(object source, string mapped_property) 

Register(someObject, (s, e) => { ... }); 

のVisual Studio 2008のは私にerror CS1503: Argument '2': cannot convert from 'System.EventHandler' to 'string'を与えています。

私には何が欠けていますか?私は本当に問題がどこにあるのかは分かりません。私は問題なしでEventHandlerラムダを渡すことができる他の非過負荷の方法を持っています。

+0

これは動作するはずです。できるだけ問題を再現するコードをできるだけ削除してください(これらの2つの過負荷には些細な定義が含まれ、 'Main'は' Register(オブジェクト、EventHandler) 'オーバーロードを呼び出す)。私たちができることが分かります。繰り返しますが、あなたがしようとしていることは可能です。 – jason

答えて

0

すべての応答をありがとう...私のメソッドの宣言では問題だったことが判明しました。メソッドシグネチャの最初のパラメータの型が間違って指定されていました。私はこのような質問を、私のような愚かな間違いをする人たちのために残しておきます。

+1

コンパイルに問題が発生した場合は、できるだけコードを削除して問題を再現してください。問題を再現できない場合は、どこかで間違いをしていて、うまくいけばそれを見つけるのに役立ちます(彼女が言ったことです)。 – jason

+0

@Jasonそれは、私が問題を見つけた方法です。提案していただきありがとうございます。 –

0

あなたは実行する必要があります。絶対に問題ないはずです

Register(someObject, new EventHandler((s,e)=>{...})); 
+0

理由は何ですか? –

+1

いいえ、そうではありません。これはうまくいくはずです。 – jason

+0

ジェイソンはそうです。あなたはこれをする必要はありません。私たちに言われたことよりも多くのことが疑問に思えます。 –

2

。短いが完全な例:

using System; 

public class Test 
{ 
    static void Main(string[] args) 
    { 
     object o = new object(); 
     Register(o, (s, e) => {}); 
    } 

    static void Register(object source, EventHandler handler) 
    { 
     Console.WriteLine("Handler"); 
    } 

    static void Register(object source, string text) 
    { 
     Console.WriteLine("Text"); 
    } 
} 

あなたははない作業を行い同様に短いが完全な例であなたの質問を更新することができれば、我々はさらに助けることができるかもしれません。

エラーメッセージが明示的にEventHandlerと話しているという事実は多少疑わしいです。なぜならあなたのタイプ引数EventHandlerではなく、からEventHandlerに変換できるラムダ式です。エラーが電話回線に確実に届いていますか?

+0

C#バージョン間のオーバーロード解決の違いがありますか? –

+0

@Anthony Pegram:いいえ。これは.NET 3.5とVisual Studio 2008では間違いなく可能です。 – jason

+0

@Anthony:私は "Visual C#2008"コンパイラとそれより新しいものを試しました。確かにそれはSP1ですが、ここで違いを生み出すことは期待していません。ラムダ式から文字列への変換はないので、そのメソッドは候補セットの一部であってはいけません。 –

関連する問題