C# 屈服于IList返回类型
我必须实现一个序列化/反序列化类,并使用C# 屈服于IList返回类型,c#,ienumerable,yield,ilist,C#,Ienumerable,Yield,Ilist,我必须实现一个序列化/反序列化类,并使用System.Xml.Serialization。我有一些IList类型属性,希望在IList中序列化,用特定的区域性信息解码属于列表的所有十进制值。例如,10是带有意大利文化信息的10,00,但带有英语文化信息的10.00。 我试着用这个: public IList<string> method() { for (int i = 0; i < 1000; i++) { yi
System.Xml.Serialization
。我有一些IList
类型属性,希望在IList
中序列化,用特定的区域性信息解码属于列表的所有十进制值。例如,10
是带有意大利文化信息的10,00
,但带有英语文化信息的10.00
。
我试着用这个:
public IList<string> method()
{
for (int i = 0; i < 1000; i++)
{
yield return i.ToString();
}
}
public IList方法()
{
对于(int i=0;i<1000;i++)
{
收益率收益率i.ToString();
}
}
但我得到了编译时错误33
The body of 'Class1.method()' cannot be an iterator block because 'System.Collections.Generic.IList<string>' is not an iterator interface type
Class1.method()的主体不能是迭代器块,因为“System.Collections.Generic.IList”不是迭代器接口类型
如果我使用as属性类型IEnumerable
,它可以成功地工作,但显然我无法更改要序列化的数据类型
感谢您的帮助
yield
仅适用于IEnumerable
、IEnumerable
、IEnumerator
和IEnumerator
作为返回类型。在您的情况下,您需要使用普通方法:
public IList<string> method()
{
var result = new List<string>();
for (int i = 0; i < 1000; i++)
{
result.Add(i.ToString());
}
return result;
}
这没有多大意义,是吗?您还可以将迭代器块移动到私有方法或getter,如下所示:
public IList<string> method()
{
return seq.ToList();
}
IEnumerable<string> seq
{
get
{
for (int i = 0; i < 1000; i++)
{
yield return i.ToString();
}
}
}
public IList<string> method()
{
return Enumerable.Range(0, 1000).Select(i => i.ToString()).ToList();
}
更改为
IList
为IEnumerable
@Riccardo:因为这就是它的实现方式:
public IList<string> method()
{
return Enumerable.Range(0, 1000).Select(i => i.ToString()).ToList();
}