如何在c#中将数据契约类的列表转换为整数数组

本文关键字:列表 转换 数组 整数 契约 数据 | 更新日期: 2023-09-27 18:10:23

我正在尝试将数据合约类的列表转换为c#中的整数数组。当我尝试这样做的时候,我得到了下面的错误:

错误CS0411:方法的类型参数"System.Array.ConvertAll (TInput [],System.Converter)'不能从用法中推断出来。尝试显式指定类型参数。

你能告诉我如何解决这个错误吗?"TopicDetails"是一个包含对象(字符串)的数据契约类

 List<TopicDetails> topicDetails3;
            TopicDetails[] arr = topicDetails3.ToArray();  
            int[] ints = Array.ConvertAll(arr,int.Parse);

//topicDetails is a data-contract
CreateSubscriptions<List<TopicDetails>(topicDetails);
//Here TopicDetails is a class (data contract) as follows.
public class TopicDetails
{
    protected object baseObjectType;  //string
    protected object topic;            //string
    public TopicDetails();
    [DataMember]
    public object BaseObjectType { get; set; }
    [DataMember]
    public object TopicID { get; set; }
    public static TopicDetails CreateTopic<T, mT>(IComparable<T> objectType, IComparable<mT> objectID);
}

如何在c#中将数据契约类的列表转换为整数数组

很明显这段代码是错误的。您不能像下面这样将TopicDetails数组强制转换为int数组:

TopicDetails[] arr = topicDetails3.ToArray();  
int[] ints = Array.ConvertAll(arr,int.Parse);

我不确定,但我猜你想要所有TopicDetails的Ids。您不能使用int.Parse,因为它只接受字符串。您需要静态类System.Convert

TopicDetails[] arr = topicDetails3.ToArray();  
int[] ints = Array.ConvertAll(arr.Select(t => t.TopicID).ToArray(), System.Convert.ToInt32);

似乎下面的代码在回答我的问题。请您看一下。

            int[] data;
            var obj = topicDetails;// topicDetails= new List<TopicDetails> { };// List of DataContracts{ BaseObjectType = ":EQUIPMENT", TopicID = "42" };
            var serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(List<TopicDetails>));
            using (var stream = new System.IO.MemoryStream())
            {
                serializer.WriteObject(stream, obj);
                data = new int[stream.Length];
                stream.Position = 0;
                for (int i = 0; i < data.Length; i++)
                    data[i] = stream.ReadByte();
            }