C# 从对象强制转换回泛型

C# 从对象强制转换回泛型,c#,generics,windows-runtime,C#,Generics,Windows Runtime,我想将一些页面定义传递到新的Windows RT页面 页面定义: class PageDefinition<T> where T: IItem { ... } 类页面定义,其中T:IItem{…} 我这样通过: rootFrame.Navigate(typeof(Overview), new PageDefinition<AnItem>) rootFrame.Navigate(typeof(Overview),新页面定义) 然后在新的页面中,我想从我的论点中获得信

我想将一些页面定义传递到新的Windows RT页面

页面定义:

class PageDefinition<T> where T: IItem { ... }
类页面定义,其中T:IItem{…}
我这样通过:

rootFrame.Navigate(typeof(Overview), new PageDefinition<AnItem>)
rootFrame.Navigate(typeof(Overview),新页面定义)
然后在新的页面中,我想从我的论点中获得信息。页面的LoadState方法预定义如下:

    protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
protected override void LoadState(对象导航参数,字典页面状态)
但是如何将navigationParameter强制转换回原始类型呢?我尝试了以下方法,但不起作用(pageDefinition保持空)

var pageDefinition=navigationParameter作为页面定义;
我不能从原来的类型转换回原来的类型吗

当我环顾四周但找不到有帮助的东西时,非常感谢你的帮助


谢谢

正如Jim在评论中已经提到的,在C#中不允许使用以下类型的演员,而
PageDefinition
的定义与您的问题相同:

var def = (PageDefinition<IItem>)new PageDefinition<AnItem>();
然后:

class PageDefinition<T> : IPageDefinition<T> where T: IItem
class PageDefinition:IPageDefinition其中T:IItem
完成此操作后,以下铸件将起作用:

var def = (IPageDefinition<IItem>)new PageDefinition<AnItem>();
var def=(IPageDefinition)新页面定义();

在接口中使用T有一些限制(基本上,您只能将其用作返回类型),因此您必须检查是否可以让它为您工作。详细信息在链接文章中进行了描述。

正如Jim在评论中已经提到的,在C#中不允许使用以下强制类型转换,而
PageDefinition
的定义与您的问题相同:

var def = (PageDefinition<IItem>)new PageDefinition<AnItem>();
然后:

class PageDefinition<T> : IPageDefinition<T> where T: IItem
class PageDefinition:IPageDefinition其中T:IItem
完成此操作后,以下铸件将起作用:

var def = (IPageDefinition<IItem>)new PageDefinition<AnItem>();
var def=(IPageDefinition)新页面定义();

在接口中使用T有一些限制(基本上,您只能将其用作返回类型),因此您必须检查是否可以让它为您工作。详细信息见链接文章。

请注意,as运算符仅执行引用转换和装箱转换。as运算符不能执行其他转换,例如用户定义的转换,而应使用强制转换表达式执行这些转换。请参阅:我现在这样做:Type Type=navigationParameter.GetType();this.DefaultViewModel[“Groups”]=type.GetRuntimeProperty(“Groups”).GetValue(navigationParameter);=>绝对不是一种干净的方式,甚至不知道Windows应用商店应用程序中是否允许反射:(仍然在听你说,tipps!PageDefinition不是你的原始类型,PageDefinition是,这会起作用。如果你将var PageDefinition更改为PageDefinition,你也会看到一个强制转换异常。这不可能,因为我不知道它到底是哪种类型,我只是现在它实现了IItem,这也可能是另一个Item。也许是吧不可能,我只是想知道是否可能。请注意,as运算符只执行引用转换和装箱转换。as运算符不能执行其他转换,例如用户定义的转换,而应该使用强制转换表达式来执行。请参阅:我现在这样做:Type Type=navigationParameter.GetType();this.DefaultViewModel[“Groups”]=type.GetRuntimeProperty(“Groups”).GetValue(navigationParameter);=>绝对不是一种干净的方式,甚至不知道Windows应用商店应用程序中是否允许反射:(仍然在听你说,tipps!PageDefinition不是你的原始类型,PageDefinition是,这会起作用。如果你将var PageDefinition更改为PageDefinition,你也会看到一个强制转换异常。这不可能,因为我不知道它到底是哪种类型,我只是现在它实现了IItem,这也可能是另一个Item。也许是吧不可能,我只是想看看是否可能。谢谢你,这似乎是我需要的!我会尝试实施它,然后再回来找你!提前感谢!谢谢你,这似乎是我需要的!我会尝试实施它,然后再回来找你!提前感谢!