我的界面是
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属性。
答案 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
。