2

ここに画像の説明を入力

私は単にすべてをループしようとしていますここに画像の説明を入力

結果オブジェクト内の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();
        }
    }
}

iEnumerableエラーを何を試してもエラーが発生するか、各配列項目内でループする方法がわかりません。

クラスを戻り値として使用する関数はこれを行っています

Public Function ADP_Processor(
    ByVal w_taxcode As String(), _
    ByVal w_Amount As String(), _
    ByVal w_row As String()) As List(Of GetErrors)
4

2 に答える 2

2

問題はあなたのループにあると思います:

 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 では結果 [x] が列挙可能である必要があるため、結果 [x] に対して foreach を実行することはできません。基本的に、次のように書く場合:

foreach (string value in results){ 
   //logic here 
}

value は、結果セットの 1 つのインスタンスに格納されているすべての値を取ります。その値が文字列の配列になり、単純な 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();
                       }
      }
于 2013-06-12T05:29:06.730 に答える
2

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

メソッドのようなクラスを使用しようとしているように見えるため、フィールドは文字列の配列のようです。"results" の各項目は GetErrors クラスのインスタンスであり、IEnumerable を実装して GetEnumerator が各フィールドの値を返すようにしない限り、foreach で使用することはできません。

于 2013-06-12T05:28:10.450 に答える