[英]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.