C# 无法执行显式强制转换
你能在这段代码中说明原因吗:C# 无法执行显式强制转换,c#,generics,activator,C#,Generics,Activator,你能在这段代码中说明原因吗: private Dictionary<Type, Type> viewTypeMap = new Dictionary<Type, Type>(); public void ShowView<TView>(ViewModelBase viewModel, bool showDialog = false) where TView : IView { var view = Activator.CreateInstan
private Dictionary<Type, Type> viewTypeMap = new Dictionary<Type, Type>();
public void ShowView<TView>(ViewModelBase viewModel, bool showDialog = false)
where TView : IView
{
var view = Activator.CreateInstance(viewTypeMap[typeof(TView)]);
(IView)view.ShowDialog();
}
private Dictionary viewTypeMap=new Dictionary();
public void ShowView(ViewModelBase viewModel,bool showDialog=false)
TView:IView在哪里
{
var view=Activator.CreateInstance(viewTypeMap[typeof(TView)]);
(IView)view.ShowDialog();
}
我得到一个错误:
仅限赋值、调用、递增、递减和新对象
表达式可以用作语句。”
IView定义ShowDialog()方法。强制转换运算符的优先级低于成员访问运算符
(A)B.C();
被解析为
(A)(B.C());
这不是一个法律声明。你应该写信
((A)B).C();
如果要将B
转换为A
,然后在键入A
时调用C()
为便于将来参考,优先表如下所示:
改变
(IView)view.ShowDialog();
到
((IView)视图).ShowDialog()代码>
Eric解释了为什么可以在实例化时对其进行强制转换,如果多次使用,则无需每次都重新进行强制转换
var view = (IView)Activator.CreateInstance(viewTypeMap[typeof(TView)]);
view.ShowDialog();
为什么不尝试以下操作,以便将视图对象声明为IView而不是object
public void ShowView<TView>(ViewModelBase viewModel, bool showDialog = false) where TView : IView
{
var view = (IView)Activator.CreateInstance(viewTypeMap[typeof(TView)]);
view.ShowDialog();
}
public void ShowView(ViewModelBase viewModel,bool showDialog=false),其中TView:IView
{
var view=(IView)Activator.CreateInstance(viewTypeMap[typeof(TView)]);
view.ShowDialog();
}