第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#中泛型類的算術運算符重載

C#中泛型類的算術運算符重載

C#
富國滬深 2019-08-08 16:55:49
C#中泛型類的算術運算符重載給出類似的泛型類定義public class ConstrainedNumber<T> :     IEquatable<ConstrainedNumber<T>>,     IEquatable<T>,     IComparable<ConstrainedNumber<T>>,     IComparable<T>,     IComparable where T:struct, IComparable, IComparable<T>, IEquatable<T>如何為它定義算術運算符?以下內(nèi)容無法編譯,因為'+'運算符不能應用于類型'T'和'T':public static T operator +( ConstrainedNumber<T> x, ConstrainedNumber<T> y){     return x._value + y._value;}正如您所見,泛型類型'T'受'where'關鍵字約束,但我需要對具有算術運算符的數(shù)字類型(IArithmetic?)進行約束。'T'將是一個原始數(shù)字類型,如int,float等。這些類型是否存在'where'約束?
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經(jīng)驗 獲得超4個贊

我認為你能做的最好的事情是IConvertible用作約束并做類似的事情:

 public static operator T +(T x, T y)
    where T: IConvertible{
    var type = typeof(T);
    if (type == typeof(String) ||
        type == typeof(DateTime)) throw new ArgumentException(String.Format("The type {0} is not supported", type.FullName), "T");

    try { return (T)(Object)(x.ToDouble(NumberFormatInfo.CurrentInfo) + y.ToDouble(NumberFormatInfo.CurrentInfo)); }
    catch(Exception ex) { throw new ApplicationException("The operation failed.", ex); }}

這不會阻止某人傳遞String或DateTime,所以你可能想要做一些手動檢查 - 但IConvertible應該讓你足夠接近,并允許你進行操作。


查看完整回答
反對 回復 2019-08-08
?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

遺憾的是,沒有辦法將泛型參數(shù)約束為整數(shù)類型(編輯:我猜“算術類型”可能是一個更好的詞,因為這不僅僅與整數(shù)有關)。

能夠做這樣的事情會很高興:

where T : integral // or "arithmetical" depending on how pedantic you are

要么

where T : IArithmetic

我建議您通過我們自己的Marc Gravell和Jon Skeet 閱讀Generic Operators。它解釋了為什么這是一個如此困難的問題,以及可以采取哪些措施來解決它。

.NET 2.0在.NET世界中引入了泛型,為現(xiàn)有問題的許多優(yōu)雅解決方案打開了大門。通用約束可用于將類型參數(shù)限制為已知接口等,以確保對功能的訪問 - 或者對于簡單的相等/不等性測試,Comparer.Default和EqualityComparer.Default單例分別實現(xiàn)IComparer和IEqualityComparer(允許我們對元素進行排序)例如,無需了解有關“T”的任何信息。

盡管如此,在運營商方面仍存在很大差距。因為運算符被聲明為靜態(tài)方法,所以沒有所有數(shù)值類型實現(xiàn)的IMath或類似的等效接口; 事實上,運營商的靈活性會使這項工作變得非常困難。更糟糕的是:原始類型的許多運算符甚至不作為運算符存在; 相反,有直接的IL方法。[強調(diào)我的]為了使情況更加復雜,Nullable <>要求“提升運算符”的概念,其中內(nèi)部“T”描述適用于可空類型的運算符 - 但這是作為語言特征實現(xiàn)的,并且是不是由運行時提供的(使反射更有趣)。


查看完整回答
反對 回復 2019-08-08
  • 3 回答
  • 0 關注
  • 1177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號