[英]How to turn these 3 methods into one using C# generics?
我沒有使用泛型,因此無法弄清楚是否可以使用泛型將以下三種方法合並為一種以減少重復。 實際上我的代碼目前有六種方法,但是如果你可以解決這三種方法,那么剩下的應該只使用相同的解決方案。
private object EvaluateUInt64(UInt64 x, UInt64 y)
{
switch (Operation)
{
case BinaryOp.Add:
return x + y;
case BinaryOp.Subtract:
return x - y;
case BinaryOp.Multiply:
return x * y;
case BinaryOp.Divide:
return x / y;
case BinaryOp.Remainder:
return x % y;
default:
throw new ApplicationException("error");
}
}
private object EvaluateFloat(float x, float y)
{
switch(Operation)
{
case BinaryOp.Add:
return x + y;
case BinaryOp.Subtract:
return x - y;
case BinaryOp.Multiply:
return x * y;
case BinaryOp.Divide:
return x / y;
case BinaryOp.Remainder:
return x % y;
default:
throw new ApplicationException("error");
}
}
private object EvaluateDouble(double x, double y)
{
switch (Operation)
{
case BinaryOp.Add:
return x + y;
case BinaryOp.Subtract:
return x - y;
case BinaryOp.Multiply:
return x * y;
case BinaryOp.Divide:
return x / y;
case BinaryOp.Remainder:
return x % y;
default:
throw new ApplicationException("error");
}
}
我正在構建一個簡單的表達式解析器,然后需要評估簡單的二進制操作,如加法/減法等。我使用上面的方法來獲得使用相關類型執行的實際數學。 但必須有一個更好的答案!
Marc Gravell在使通用數學成為可行方面做了大量工作。 請參閱MiscUtil和有關該問題的一般文章 。
由於使用了表達式樹,當前版本的MiscUtil中的代碼需要.NET 3.5。 但是,我相信Marc也有一個適用於.NET 2.0的版本。 如果這對人們有用,我確信我們可以以某種方式合並它(可能在MiscUtil本身中有一個外觀,它將在運行時使用基於框架版本的適當實現)。
對於未來,我希望看到靜態接口 ,它可以提供一種使用泛型數學類型的替代方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.