Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 屈服于IList返回类型_C#_Ienumerable_Yield_Ilist - Fatal编程技术网

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();
}