簡體   English   中英

使方法接受多個不同類型的數字參數

[英]Make a method accept multiple numeric parameters of different type

基本上我有一個特定的方法,它使用double和int值來找出我要設置的CSS類。 我在不同的地方做同樣的事情,但是那里有int + int。

這就產生了一個問題,即是否有一種解決所有問題的好方法。

重載本來可以做到的,但是我不希望所有數字的變化都不要重載。

所以我想我可以看看是否有一些特定的接口類型可以用作通用類型約束-但我沒有找到一個(因為任何東西都可以實現IConvertible?)

int32反編譯的結果:

#if GENERICS_WORK
public struct Int32 : IComparable, IFormattable, IConvertible
    , IComparable<Int32>, IEquatable<Int32>
/// , IArithmetic<Int32>
#else
public struct Int32 : IComparable, IFormattable, IConvertible
#endif

不,沒有數字界面。

這就是我想出的-效果很好,但也可以接受潛在的非數字對象的調用。 關於如何使方法更具限制性的任何建議?

    public static string GetThresholdColorClass(IConvertible desiredThreshold, IConvertible actualProgress)
    {
        var actual = actualProgress.ToDouble(CultureInfo.InvariantCulture);
        var desired = desiredThreshold.ToDouble(CultureInfo.InvariantCulture);
        if (actual >= desired)
            return "green";
        if (actual <= 0)
            return "red";
        return "yellow";
    }

可悲的是沒有任何東西(例如,請參見是否存在將我的通用方法限制為數字類型的約束? )。 您不能創建一個需要“數字”作為參數的泛型類。

您可以做的是僅創建方法的double變體(從intdouble的隱式轉換,並且double可以包含所有int值)

從技術上講,Gravell編寫了一些使用通用類型進行數學運算的函數...參見https://jonskeet.uk/csharp/miscutil/usage/genericoperators.html ,但它們有點“ hack” ey :-)

暫無
暫無

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

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