を実装するstruct
があります。 struct
実装の配列があり、その配列をinterface
型の別の配列に暗黙的にキャストしようとするまで、これはうまく動作します。上記のコードをコンパイルする場合(下記のコード例を参照してください)配列の配列を構造体の配列にキャストする際の暗黙のキャストが無効です
using System.Collections.Generic;
namespace MainNS
{
public interface IStructInterface
{
string Name { get; }
}
public struct StructImplementation : IStructInterface
{
public string Name
{
get { return "Test"; }
}
}
public class MainClass
{
public static void Main()
{
StructImplementation[] structCollection = new StructImplementation[1]
{
new StructImplementation()
};
// Perform an implicit cast
IEnumerable<IStructInterface> castCollection = structCollection; // Invalid implicit cast
}
}
}
、私はエラーを取得する:
error CS0029: Cannot implicitly convert type 'MainNS.StructImplementation[]' to 'MainNS.IStructInterface[]'
私はclass
にStructImplementation
を変更した場合、私は何の問題を持っていないので、私は何を想定しています私がしようとしているのは有効でないか、または私は盲目になり、明らかな何かを見逃している。
これに関するアドバイスや説明はありがたいです。誰が(私の状況でそうであったように)この問題を持っており、別のアプローチを使用すると、理想的な未満である場合には
EDIT
は、私がLINQ方法Cast<T>()
を使用して、私の問題を中心に働きました。私は非常に有用であることが分かっMSDNで良い記事についてVariance in Generic Typesは、あり
IEnumerable<IStructInterface> castCollection = structCollection.Cast<IStructInterface>();
:だから、上記の例では、私のようなものを使用してキャストを実行します。
重複するhttp://stackoverflow.com/questions/5825276/ienumerableimyinterface-implicitly-from-class-but-not-from-struct-why – hatchet
あなたはあなた自身の質問に答えました。エラーはこのエラーを説明しています。あなたがしようとしているのは有効なC#コードではありません。解決策はクラスを使用することです。 –
@Ramhound私はC#で無効だった何かをやったと仮定しました - 私は今見つけたように、説明や説明のために何かを探していました。 –