C#中,获取列出当前的T指数

问题描述 投票:2回答:2

我搜索了不少,我可能会在类似的东西都有所涉猎,但目前还不清楚我作为即时通讯新的C#。

我想从一个List <TLINE>我知道我可以简单地用一个int我重复获取对象TLINE的当前索引。但我不明白为什么或如何,我可以把它作为当前的indexOf我ITEAM我possitioned上,而无需搜索任何东西。

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
2个回答
0
投票

List.GetEnumerator()。现在将创建列表中的新枚举,然后返回当前的项目,而不是指数。正如你所看到这是行不通的。

由于名单实现IList,你可以使用indexOf(T项目);方法找到的项的基于0的索引。

https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ilist-1.indexof?view=netframework-4.7.2#System_Collections_Generic_IList_1_IndexOf__0_

但是,这种方法并不能保证恒定的O(1)性能,因为它必须通过搜索列表。一个更好的替代方法是,你遍历它们为你指出来记录索引。

有没有办法找到在固定时间列表中的任意项的索引,不记录索引,所以这就是我建议。


5
投票

imoprtati.GetEnumerator().Current将无法正常工作,因为你正在创建与它自己的位置单独迭代器(在第一个项目之前目前)。在这里你最好的选择可能是一个简单的计数器:

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


    index++;
}

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


推荐问答