如何解决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>();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。