我必须实现一个序列化/反序列化类,我正在使用System.Xml.Serialization
.我有一些IList<Decimal>
类型属性,并希望在IList<string>
中序列化,解码属于具有特定区域性信息的列表的所有十进制值。例如,10
10,00
意大利文化信息,但10.00
英语文化信息。我尝试使用这个来做到这一点:
public IList<string> method()
{
for (int i = 0; i < 1000; i++)
{
yield return 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
如果我用作属性类型IEnumerable<string>
它可以成功工作,但显然我无法更改要序列化的数据类型。
任何帮助,不胜感激。
>yield
只适用于IEnumerable<T>
、IEnumerable
、IEnumerator<T>
和IEnumerator
作为返回类型。
在您的情况下,您需要改用普通方法:
public IList<string> method()
{
var result = new List<string>();
for (int i = 0; i < 1000; i++)
{
result.Add(i.ToString());
}
return result;
}
想想吧。您的代码将允许您编写以下代码:
method().Add("foo");
这没有多大意义,是吗?
您还可以将迭代器块移动到私有方法或 getter,如下所示:
public IList<string> method()
{
return seq.ToList();
}
IEnumerable<string> seq
{
get
{
for (int i = 0; i < 1000; i++)
{
yield return i.ToString();
}
}
}
但也要注意,对于范围x : x+1 : x+2 : ... : x+(n-1)
的特定情况,.NET 中已经有该方法Enumerable.Range
您可以像这样使用:
public IList<string> method()
{
return Enumerable.Range(0, 1000).Select(i => i.ToString()).ToList();
}