我試圖找出當它的類型本身是未知的時候支持拆箱整型(short/int/long)到其內在類型的語法。拆箱到未知類型
下面是一個說明的概念的完全人爲的例子:
// Just a simple container that returns values as objects
struct DataStruct
{
public short ShortVale;
public int IntValue;
public long LongValue;
public object GetBoxedShortValue() { return ShortVale; }
public object GetBoxedIntValue() { return IntValue; }
public object GetBoxedLongValue() { return LongValue; }
}
static void Main(string[] args)
{
DataStruct data;
// Initialize data - any value will do
data.LongValue = data.IntValue = data.ShortVale = 42;
DataStruct newData;
// This works if you know the type you are expecting!
newData.ShortVale = (short)data.GetBoxedShortValue();
newData.IntValue = (int)data.GetBoxedIntValue();
newData.LongValue = (long)data.GetBoxedLongValue();
// But what about when you don't know?
newData.ShortVale = data.GetBoxedShortValue(); // error
newData.IntValue = data.GetBoxedIntValue(); // error
newData.LongValue = data.GetBoxedLongValue(); // error
}
在每種情況下,積分的類型是一致的,所以應該有某種形式的句法,說:「該對象包含一個簡單的類型的X,返回X(即使我不知道X是什麼)「。因爲對象最終來自同一個來源,所以實際上不會有不匹配(short!= long)。
我爲這個人爲的例子表示歉意,它似乎是展示語法的最好方式。
謝謝。
所有的你'GetBoxed'方法返回'LongValue'。錯字? – unholysampler 2010-05-19 20:21:22
你是什麼意思「不可能有不匹配」?如果你知道這個類型,那麼就不會有;如果你不這樣做,那麼可以。 – 2010-05-19 20:21:49
你想如何使用拆箱的結果?如果拆箱後你不知道這種類型,那麼你就無法做任何事情(除了猜測和使用'dynamic')。如果您在拆箱後知道該類型,請將其取消裝箱。在你的榜樣,你知道newData.IntValue只能與一個int被分配,讓你_have_做'newData.IntValue =(int)的yourUnknownBoxedValue;'。如果這樣做失敗,則不能將其分配給newData.IntValue。如果它沒有失敗,那麼你很好。 所以我說的是真的:你應該想出一個沒有人爲的例子,因爲這沒有意義。 – Joren 2010-05-19 20:39:50