繁体   English   中英

C#中的通用方法

[英]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>等)变得容易。

我认为ViewAndroid.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM