我在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
...有人可以帮助我吗?
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();
KeyValuePair<TKey, TValue>没有实现IItem,这似乎甚至不是 .NET Framework 的一部分。你不能施放它,除非你在KeyValuePair某个地方重新定义了。
编辑:即使您定义了接口,也无法转换为IList<YourKeyValuePair>,IList<IItem>因为IList它不是协变的。但是,您可以将其转换为IEnumerable<IItem>.