2017-01-16 5 views
0

もっと一般的な方法を作成するにはどうすればよいですか?あなたは上から見ることができるように、唯一このセクションでは、メソッドにメソッドから変更されますメソッドの先頭と最後を再利用可能にする方法はありますか?

 public ServiceAppointment UpdateService(Guid serviceGuid, Guid serviceActivityGuid) 
     { 
//this is repeated in 20 methods 
      var serviceAppointment = organizationService.Retrieve(
       "serviceappointment", 
       serviceActivityGuid, 
       new ColumnSet(true)); 
//end 
//Only the section here will vary 
      serviceAppointment["serviceid"] = new EntityReference("service", serviceGuid); 
//End 

//this is repeated in 20 methods 
      organizationService.Update(serviceAppointment); 

      return GetServiceActivity(serviceActivityGuid); 
//end 
     } 

::私はメソッドを持っている

serviceAppointment["serviceid"] = new EntityReference("service", serviceGuid); 

を作成することは可能です上記のメソッドの開始と終了を実行し、変更する行をパラメータとして受け入れるメソッド?

+0

入れコード必要に応じて。 –

+1

@Romaこれはうまくいきません。 2つのメソッドは、コードの2つのスニペット間で共有される状態を持ち、それらは高度に結合されています。彼らはいつも一緒に呼び出される必要があり、特定の操作がそれらの間で起こり、別々には行われません。彼らは実際には別個の方法としては機能しません。 – Servy

答えて

4

あなたは違いを注入するために、デリゲートを使用することができます。

これを呼び出す
public ServiceAppointment UpdateService(Guid serviceGuid, Guid serviceActivityGuid, Action<Entity> action) 
{ 
    var serviceAppointment = organizationService.Retrieve(
      "serviceappointment", 
      serviceActivityGuid, 
      new ColumnSet(true)); 

    action(serviceAppointment); 

    organizationService.Update(serviceAppointment); 

    return GetServiceActivity(serviceActivityGuid); 
} 

は次のようになります。一つの方法では、別で終わりで始まり、それらのメソッドを呼び出すことで

UpdateService(serviceGuid, serviceActivityGuid, 
    e => e["serviceid"] = new EntityReference("service", serviceGuid)); 
+0

https://drive.google.com/uc?id=0B47fuJY78GQhcmhQSUpIXzFCUDQ –

+0

あなたのコードから、OrganizationService.Retrieveが返したものを判断できませんでした(変数命名のために誤ってServiceAppointmentが想定されました)。 OrganizationService.Retrieve(Entity?)によって返される型を取り除き、アクションパラメータをその値に変更します(たとえば、アクションアクション)。 – Eric

1

委任者とは、パラメーターとして実行するコードを受け入れるメソッドを持つ方法です。あなたの場合は、serviceAppointmentをパラメータとして受け入れ、が受け入れる方法、つまりAction<ServiceAppointment>のように出力を提供しないメソッドが必要です。呼び出し元は、そのサービス予定の適切な値を設定する(おそらく匿名の)メソッドを提供することができます。

+0

匿名メソッドを作成する方法を教えていただけますか? –

+0

@MeggieLuski [ドキュメントで検索できます](https://msdn.microsoft.com/en-us/library/bb882516.aspx)。 – Servy

関連する問題