将对象类型拆箱到基元和其他类型(模拟后期绑定)

时间:2009-03-03 19:03:12

标签: c# .net binding

我有一个类,它包含每个基本类型的附加类成员,字符串和INetSerializable:

   public class TypeAppender
   {
         public void Append(int i ) {}
         public void Append(double d) {}
         public void Append(string s){}i){}
         public void Append(INetSerializable ins){}
    }

从另一个班级,我想通过传递对象

将这种方法称为“通常可以这么说”

说我有类似的东西:

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成员函数的问题?

由于

1 个答案:

答案 0 :(得分:1)

没有。

使用代码,它将无法编译,因为没有合适的对象转换 - &gt;非对象类型。您必须手动将代码转换为适当的类型。

一个选项是提供Object类型的Append重载并在那里执行逻辑。

void Append(object obj) {
  if ( obj is int ) {
    Append((int)obj);
  } else if ( obj is double) { 
    Append((double)obj);
  ...
}

编辑问题#2

在正确运行的意义上没有任何错误。但是,它似乎没有为您的应用程序添加任何值,而不是具有带有object参数的非泛型值。

相关问题