首页 > 解决方案 > c#, 获取当前T在List中的索引

问题描述

我搜索了很多,我可能偶然发现了一些类似的东西,但它对我来说仍然是陌生的,因为我是 c# 的新手。

我想 从List<Tline>中获取对象Tline的当前索引, 我知道我可以简单地使用 int i 进行迭代。但我不明白为什么或如何将它作为我所在的当前iteam 的索引而不搜索任何内容。

Tline 有点像

public class Tline
    {
        public string Cd_m { get; set; }           
        public string cd_d { get; set; }
        public string cd_c { get; set; }
       ...
    }

我的问题在这里(用箭头表示)

  class ACCS 
{
    internal void DBwrite(List<Tline> imoprtati)
    {
        OleDbConnection myAccessConn = null;

        string sFld = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        string dbName = "EDIM1.mdb";
        dbName = Path.Combine(sFld, dbName);
        string accessConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", dbName);

        string sqlQuery = "INSERT INTO DOTes (`id`,`cd_m`,`cd_d`,`cd_c`,`nume`) values (?,?,?,?,?)";

        myAccessConn = new OleDbConnection(accessConn);
        int i = 2;
         foreach (var insT in imoprtati)
         {
            using (OleDbCommand cmd = new OleDbCommand(sqlQuery, myAccessConn))
            {
                cmd.Connection.Open();

                cmd.Parameters.AddWithValue("@id", i.ToString());
                cmd.Parameters.AddWithValue("@cd_m", "2018");
                cmd.Parameters.AddWithValue("@cd_d", "BO");
                cmd.Parameters.AddWithValue("@cd_c", "C00128");

                //  Show current Tline  Index                           ↓↓↓↓↓↓↓
                cmd.Parameters.AddWithValue("@nume", (imoprtati.GetEnumerator().Current)); //trying anything
                cmd.ExecuteNonQuery(); 


                cmd.Connection.Close();
                i++;

            }
         }
    }

}

标签: c#arraylist

解决方案


imoprtati.GetEnumerator().Current将不起作用,因为您正在创建一个具有自己位置的单独迭代器(当前在第一项之前)。您最好的选择可能是一个简单的计数器:

int index = 0;
foreach (var insT in imoprtati) {
    // your stuff here...


    index++;
}

有一个包含索引LINQ 方法,但由于自定义结构迭代器、捕获的变量等(复杂主题),最终效率会降低。


推荐阅读