VS 2010和.NET 4.0可以支持此功能吗?

问题描述

| 我在设计应用程序时遇到问题。我有一个带有方法的Web服务。方法将返回加密的二进制数据。解密后的数据是对象列表。对象可以是Object1,Object2或Object3,这取决于所调用方法。 我只想编写一个函数,该函数返回要依赖于被调用方法的对象列表。例:
public static List<TKey> Generate(DataType type)
        {
            List<TKey> l = new List<TKey>();
            switch (type)
            {
                case DataType.String:
                    byte[] data = Decrypt(MyWebService.GetData1());
                    l = (List<TKey>)data;

                case DataType.Int:
                    byte[] data = Decrypt(MyWebService.GetData1());
                    l = (List<TKey>)data;
            }
            return l;
        }
注意:构建时此函数错误。我提供此功能,以便您了解我的目的。 我的目的在这里
List<string> myString = Generate(DataType.String);
List<int> myInt = Generate(DataType.Int);
谢谢。     

解决方法

        您最有可能在寻找通用方法:
public static List<T> Generate<T>()
{
   byte[] data = Decrypt(MyWebService.GetData1());
   List<T> l = Deserialize<T>(data);   
   return l;
}
您还需要一种特定于类型的反序列化方法(在示例中为ѭ3which),该方法将完成将任意字节数组转换为特定类型的列表的实际工作-因为这完全取决于映射的工作方式(框架无法真正知道),则您必须自己实现它。     ,        您将要使用模板化的函数,以便您可以传递想要用于集合的类型。我建议先将对象反序列化为
List<Object>
集合,然后调用
ConvertAll()
将其显式转换为所需的类型。这里有一对
MemoryStream
和ѭ7includes。 “ 7”将把字节数组反序列化为一个对象,必须将其显式转换为所需的类型。我认为它总是从对象列表开始。在这里,我使用一个委托将每个对象显式转换为通过参数“ 9”传递的类型。
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

public List<TKey> Generate<TKey>()
{
    byte[] theData = MyWebService.GetData1();
    List<Object> theList = (List<Object>)new BinaryFormatter().Deserialize(new MemoryStream(theData));

    return theList.ConvertAll(i => (TKey) i);
}
样品用量
List<string> theStringList = Generate<string>();
List<int> theIntList = Generate<int>();