新手求解。。。C#泛型怎么让两个T类型的变量进行加减乘除运算?

时间:2021-04-27 21:56:11
public class IntValue
{
    public int iBase;
    public int iPlus;
    public int iFinal;
    public void updateValue(string operate,bool percent)
    {
        switch(operate)
        {
            case "+":
                if(!percent)
                    iFinal = iBase + iPlus;
                else
                    iFinal = iBase + iBase * iPlus;
                break;
            case "-":
                if(!percent)
                iFinal = iBase - iPlus;
              else
                iFinal=iBase-iBase*iPlus;
                break;
            default:
                Debug.LogError("operate error!");
                break;
        }
    }
}
我想把三个变量都变成float型的,所以想使用泛型,但是怎么才能让update中的加减运算不出错呢?或者换一个思路?

7 个解决方案

#1


不太明白你要做什么。
如果只是3个变量变成float,直接定义的时候改下咯。
public float iBase;
public float iPlus;
public float iFinal;

float加减应该不会出错吧。

#2


public class IntValue<T>
{
    public T iBase;
    public T iPlus;
    public T iFinal;
}

但是很遗憾的是没法对T的类型做限制,可以用,但是非常见的数值类型,编译的时候可能会出错。

#3


楼主是考虑代码以后的改动,所以用泛型。
我这样想的,直接加where约束——where T:struck(任何值类型都可以用作类型实参)。以后想改动该一下where字句就行。
试试。
PS:刚学U3D

#4


3楼的方法的可以,其实还可以用实例化泛型类试试。

#5


3 楼正解 where 加个约束

#6


 private static T Sum<T>(T num1,T num2) where T : struct
        {
            dynamic v1 = num1;
            dynamic v2 = num2;
            return (T)(v1 + v2);
        }

#7


考虑任意数值类型的累加器的实现,代码如下:

T Sum<T> (params T [] numbers) where T:struct
{
    double total =0;
    foreach (var value in numbers)
        total = total + Double.Parse(value.ToString());
    return (T)Convert.ChangeType(total,typeof(T));
}

因为只对数值类型求和,所以累加器的数据类型设为范围最大的double类型,进一步的还应增加判断T是否是数值类型的部分,以增强代码的健壮性!

#1


不太明白你要做什么。
如果只是3个变量变成float,直接定义的时候改下咯。
public float iBase;
public float iPlus;
public float iFinal;

float加减应该不会出错吧。

#2


public class IntValue<T>
{
    public T iBase;
    public T iPlus;
    public T iFinal;
}

但是很遗憾的是没法对T的类型做限制,可以用,但是非常见的数值类型,编译的时候可能会出错。

#3


楼主是考虑代码以后的改动,所以用泛型。
我这样想的,直接加where约束——where T:struck(任何值类型都可以用作类型实参)。以后想改动该一下where字句就行。
试试。
PS:刚学U3D

#4


3楼的方法的可以,其实还可以用实例化泛型类试试。

#5


3 楼正解 where 加个约束

#6


 private static T Sum<T>(T num1,T num2) where T : struct
        {
            dynamic v1 = num1;
            dynamic v2 = num2;
            return (T)(v1 + v2);
        }

#7


考虑任意数值类型的累加器的实现,代码如下:

T Sum<T> (params T [] numbers) where T:struct
{
    double total =0;
    foreach (var value in numbers)
        total = total + Double.Parse(value.ToString());
    return (T)Convert.ChangeType(total,typeof(T));
}

因为只对数值类型求和,所以累加器的数据类型设为范围最大的double类型,进一步的还应增加判断T是否是数值类型的部分,以增强代码的健壮性!