Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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# 如何在没有IEnumerable的情况下循环此对象_C#_.net_Vb.net - Fatal编程技术网

C# 如何在没有IEnumerable的情况下循环此对象

C# 如何在没有IEnumerable的情况下循环此对象,c#,.net,vb.net,C#,.net,Vb.net,我只是想把所有的 results对象中的items[x](返回这个对象的函数是我自己的,它只返回一个字符串列表)。这来自我为web服务目的创建的vb.net函数。我认为执行foreach循环是最简单、最有效的方法,但我不能这样做,因为我的类没有实现IEnumerable。然而,我想知道是否还有更简单的方法不使用iEnumerable循环这个过程。 非常感谢你的帮助。 这就是我的函数返回的类的样子 Public Class GetErrors Public FWWDIR_ERR_VEND

我只是想把所有的

results对象中的items[x](返回这个对象的函数是我自己的,它只返回一个字符串列表)。这来自我为web服务目的创建的vb.net函数。我认为执行foreach循环是最简单、最有效的方法,但我不能这样做,因为我的类没有实现IEnumerable。然而,我想知道是否还有更简单的方法不使用iEnumerable循环这个过程。 非常感谢你的帮助。 这就是我的函数返回的类的样子

Public Class GetErrors 
    Public FWWDIR_ERR_VENDOR As String = String.Empty
    Public FWWDIR_ERR_INVOICE As String = String.Empty
    Public FWWDIR_ERR_ACCOUNT As String = String.Empty
    Public FWWDIR_ERR_FUND As String = String.Empty
    Public FWWDIR_ERR_ORGN As String = String.Empty
    Public FWWDIR_ERR_PROG As String = String.Empty
    Public FWWDIR_ERR_ADDRSS_TYP As String = String.Empty
    Public FWWDIR_ERR_ADDRSS_SEQ As String = String.Empty
    Public FWWDIR_ERR_LOCATION As String = String.Empty
    Public FWWDIR_ERR_ACTIVITY As String = String.Empty
    Public FWWDIR_ROW As String = String.Empty
    Public service_error As String = String.Empty
    Public FWWDIR_ERR_PO As String = String.Empty
    Public FWWDIR_ERR_CHKVEND As String = String.Empty
    Public FWWDIR_ERR_FSYR As String = String.Empty
    Public FWWDIR_ERR_FSPD As String = String.Empty
    Public FWWDIR_ERR_ONTM_VEND As String = String.Empty
    Public FWWDIR_ERR_ONTM_ADRS1 As String = String.Empty
    Public FWWDIR_ERR_ONTM_CITY As String = String.Empty
    Public FWWDIR_ERR_ONTM_STATE As String = String.Empty
    Public FWWDIR_ERR_ONTM_ZIP As String = String.Empty
    Public FWWDIR_ERR_ENCUM_AMT As String = String.Empty
    Public FWWDIR_ERR_ENCUM_VEND As String = String.Empty
    Public FWWDIR_ERR_ITEM_ERROR As String = String.Empty
    Public FWWDIR_POHD As String = String.Empty
End Class
我试过的短代码

ServiceApUtils _apUtils = new ServiceApUtils();
var   results = _apUtils.ADP_Processor(l_taxcode.ToArray(), l_amount.ToArray(), l_row.ToArray());
//Response.Write(results[0].)
if (results[0].service_error!="")
{
    Response.Write(results[0].service_error);

}
else if (results.Count > 0)//
{
    for (int x = 0; x < results.Count; x++ ) //typecast x a get error to loop the results
    {
        TableRow tr = new TableRow();
        Table1.Rows.Add(tr);
        foreach (string value in results[x])//fails here with Ienumerable error
        {
           TableCell tc = new TableCell();
           tc.Text = results[x].FWWDIR_ROW + results[x].FWWDIR_ERR_INVOICE + results[x].FWWDIR_ERR_ACCOUNT;
           tr.Cells.Add(tc);// = new TableCell();
        }
    }
}

尝试移除您的foreach,然后:

