2009-08-28 70 views
16

是否有特殊的方法來初始化IList<T>?這似乎並不工作:初始化IList <T> C#

IList<ListItem> allFaqs = new IList<ListItem>(); 
// Error I get here: Cannot create an instance of the interface 'IList<ListItem>' 

ReSharper的建議將其初始化像這樣:

IList<ListItem> allFaqs = null; 

,但不會導致一個空引用異常時,我去項目添加到這個列表?

或者我應該只使用List<ListItem>

謝謝!

回答

40

錯誤是因爲您正嘗試創建接口的實例。

你的代碼更改爲:

List<ListItem> allFaqs = new List<ListItem>(); 

IList<ListItem> allFaqs = new List<ListItem>(); 

,它應該編譯。

你顯然必須改變你的代碼的其餘部分以適應。

+0

爲我節省了很多時間,謝謝:) – Sijav 2015-03-26 02:22:12

2

你需要做的:

IList<ListItem> allFaqs = new List<ListItem>(); 

在你的代碼試圖初始化的接口。

2

IList是一個接口,所以你不能實例化它。各種類實現IList。一個實現IList的類是List。你可以這樣實例化:

List<ListItem> allFaqs = new List<ListItem>(); 
17

你的問題是IList是一個接口,而不是一個類。您無法初始化界面。

你可以有一個接口的實例,但你需要實現該接口,如類初始化:

IList<string> strings = new List<string>(); 

的代碼前述行會的工作,但你只會有IList的成員可以從你初始化的任何類中獲得,而不是全套。

+1

那麼,你可以,如果你作弊; - p http://stackoverflow.com/questions/194484#1281522 – 2009-08-28 21:12:14

+0

+1的作弊!謝謝Marc – Anders 2009-08-28 21:43:53

2

你不能實例化一個接口(IList是一個接口)。

您將需要一些實例實現一個IList,

像這樣:

IList<ListItem> allFaqs = new List<ListItem>(); 

還有其他類型ILists的,但名單是一個好的開始。

1

IList<T>是一個接口。您需要實例化一個實現接口的類:

IList<ListItem> allFaqs = new List<ListItem>(); 

List<T>實現IList<T>,因此可分配給變量。還有其他類型也執行IList<T>

2

IList是一個接口,而不是一個類。如果你想初始化它,你需要將它初始化爲一個實現IList的類,具體取決於你的內部特定需求。通常,IList是用List來初始化的。

IList<ListItem> items = new List<ListItem>(); 
6

IList不是一類;它是一個類可以實現的接口。接口本身只是類的消費者和類本身之間的契約。這行代碼將工作:

IList<ListItem> allFaqs = new List<ListItem>(); 

這是否有幫助?