Unboxing um tipo de objecto a uma primitiva e outros tipos (simulando a ligação tardia)
Pergunta
Eu tenho uma classe que contém Append-like membros para cada tipo primitivo, corda e 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){}
}
A partir de uma classe diferente, quero chamar esse método "genericamente por assim dizer", passando objeto
dizer que tenho algo assim:
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);
}
}
Pergunta # 1: Will pair.Value ser unboxed a uma primitiva correto? s
Pergunta # 2:? Qualquer problesm com função membro AddParam
Graças
Solução
No.
Com o código como está, ele vai deixar de compilar porque não há nenhuma conversão adequada do objeto -> não-objeto tipo. Você terá que converter manualmente o código para o tipo apropriado.
Uma opção é fornecer uma sobrecarga de Append do tipo Object e fazer a lógica lá.
void Append(object obj) {
if ( obj is int ) {
Append((int)obj);
} else if ( obj is double) {
Append((double)obj);
...
}
Editar Pergunta nº 2
Não há nada de errado no sentido de que ele funcionará corretamente. No entanto, não parecem acrescentar qualquer valor para a sua aplicação sobre ter um não-genéricos que leva um parâmetro de objeto.