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

时间:2008-09-18 14:04:32

标签: c#

class A : IFoo
{
}

...

A[] arrayOfA = new A[10];

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

Q1:为什么arrayOfA不是IFoos的数组?

Q2:为什么我不能将arrayOfA投射到IFoo[]

2 个答案:

答案 0 :(得分:6)

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:\>

答案 1 :(得分:-3)

你可以尝试

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

哪种回答你的问题。 arrayOfA是一个数组。数组是实现ICloneableIListICollection和&的对象。 IEnumerableIFoo不在其中。