在C#中,为什么使用动态类型允许我在泛型上使用运算符?

前端之家收集整理的这篇文章主要介绍了在C#中,为什么使用动态类型允许我在泛型上使用运算符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在课堂上,我们正在处理泛型,并被要求完成一项任务.

我们创建了一个帐户< 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篇关于动态的文章

At compile time,an element that is typed as dynamic is assumed to support any operation.

猜你在找的C#相关文章