簡體   English   中英

如何為int,double,float等正確編寫Math擴展方法?

[英]How do I properly write Math extension methods for int, double, float, etc.?

我想編寫一系列Extension方法來簡化數學運算。 例如:

代替

Math.Pow(2, 5)

我希望能夠寫作

2.Power(5) 

這是(在我看來)更清楚。

問題是:在編寫擴展方法時如何處理不同的數字類型? 我是否需要為每種類型編寫擴展方法:

public static double Power(this double number, double power) {
    return Math.Pow(number, power);
}
public static double Power(this int number, double power) {
    return Math.Pow(number, power);
}
public static double Power(this float number, double power) {
    return Math.Pow(number, power);
}

或者有一個技巧允許單個擴展方法適用於任何數字類型?

謝謝!

不幸的是,我認為你堅持這三個實現。 從單個定義中獲取多個類型化方法的唯一方法是使用泛型,但是不可能編寫一個通用方法,可以為數字類型做一些有用的事情。

我使用的一個解決方案是在對象上進行擴展。 這使得這成為可能,但不幸的是它將在所有對象上可見。

public static double Power(this object number, double power) 
{
    return Math.Pow((double) number, power);
}

你只需要覆蓋這個問題中提到的Decimal和Double: 這里

我不認為它可能與C#3.0。 看起來你可以做到C#4.0

http://blogs.msdn.com/lucabol/archive/2009/02/05/simulating-inumeric-with-dynamic-in-c-4-0.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM