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);
谢谢。
您很可能正在寻找一种通用方法:
public static List<T> Generate<T>()
{
byte[] data = Decrypt(MyWebService.GetData1());
List<T> l = Deserialize<T>(data);
return l;
}
您还需要一个特定于类型的反序列化方法(示例中为Deserialize
),该方法将完成将任意字节数组转换为特定类型列表的实际工作,因为映射应该如何工作完全取决于您(框架实际上不知道),您必须自己实现它。
您需要使用一个模板化函数,以便可以为集合传递所需的类型。我建议首先将对象反序列化为List<Object>
集合,然后调用ConvertAll()
将它们显式转换为您想要的类型。对于MemoryStream
和BinaryFormatter
,这里存在一对包含。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>();