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中的加減運算不出錯呢?或者換一個思路?
uj5u.com熱心網友回復:
不太明白你要做什么。如果只是3個變數變成float,直接定義的時候改下咯。
public float iBase;
public float iPlus;
public float iFinal;
float加減應該不會出錯吧。
uj5u.com熱心網友回復:
public class IntValue<T>{
public T iBase;
public T iPlus;
public T iFinal;
}
但是很遺憾的是沒法對T的型別做限制,可以用,但是非常見的數值型別,編譯的時候可能會出錯。
uj5u.com熱心網友回復:
樓主是考慮代碼以后的改動,所以用泛型。我這樣想的,直接加where約束——where T:struck(任何值型別都可以用作型別實參)。以后想改動該一下where字句就行。
試試。
PS:剛學U3D
uj5u.com熱心網友回復:
3樓的方法的可以,其實還可以用實體化泛型類試試。uj5u.com熱心網友回復:
3 樓正解 where 加個約束uj5u.com熱心網友回復:
private static T Sum<T>(T num1,T num2) where T : struct
{
dynamic v1 = num1;
dynamic v2 = num2;
return (T)(v1 + v2);
}
uj5u.com熱心網友回復:
考慮任意數值型別的累加器的實作,代碼如下:
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是否是數值型別的部分,以增強代碼的健壯性!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/53373.html
標籤:Unity3D
上一篇:CF1285D Dr. Evil Underscores (分治 + 二進制)
下一篇:天空盒,怎么會是白茫茫的一片