for (int x = 0; x < results.Count; x++ ) //typecast x a get error to loop the results
{
  TableRow tr = new TableRow();
  Table1.Rows.Add(tr);

  GetErrors value = results[x];

  TableCell tc = new TableCell();
  tc.Text = results[x].FWWDIR_ROW + results[x].FWWDIR_ERR_INVOICE + results[x].FWWDIR_ERR_ACCOUNT;
  tr.Cells.Add(tc);// = new TableCell();
}
for(int x=0;x

似乎您正在尝试使用类似于方法的类,因此字段类似于字符串数组。“results”中的每个项都是GetErrors类的实例,除非实现IEnumerable并让GetEnumerator返回每个字段中的值,否则不能在foreach中使用它。

尝试删除foreach并获得:

for (int x = 0; x < results.Count; x++ ) //typecast x a get error to loop the results
{
  TableRow tr = new TableRow();
  Table1.Rows.Add(tr);

  GetErrors value = results[x];

  TableCell tc = new TableCell();
  tc.Text = results[x].FWWDIR_ROW + results[x].FWWDIR_ERR_INVOICE + results[x].FWWDIR_ERR_ACCOUNT;
  tr.Cells.Add(tc);// = new TableCell();
}
for(int x=0;x

似乎您正在尝试使用类似于方法的类,因此字段类似于字符串数组。“results”中的每个项都是GetErrors类的实例,除非实现IEnumerable并让GetEnumerator返回每个字段中的值,否则不能在foreach中使用它。

我认为问题出在您的循环中:

 foreach (string value in results[x])//fails here with Ienumerable error
                       {

                           TableCell tc = new TableCell();
                           tc.Text = results[x].FWWDIR_ROW + results[x].FWWDIR_ERR_INVOICE    +                                         results[x].FWWDIR_ERR_ACCOUNT;
                           tr.Cells.Add(tc);// = new TableCell();
                       }
您正在循环结果集的数组,但是不能对结果[x]执行foreach,因为foreach要求结果[x]是ienumerable。基本上,如果你要写:

foreach (string value in results){ 
   //logic here 
}
然后value获取存储在结果集的一个实例中的所有值。现在,值是字符串数组,您可以使用简单的for循环对值进行循环,请参见以下内容:

      ServiceApUtils _apUtils = new ServiceApUtils();
           var   results = _apUtils.ADP_Processor(l_taxcode.ToArray(), l_amount.ToArray(),  l_row.ToArray());
                //Response.Write(results[0].)
             if (results[0].service_error!="")
             {
                 Response.Write(results[0].service_error);

             }//if the procedure has service errors
             else if (results.Count > 0)//
             {
                 foreach (var value in results){
                     TableRow tr = new TableRow();
                     Table1.Rows.Add(tr);
                       for (int i = 0; i < value.Length; i++{
                         //might have to update this logic as well:
                         TableCell tc = new TableCell();
                         tc.Text = value.FWWDIR_ROW + value.FWWDIR_ERR_INVOICE + value.FWWDIR_ERR_ACCOUNT;
                         tr.Cells.Add(tc);// = new TableCell();
                       }
      }
ServiceApUtils\u apUtils=new ServiceApUtils();
var结果=_apUtils.ADP_处理器(l_taxcode.ToArray(),l_amount.ToArray(),l_row.ToArray());
//响应。写入(结果[0]。)
如果(结果[0]。服务错误!=“”)
{
Response.Write(结果[0]。服务错误);
}//如果过程有服务错误
否则如果(results.Count>0)//
{
foreach(结果中的var值){
TableRow tr=新的TableRow();
表1.行添加(tr);
对于(int i=0;i
我认为问题出在您的循环中:

 foreach (string value in results[x])//fails here with Ienumerable error
                       {

                           TableCell tc = new TableCell();
                           tc.Text = results[x].FWWDIR_ROW + results[x].FWWDIR_ERR_INVOICE    +                                         results[x].FWWDIR_ERR_ACCOUNT;
                           tr.Cells.Add(tc);// = new TableCell();
                       }
您正在循环结果集的数组,但是无法对结果[x]执行foreach,因为foreach要求结果[x]为ienumerable。如果要编写:

foreach (string value in results){ 
   //logic here 
}
然后value获取存储在结果集的一个实例中的所有值。现在该值是字符串数组,您可以使用简单的for循环对值进行循环,请参见以下内容:

      ServiceApUtils _apUtils = new ServiceApUtils();
           var   results = _apUtils.ADP_Processor(l_taxcode.ToArray(), l_amount.ToArray(),  l_row.ToArray());
                //Response.Write(results[0].)
             if (results[0].service_error!="")
             {
                 Response.Write(results[0].service_error);

             }//if the procedure has service errors
             else if (results.Count > 0)//
             {
                 foreach (var value in results){
                     TableRow tr = new TableRow();
                     Table1.Rows.Add(tr);
                       for (int i = 0; i < value.Length; i++{
                         //might have to update this logic as well:
                         TableCell tc = new TableCell();
                         tc.Text = value.FWWDIR_ROW + value.FWWDIR_ERR_INVOICE + value.FWWDIR_ERR_ACCOUNT;
                         tr.Cells.Add(tc);// = new TableCell();
                       }
      }
ServiceApUtils\u apUtils=new ServiceApUtils();
var结果=_apUtils.ADP_处理器(l_taxcode.ToArray(),l_amount.ToArray(),l_row.ToArray());
//响应。写入(结果[0]。)
如果(结果[0]。服务错误!=“”)
{
Response.Write(结果[0]。服务错误);
}//如果过程有服务错误
否则如果(results.Count>0)//
{
foreach(结果中的var值){
TableRow tr=新的TableRow();
表1.行添加(tr);
对于(int i=0;i
不太确定您的问题是关于什么的,但请注意,C#中的
foreach
不需要
IEnumerable
才能工作-根据visual studio 2012和.net framework 4.0,查看中的最后一句话。我无法执行foreach循环,这基本上就是我正在寻找的另一种方法。问题是什么结果中每个项目的类型?是字符串数组吗?它们不是结果[i]对象的属性/字段。根据您的屏幕截图,它们似乎不是集合成员。它们看起来像字段。@Miguel
foreach
只需要4种方法:“如果类具有所需的
GetEnumerator
MoveNext
Reset
当前成员,则它将与foreach一起工作。”“。它可能不会帮助您枚举您不拥有/编写的集合。不确定您的问题是关于什么的,但请注意,C#中的
foreach
,不需要
IEnumerable
来工作-查看中的最后一句话,根据v