[英]Unboxing an Object type to a primitive and other types (simulating late-binding)
我有一個類,其中包含每種基本類型,字符串和INetSerializable的類似於Append的成員:
public class TypeAppender
{
public void Append(int i ) {}
public void Append(double d) {}
public void Append(string s){}i){}
public void Append(INetSerializable ins){}
}
在另一個類中,我想通過傳遞Object來稱呼此方法為“一般來說”
說我有這樣的事情:
class SomeClientClass
{
TypeAppender _appender=new TypeAppender ();
Dictionary<string, Object> _cmdTable =new Dictionary<string, Object>();
public void Process()
{
foreach(KeyValuePair<string, Object> pair in cmdTable )
{
_appender.Append(pair.Key);
Object obj = pair.Value;
if (obj is int)
_appender..Append((int)obj);
else if (obj is double)
_appender..Append((double)obj);
else if (obj is char)
_appender..Append((char)obj);
else if (obj is string)
_appender..Append((string)obj);
}
}
public void AddParam<T>(string key, T value)
{
_cmdTable.Add(key, value);
}
}
問題1: pair.Value是否會取消裝箱到正確的原語? s
問題2: AddParam成員函數是否存在任何問題 ?
謝謝
沒有。
照原樣使用代碼,因為沒有從object-> non-object type進行的適當轉換,它將無法編譯。 您將必須手動將代碼轉換為適當的類型。
一種選擇是提供Object類型的Append的重載並在那里執行邏輯。
void Append(object obj) {
if ( obj is int ) {
Append((int)obj);
} else if ( obj is double) {
Append((double)obj);
...
}
編輯問題2
就可以正常運行而言,這沒有什么錯。 但是,它似乎並沒有為您的應用程序增加任何值,而是擁有一個采用對象參數的非泛型值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.