我今天正在做一些事情,但我注意到代碼中有一些東西,所以讓我解釋一下情況。
我從不同的 concreate 介面類獲取資料為 IEnumerable,看看這個示例代碼
public interface ISampleClass {
IEnumerable<ISampleClass> GetSampleData();
}
public class SampleClassAsPerson : ISampleClass
{
public IEnumerable<ISampleClass> GetSampleData()
{
// Return data from DB
// Return list for this example
return new List<SampleClassAsPerson>() {new SampleClassAsPerson(), new SampleClassAsPerson()};
}
}
我將來自GetSampleData()方法的資料放在我的介面陣列中(將在下面的代碼中看到這一點),我注意到我的陣列沒有與相同型別的變數保存相同的資料,讓我們看一下代碼
public class TestArrayAndSingle
{
public const byte ARRAY_SIZE = 10;
public const byte FIRST_PLACE_IN_ARRAY = 0;
public static void DoTheTest()
{
// First as single element
IEnumerable<ISampleClass> singleIEnumerable = new List<ISampleClass>();
singleIEnumerable = new SampleClassAsPerson().GetSampleData(); // Works Fine for variable of type new List<ISampleClass>()
// Second as array of elements
IEnumerable<ISampleClass>[] arrayOfIEnumerable = new IEnumerable<ISampleClass>[ARRAY_SIZE];
arrayOfIEnumerable[FIRST_PLACE_IN_ARRAY] = new SampleClassAsPerson().GetSampleData(); // Works fine also
IEnumerable<ISampleClass>[] arrayOfList = new List<ISampleClass>[ARRAY_SIZE];
arrayOfList[FIRST_PLACE_IN_ARRAY] = new SampleClassAsPerson().GetSampleData(); // Return ArrayTypeMismatchException, This should be the same as singleIEnumerable I guess(new List<ISampleClass>())
}
}
所以對于第一個 IEnumerable singleIEnumerable = new List(); 作業正常,但在 IEnumerable[] arrayOfList = new List[ARRAY_SIZE]; 第一項給出例外(System.ArrayTypeMismatchException - 試圖訪問元素作為與陣列不兼容的型別。)。
誰能解釋為什么?陣列中的元素是否與相同型別的變數不同?!
uj5u.com熱心網友回復:
您有一個集合,List<T>并且正在嘗試在其中存盤更通用的集合IEnumerable<T>。但并非所有IEnumerable<T>s 都是串列,因此編譯器不允許。如果IEnumerable<T>是一個堆疊呢?或鏈表?或 LINQ 查詢?
使用特定型別的陣列,您可以存盤屬于該型別或更具體但不是不太具體的專案。因此,您可以將串列存盤在列舉陣列中(因為所有串列都是列舉),但不能將列舉存盤在串列陣列中(因為并非所有列舉都是串列)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/380256.html
