私は、同様の署名(ChooseChamferとChooseFillet)を持つ2つのメソッドを持っています。これらのメソッドは、if ... elseという拡張構造を持っています。 (私は単純化されたバージョンを持っていました)メソッドが呼び出されます(CreateChamferとCreateFillet)。どのようにして単一のメソッドでリファクタリングコードを作成できますか?2つのメソッドをどのようにリファクタリングするのですか?
private void ChooseChamfer(string featureType, double diameter, double distance, string str1, string str2)
{
if (featureType.Contains("F"))
{
CreateChamfer(diameter,
distance,
-double.Parse(str1, System.Globalization.CultureInfo.InvariantCulture),
double.Parse(str2, System.Globalization.CultureInfo.InvariantCulture));
}
else if (featureType.Contains("L"))
{
CreateChamfer(diameter,
distance,
double.Parse(str1, System.Globalization.CultureInfo.InvariantCulture),
-double.Parse(str2, System.Globalization.CultureInfo.InvariantCulture));
}
}
private void ChooseFillet(string featureType, double diameter, double distance, string str1)
{
if (featureType.Contains("F"))
{
CreateFillet(diameter,
distance,
-double.Parse(str1, System.Globalization.CultureInfo.InvariantCulture));
}
else if (featureType.Contains("L"))
{
CreateFillet(diameter,
distance,
double.Parse(str1, System.Globalization.CultureInfo.InvariantCulture));
}
}
private void CreateChamfer(double diameter, double distance, double str1, double str2)
{
//Draw Chamfer
}
private void CreateFillet(double diameter, double distance, double str1)
{
//Draw Fillet
}
ありがとうございます。
この種の質問には[http://codereview.stackexchange.com/](http://codereview.stackexchange.com/)が良い場所だと思います。 – Fabio
あなたは反射( 'MethodInfo')で作業することができましたが実行時の例外が発生する可能性があります。または、intを逆のメソッドに分割します。 – NtFreX
'Chamfer'と' Fillet'は基本クラスを共有していますか?そうすれば、制約のあるジェネリックスは物事を少し単純化するかもしれません。また、 'featureType'のif-elseチェックの大集合を持っていれば、呼び出されるメソッドの値を' Dictionary'にリファクタリングすることができます。 – KMoussa