提问者:小点点

C#编译器对待数组元素是否与对待同一类型变量不同?!(System.ArrayTypeMismatchException)


我今天正在做一些事情,但是我注意到代码中有一些东西,所以让我解释一下情况。

我从不同的concreateclass的接口中获取数据,看看这个示例代码

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>())
    }
}

所以对于第一个IENumable unileIENumable=new List();工作正常,但在IENumable[]arrayOfList=new List[ARRAY_SIZE];第一项给出了异常(System.试图以与数组不兼容的类型访问元素。(

有人能解释为什么吗?数组中的元素与相同类型的变量有区别吗?!


共1个答案

匿名用户

您有一个列表的集合

使用某一类型的数组,可以存储该类型的项或更特定的项,但不能存储不特定的项。因此,您可以将列表存储在可枚举数组中(因为所有列表都是可枚举的),但不能将可枚举存储在列表数组中(因为并非所有可枚举都是列表)。

相关问题