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 属性。

4

3 回答 3

1

您不能直接创建接口的实例。您必须创建一个实现 IDisplayListQueue 的对象,然后访问该对象。

请参阅MSDN

于 2013-02-18T13:52:16.760 回答
1

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

于 2013-02-18T13:54:06.223 回答
0

您正在创建一个具有QueueID属性的新匿名类型,并且您希望该Contains方法根据该 ID 查找对象,对吗?但Contains无法知道“122”应该匹配到QueueID. 它可以比较列表中不同对象的唯一方法是通过它们的引用,它们的内存位置,这不是你所追求的。

所以,你可以做什么?您可能希望使用 LINQ 方法Any,而不是使用 Contains,从而提供一种显式检查 QueueID 属性的方法:

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

但是,这行不通。为什么?因为ArrayListstore objects,它不知道你queueThingie有一个QueueID属性。

所以,你可以做什么?避免将闪亮的新匿名类型与旧的和笨重的 ArrayList 混合。使用您想要的三个属性创建一个简单的QueueThingie类,然后您可以使用 LINQAny找到您想要的。事实上,如果你QueueThingie实现了IEqualityComparer接口,甚至可以使用ArrayList.Contains.

于 2013-02-18T14:53:14.387 回答