微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。