2017-09-30 8 views
1

私はAngular/Typescriptプロジェクトで作業しています。私は軽量pubsubとして構築している次の構成を持っています。これは流暢な構文でのサブスクリプションです。typescript、代理人、太い矢印などのようにC#を作る

SubscribeEvent.Create(PubSubTopic.testEvent, 
     this.objectId) 
     .HandleEventWithThisMethod((PubSubEventArgs) => 
      {self.handlePEvent(PubSubEventArgs); }) 
     .ApplyFilterPredicate((res: PubSubEventArgs) => { 
      return (res.sourceObjectId === self.objectId); 
     }); 

簡略化したい部分は、HandleEventWithThisメソッドです。 C#であれば、HandleEventWithThisMethod(handlePEvent)

私は太い矢のものを取り除くと、私はhandlePEventでこのトラックを失います。

.HandleEventWithThisMethodの構文を簡略化する方法を教えてもらえますか?

答えて

3

余分な角括弧があり、必要がないようです。あなたはこのように簡素化することができます:あなたが直接self.handlePEventを渡すことはできません

SubscribeEvent 
    .Create(PubSubTopic.testEvent, this.objectId) 
    .HandleEventWithThisMethod(args => self.handlePEvent(args)) 
    .ApplyFilterPredicate(res => res.sourceObjectId === self.objectId); 

または

SubscribeEvent 
    .Create(PubSubTopic.testEvent, this.objectId) 
    .HandleEventWithThisMethod(self.handlePEvent.bind(self)) 
    .ApplyFilterPredicate(res => res.sourceObjectId === self.objectId); 

関数は、本質的にオブジェクトに関連付けられていないということです。関数リファレンスを渡してから関数を呼び出すと、デフォルトでthisはオブジェクトにはなりませんが、Windowになります。

bindを呼び出して、関数をオブジェクトに強制的にバインドすることができます(self.handlePEvent.bind(self))。

+1

良い答え。明確な応答を感謝します。 – jeff

関連する問題