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

本文关键字:支持 功能 2010 NET VS | 更新日期: 2023-09-27 17:59:06

我在设计应用程序时遇到了一个问题。我有一个带方法的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);

谢谢。

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

您很可能正在寻找一种通用方法:

public static List<T> Generate<T>()
{
   byte[] data = Decrypt(MyWebService.GetData1());
   List<T> l = Deserialize<T>(data);   
   return l;
}

您还需要一个特定于类型的反序列化方法(示例中为Deserialize),该方法将完成将任意字节数组转换为特定类型列表的实际工作,因为映射应该如何工作完全取决于您(框架实际上不知道),您必须自己实现它。

您需要使用一个模板化函数,以便可以为集合传递所需的类型。我建议首先将对象反序列化为List<Object>集合,然后调用ConvertAll()将它们显式转换为您想要的类型。对于MemoryStreamBinaryFormatter,这里存在一对包含。BinaryFormatter将把字节数组反序列化为一个对象,该对象必须显式转换为所需的类型。我认为它总是以对象列表开始。从那里,我使用委托将每个对象显式转换为通过参数TKey传入的类型。

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>();