如何从界面中的arraylist中读取值?

时间:2013-02-18 13:49:32

标签: c# c#-4.0

我的界面是

public interface IDisplayListQueue
{
    void BindQueueData();
    System.Collections.ArrayList QueueDataSource { get; set; }
}

在页面加载中将值添加到列表

IDisplayListQueue dataEntryQueue;
dataEntryQueue.QueueDataSource.Add(new { QueueID = queue.QueueID, LinkText = queueName, Uid = sentinel });

页面加载后我想找到值,例如dataEntryQueue中的QueueID。

所以,我正在尝试编写像这样的代码

dataEntryQueue.QueueDataSource.Contains("122");

我无法找到上面的ID,即使它是exits.QueueDataSource值在对象中,在QueueDataSource之后我无法获取QueueID属性。

3 个答案:

答案 0 :(得分:1)

您无法直接创建界面实例。您必须创建一个对象,该对象实现IDisplayListQueue然后访问此对象。

请参阅MSDN

答案 1 :(得分:1)

您需要创建包含字段QueueID, LinkText, Uid的自己的类,并使用List<OwnClass>而不是数组列表

答案 2 :(得分:0)

您正在创建一个具有QueueID属性的新匿名类型,并且您希望Contains方法根据该ID查找对象,对吧?但Contains无法知道&#34; 122&#34;应与QueueID匹配。它可以比较列表中不同对象的唯一方法是它们的引用,它们的存储位置,而不是你所追求的。

那你能做什么?您可以使用LINQ方法Any,而不是使用Contains,从而为显式检查QueueID属性提供方法:

if (dataEntryQueue.QueueDataSource
                  .Any(queueThingie => queueThingie.QueueID = "122"))
{
    // found it!
}

然而,这不会奏效。为什么?由于ArrayList存储object,并且它不知道您的queueThingie具有QueueID属性。

那你能做什么?避免将闪亮的新匿名类型与旧的和笨重的ArrayLists混合使用。使用您想要的三个属性创建一个简单的QueueThingie类,然后您可以使用LINQ&#39; Any找到您想要的类。实际上,如果您的QueueThingie实现了IEqualityComparer界面,则甚至可以使用ArrayList.Contains