当前位置: 首页 > 知识库问答 >
问题:

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

冯亮
2023-03-14

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

我从不同的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个答案

尚嘉勋
2023-03-14

您有一个列表的集合

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

 类似资料:
  • 我们如何等待IWebElement(重新)连接到DOM?我的场景是这样的,我从dropdown1中选择一个值,然后单击dropdown2上的数据绑定。所以当我的测试像从Dd1中选择“foo”,然后从Dd2中选择“bar”- 但是我真的不想把定位器字符串(“foo”)带到我的测试逻辑中,因为它似乎破坏了使用页面对象模型的意义。使用页面对象模型时,我已经有了IWebElement实例 那么,您知道隐式

  • 问题内容: 我正在尝试比较以下结果:(在蚂蚁中) ……对此:(在行家中) …只是发现生成的两个类文件的校验和略有不同,而其余的相同。我认为多线程起了一定的作用,但是在反复尝试后,为这两个选项生成的校验和似乎是一致的。什么可能解释这个结果? 更新: 我使用来检查了一组具有不同校验和的文件,并注意到唯一的区别是: 相对于: 问题答案: 如您所展示的,差异在于生成的常量池,这实际上不是问题,但是令人不安

  • 本文向大家介绍Selenium有哪些不同的等待类型?,包括了Selenium有哪些不同的等待类型?的使用技巧和注意事项,需要的朋友参考一下 下面列出了Selenium中可用的不同类型的等待- 隐式等待 这是Selenium中动态等待的一种,其语法为- 明确等待 这是Selenium中动态等待的一种,其语法为- 流利的等待 这是Selenium中动态等待的一种,其语法为- 静态等待 这用于将执行暂停

  • 问题内容: 我在使用量角器时遇到了一些麻烦。我有一个非常奇怪的ui- router状态,很难摆脱其他元素来开始使用该页面。有没有办法告诉量角器等到元素最终出现在DOM中?不可见/未显示,但实际上已创建?我一直尝试使用等待元素,但是显然无法选择它。 问题答案: 您应该能够与ExpectedCondition一起使用:

  • 问题内容: 我需要对列表中的最后一个元素执行一些特殊的操作。有没有比这更好的方法了? 问题答案: 如果您不想复制列表,可以制作一个简单的生成器: notlast的另一种定义:

  • 问题内容: 假设我有这个课程: 一个线程可以在不访问该对象的情况下写入这些字段,而另一个线程可以读取它们吗? 注意:这些值可以彼此分开对待,因此在读取时更改没关系。 编辑 : 为了澄清起见,这些字段是 可变的 。只有它们引用的对象是 不可变的 。 问题答案: 从技术上讲,你需要让他们,或读取 和 使用写出来,以保证读者会读的最先进的最新值。正如您现在所拥有的,如果一个线程写入一个值,则不能保证另一