[英]Generic method in C#
我试图在c#中创建一个通用方法,以便返回视图。
我有以下功能:
public static T findViewById<T>(View parent, int id)
{
return (T) parent.FindViewById(id);
}
但我得到一个错误说:
Cannot convert type Android.Views.View to T
知道我该如何解决吗?
您可以将通用参数T 限制为View
:
public static T findViewById<T>(View parent, int id)
where T: View
{
return (T) parent.FindViewById(id);
}
此约束使查找错误(如findViewById<int>
等)变得容易。
我认为View
与Android.Views.View
相同。 在这种情况下,您可以编写:
public static T findViewById<T>(T parent, int id)
{
return parent.FindViewById(id);
} where T : View
您的问题是代码太通用。 您根本没有约束T,因此这些(或更多)中的任何一个都是允许的:
var views = findViewById<int>(parent, id);
var views = findViewById<String>(parent, id);
var views = findViewById<Form>(parent, id);
并且views
将是一个int或一个字符串或一个Form。 而且您无法对其中任何一个View
进行投射。
因此,基本上,您会遇到编译器错误,因为Android.Views.View
不能Android.Views.View
为所有可能的T。
为此,您需要在T上添加一个约束以限制T,以便它只能是Android.Views.View
public static T findViewById<T>(View parent, int id)
where T : Android.Views.Views
{
return (T) parent.FindViewById(id);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.