{
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加减应该不会出错吧。
如果只是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的类型做限制,可以用,但是非常见的数值类型,编译的时候可能会出错。
{
public T iBase;
public T iPlus;
public T iFinal;
}
但是很遗憾的是没法对T的类型做限制,可以用,但是非常见的数值类型,编译的时候可能会出错。
#3
楼主是考虑代码以后的改动,所以用泛型。
我这样想的,直接加where约束——where T:struck(任何值类型都可以用作类型实参)。以后想改动该一下where字句就行。
试试。
PS:刚学U3D
我这样想的,直接加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
考虑任意数值类型的累加器的实现,代码如下:
因为只对数值类型求和,所以累加器的数据类型设为范围最大的double类型,进一步的还应增加判断T是否是数值类型的部分,以增强代码的健壮性!
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加减应该不会出错吧。
如果只是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的类型做限制,可以用,但是非常见的数值类型,编译的时候可能会出错。
{
public T iBase;
public T iPlus;
public T iFinal;
}
但是很遗憾的是没法对T的类型做限制,可以用,但是非常见的数值类型,编译的时候可能会出错。
#3
楼主是考虑代码以后的改动,所以用泛型。
我这样想的,直接加where约束——where T:struck(任何值类型都可以用作类型实参)。以后想改动该一下where字句就行。
试试。
PS:刚学U3D
我这样想的,直接加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
考虑任意数值类型的累加器的实现,代码如下:
因为只对数值类型求和,所以累加器的数据类型设为范围最大的double类型,进一步的还应增加判断T是否是数值类型的部分,以增强代码的健壮性!
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是否是数值类型的部分,以增强代码的健壮性!