2013-02-18 67 views
0

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

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

在页面负荷增加值列出

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

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

所以,我试图写这样

dataEntryQueue.QueueDataSource.Contains("122"); 

的代码,我无法找到上述ID,即使它是exits.QueueDataSource值对象和QueueDataSource IA M后不能够获得QueueID属性。

+0

如果你真的使用C#4,你仍然希望使用非泛型'ArrayList'的任何原因? – 2013-02-18 13:51:03

+0

如何在没有非泛型ArrayList的情况下使用? – lakki 2013-02-18 13:54:56

+0

如果没有更多关于你想要达到的信息,很难知道。很可能'IDisplayListQueue'应该是通用的... – 2013-02-18 13:55:43

回答

1

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

请参阅MSDN

1

你需要让自己的类至极包含字段QueueID, LinkText, Uid,并使用List<OwnClass> insted的数组列表

0

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

那么你能做什么?除了使用包含的,你会想使用LINQ方法Any,给它一个办法明确检查QueueID属性:

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

然而,这是不行的。为什么?因为ArrayListobject s,它不知道你的queueThingie有一个QueueID属性。

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