在C#中将对象数组(实现接口Ifoo)转换为Ifoo[]

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)
class A : IFoo
{
}

...

A[] arrayOfA = new A[10];

if(arrayOfA is IFoo[]) 
{
    // this is not called
}

Q1:为什么arrayOfA不是一个阵列IFoos

Q2:为什么我不能投arrayOfAIFoo[]

提问于
用户回答回答于

arrayOfA IFoo[]

你的程序肯定有其他问题。

您似乎已经模拟了一些代码来显示问题,但事实上您的代码(见下文)可以按预期工作。尝试使用真实代码更新此问题 - 或尽可能接近真实 - 我们可以再看看。

using System;
public class oink {
    public static void Main() {
        A[] aOa = new A[10];

        if (aOa is IFoo[]) { Console.WriteLine("aOa is IFoo[]"); }

    }
    public interface IFoo {}
    public class A : IFoo {}
}

PS D:\> csc test.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

PS D:\> D:\test.exe
aOa is IFoo[]
PS D:\>
用户回答回答于

你可以试试

if (arrayofA[0] is IFoo) {.....}

哪种回答你的问题。arrayOfA是一个数组。阵列是一个实现一个目的ICloneableIListICollection,和IEnumerableIFoo不属于他们。

扫码关注云+社区

领取腾讯云代金券