将变量作为一种类型传递而不使用反射:' myvar'是一个变量,但使用类型

时间:2016-01-08 16:01:45

标签: c# types casting

我有一个简单的方法,可以将xml字符串反序列化为指定的类型。

public static class TextUtility
{
    public static T Deserialize<T>(string xml)
    {
        ...
    }
}

这一切都很好。我遇到麻烦的地方就是调用这种方法。这个过程如下:

public interface IMessageReceived
{
    string MessageBodyAsXML { get; set; }
    string MessageType { get; set; }
}

public class MessageReceived : IMessageReceived
{...}

List<MessageReceived> messageList = new List<MessageReceived>();

然后,在处理消息的worker类中,我们遍历所有收到的消息。在该循环中,我们循环遍历潜在消息类型列表。

foreach (MessageReceived message in messageList)
{
    foreach (var processor in processors)
    {
        if (processor.TypeToProcess.Name == message.MessageType)
        {
             // Now Create an instance of 'processor' from message.MessageBodyAsXML
        }
    }
}

我试试这个:

object messageObject = TextUtility.DeserializeMessage<object>(message.MessageBodyAsXML);

它有点有效,但通用对象&#39;引起下游问题。我需要更加紧密耦合。我可以这样做:

Type type = processor.GetType();

并且 填充&#39;输入&#39;使用正确的类型。但显然我无法做到这一点:

type messageObject = TextUtility.DeserializeMessage<type>(message.MessageBodyAsXML);

我正在努力避免每种类型的if / then。开放的想法。谢谢!

1 个答案:

答案 0 :(得分:2)

显然,对于您在编译时不知道类型的动态目的,您需要提供Deserialize方法的重载:

public static object Deserialize(Type targetType, string xml)
{
    ...
}