我遇到了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
......有人可以帮助我吗?
答案 0 :(得分:2)
无法将KeyValuePar<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();
答案 1 :(得分:1)
KeyValuePair<TKey, TValue>
未实现IItem
,它似乎甚至不是.NET Framework的一部分。除非你在某个地方重新定义KeyValuePair
,否则你无法施放它。
编辑:即使您已定义了界面,也无法将IList<YourKeyValuePair>
投射到IList<IItem>
,因为IList
不是协变的。但是,您可以将其投射到IEnumerable<IItem>
。
答案 2 :(得分:-1)
您可以使用explicit keyword或implicit keyword
自行定义演员IItem