繁体   English   中英

如何在 C# 中将数据协定类列表转换为整数数组

[英]How to convert a list of data contract class to an integer array in C#

我正在尝试将 DataContract 类的列表转换为 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);
}

很明显,代码是错误的。 您不能像这样将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();
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM