【问题标题】:Loop though IList, but with for loop, not for each遍历列表,但使用 for 循环,而不是每个
【发布时间】:2010-01-08 22:46:24
【问题描述】:

我有一个 IList 对象。 它们的类型为 NHibernate.Examples.QuickStart.User。 还有一个 EmailAddress 公共字符串属性。

现在我可以使用 for each 循环遍历该列表。
是否可以使用简单的 for 循环遍历 Ilist?
因为简单地将 IList 视为一个数组似乎不起作用......

System.Collections.IList results = crit.List();

foreach (NHibernate.Examples.QuickStart.User i in results)
{
    Console.WriteLine(i.EmailAddress);
}

for (int i = 0; i < results.Count; ++i)
{
    Console.WriteLine(results[i].EmailAddress); // Not Working
}

【问题讨论】:

    标签: c# for-loop


    【解决方案1】:

    由于您使用的是非通用 IList,因此需要强制转换值:

    for (int i = 0; i < results.Count; ++i)
        {
            Console.WriteLine(((NHibernate.Examples.QuickStart.User)results[i]).EmailAddress); // Not Working
        }
    

    或者,您可以通过将第一行更改为:

    System.Collections.IList&lt;NHibernate.Examples.QuickStart.User&gt; results = crit.List();

    请注意,对于此解决方案,您必须更改 crit.List() 函数以返回此类型。

    【讨论】:

      【解决方案2】:
      for (int i = 0; i < results.Count; ++i)
      {
          Console.WriteLine((NHibernate.Examples.QuickStart.User)results[i]).EmailAddress); // Not Working
      }
      

      请记住正确转换元素类型,因为IList 索引器返回一个简单的object

      【讨论】:

        【解决方案3】:

        您正在使用基本的 IList,它将对象存储为类型 Object。如果您使用foreach,则会自动为您完成类型转换。但是,如果您使用 for (i = 0; i&lt;count... 中的索引器,则不是。

        试试这个,看看是否有效:

        for (int i = 0; i < results.Count; ++i)
        {
            var result = (NHibernate.Examples.QuickStart.User)results[i];
            Console.WriteLine(result.EmailAddress); // Not Working
        }
        

        ...

        【讨论】:

        • 你的意思是:result.EmailAddress
        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 2019-09-07
        • 2022-01-06
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多