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