在C#中,为什么使用动态类型允许我在泛型上使用运算符?
发布时间:2020-12-15 08:40:30 所属栏目:百科 来源:网络整理
导读:在课堂上,我们正在处理泛型,并被要求完成一项任务. 我们创建了一个帐户 T具有一个属性私有T _balance的类;然后不得不写信贷和借记_balance的方法. 从Main调用的信用方法(部分)例如acc1.Credit(4.6);: public void Credit(T credit) { Object creditObject =
在课堂上,我们正在处理泛型,并被要求完成一项任务.
我们创建了一个帐户< T>具有一个属性私有T _balance的类;然后不得不写信贷和借记_balance的方法. 从Main调用的信用方法(部分)例如acc1.Credit(4.6);: public void Credit(T credit) { Object creditObject = credit; Object balanceObject = _balance; Type creditType = creditObject.GetType(); Type balanceType = balanceObject.GetType(); if(creditType.Equals(balanceType)) { if(creditType.Equals(typeof (double))) { balanceObject= (double)balanceObject + (double)creditObject; } ...WITH more else if's on int,float and decimal. } _balance = (T)balanceObject; } 我不得不条件检查和施放,因为我不能_balance =(T)balanceObject;因为这会给出错误“运算符”不能应用于’T’类型的操作数” 在我阅读这个主题的过程中,我发现了动态类型.在我的新Account类中,我添加了一个新方法并将Credit方法更改为:(从Main调用例如acc1.Credit(4.6);) public void Credit(dynamic credit) { _balance += ConvertType(credit); } public T ConvertType(object input) { return (T)Convert.ChangeType(input,typeof(T)); } 这是我不明白的. credit方法将对象作为dynamic类型,ConvertType(对象输入)将其作为类型T返回. 解决方法
使用动态类型时,分辨率将延迟到运行时.如果在运行时,泛型类型支持运算符,则代码将起作用.如果没有,它将抛出异常.
从MSDN篇关于动态的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |