1

これを行う方法はありますか:

protected void SubscribeToEvent<TEvent, TPayload>(Action<TPayload> a_action)
    where TEvent : CompositePresentationEvent<TPayload>
{
    TEvent newEvent = _eventAggregator.GetEvent<TEvent>();
    SubscriptionToken eventToken = newEvent.Subscribe(a_action);

    _lstEventSubscriptions.Add(new KeyValuePair<EventBase, SubscriptionToken>(newEvent, eventToken));
}

ユーザーがTPayloadパラメーターを指定する必要はありませんか?

4

2 に答える 2

2

いいえ、ありません。C# 4 にはありません。単一のメソッドでそれを行うことはできません。

TEventメソッドに渡された引数から推論することはできません。また、部分的な推論はジェネリック型引数には使用できないため、呼び出しサイトで型引数を手動で指定する必要があります。

于 2010-12-29T18:10:51.787 に答える
0

信じられないかもしれませんが、VB.NETには、拡張メソッド用にこのようなものがあります。

次の拡張メソッドがあるとします。

<Extension()>
Function Append(Of TInferred, T)(ByVal source As IEnumerable(Of TInferred)) As Object()
    Dim items As List(Of Object) = source.Cast(Of Object).ToList()

    Dim value As T = Nothing ' equivalent to default(T) '
    items.Add(value)

    Return items.ToArray()
End Function

次に、このメソッドを実際に呼び出して、単一の型パラメーターを渡すTだけで、次のTInferredように推測できます。

Dim strings = New String() {"A", "B", "C"}

' Notice I am passing only one type argument. '
Dim objects = strings.Append(Of Integer)()

For Each obj As Object In objects
    Console.WriteLine(obj)
Next

出力:

A
B
C
0

悲しいことに、Mehrdadが示しているように、これはC#では不可能です。

于 2010-12-29T19:45:01.067 に答える