0

InvalidCastExceptionキャストしようとすると問題が発生します

IList<KeyValuePair<string, object>> x

IList<IItem> y

IItem は、私が試したインターフェイスです...

IList<IItem> y = (IItem) x; //INVALIDCASTEXCEPTION

IList<IItem> y = x.Cast<IItem>().ToList(); //another exception

... 誰かが私を助けることができますか?

4

3 に答える 3

2

AKeyValuePar<string,object>をインターフェイスにキャストすることはできません。それを実装するクラスのインスタンスを作成する必要があり、それをインターフェイス型にキャストできます。

これがあなたのインターフェースとそれを実装するクラスであると仮定します:

interface IItem
{
    string Prop1 { get; set; }
    object Prop2 { get; set; }
}

class SomeClass : IItem
{
    public string Prop1
    {
        get;
        set;
    }

    public object Prop2
    {
        get;
        set;
    }
}

IList<IItem>これで、からを作成できますList<KeyValuePar<string,object>>:

IList<KeyValuePair<string, object>> xList = ...;
IList<IItem> y = xList
    .Select(x => (IItem)new SomeClass { Prop1 = x.Key, Prop2 = x.Value })
    .ToList();
于 2013-01-14T22:01:10.070 に答える
1

KeyValuePair<TKey, TValue>は実装されIItemていません。これは、.NETFrameworkの一部ではないようです。KeyValuePairどこかで再定義しない限り、キャストすることはできません。

編集:インターフェースを定義したとしても、は共変ではないため、IList<YourKeyValuePair>にキャストすることはできませんでした。ただし、にキャストすることはできます。IList<IItem>IListIEnumerable<IItem>

于 2013-01-14T21:53:05.363 に答える
-1

明示的なキーワードまたは暗黙のキーワードIItemを使用して、自分自身へのキャストを定義できます

于 2013-01-14T21:56:23.680 に答える