2017-06-05 12 views
0

私は、次のしている:オプションのパラメータでデリゲートを呼び出す方法は?

var availableDelegates = new Dictionary<string, SampleHandler>{ 
    {"TestWithNoParams", SampleHandlerOne }, // this is what I have now - working 
    {"TestWithParamSetA", SampleHandlerTwo } // need this 
    {"TestWithNoParams", SampleHandlerTwo } // and this - working 
} 

public static SampleHandler SampleHandlerOne(){ 
    // do stuff - working 
} 

// v1 
public static SampleHandler SampleHandlerTwo(){ 
    // do stuff without parameters - working 
} 

// v2 
public static SampleHandler SampleHandlerTwo(HandlerTwoParams params = null) { // trying to update to support optional params 
    // do stuff with parameters - not working 
    // params.Foo = bar 
} 

私がデリゲートにオプションのパラメータを渡すことができますどのように?アイデアは、私にできることを次のようになります。

if (someCondition) 
    availableDelegates[target].Invoke(optionalParams); 
else 
    availableDelegates[target].Invoke(); 
+0

SampleHandlerはオプションパラメータを持っていません。だからこれはうまくいかない。 –

+0

@HansPassant - そのため、コードに 'v1'と' v2'があります。 – SB2055

答えて

0

あなたはInvokeメソッドを経由してパラメータを渡し、あなたのデリゲートメソッドのオプションパラメータで探している正確に何を達成することができます。この前の回答は、これがどのように行われるかを示しています。Can a Delegate have an optional parameter?

関連する問題