使用任何 UIViewController 子类作为方法的通用参数
Use any UIViewController subclass as generic parameter for method
我不想重复代码,因此我想我使用了一种适合我的方法。我想要做的是使用任何 UIViewController
子类作为参数(通过引用)。我试过这样的东西
private void removeViewController<T>(ref object viewController){
if (viewController != null) {
viewController = (T)Convert.ChangeType (viewController, typeof(T));
viewController.RemoveFromParentViewController ();
viewController.Dispose ();
viewController = null;
}
}
然后这样称呼
removeFromContainer<CustomViewController> (ref customViewController);
但我无法编译。我得到
Cannot convert 'ref CustomViewController' expression to type 'ref object'
调用 removeFromContainer 和
Type 'object' does not contain a definition for 'RemoveFromParentViewController' and no extension method 'RemoveFromParentViewController' of type 'object' could be found.
在我的方法中 (removeFromContainer)。
我该如何解决?我错过了什么?
您可以将 object
转换为类型 UIViewController
并在不使用泛型的情况下使用它。
private void removeViewController(object objviewController)
{
var viewController = viewController as UIViewController
if (viewController != null)
{
viewController.RemoveFromParentViewController();
viewController.Dispose ();
}
}
我不想重复代码,因此我想我使用了一种适合我的方法。我想要做的是使用任何 UIViewController
子类作为参数(通过引用)。我试过这样的东西
private void removeViewController<T>(ref object viewController){
if (viewController != null) {
viewController = (T)Convert.ChangeType (viewController, typeof(T));
viewController.RemoveFromParentViewController ();
viewController.Dispose ();
viewController = null;
}
}
然后这样称呼
removeFromContainer<CustomViewController> (ref customViewController);
但我无法编译。我得到
Cannot convert 'ref CustomViewController' expression to type 'ref object'
调用 removeFromContainer 和
Type 'object' does not contain a definition for 'RemoveFromParentViewController' and no extension method 'RemoveFromParentViewController' of type 'object' could be found.
在我的方法中 (removeFromContainer)。
我该如何解决?我错过了什么?
您可以将 object
转换为类型 UIViewController
并在不使用泛型的情况下使用它。
private void removeViewController(object objviewController)
{
var viewController = viewController as UIViewController
if (viewController != null)
{
viewController.RemoveFromParentViewController();
viewController.Dispose ();
}
}