c# - C# 中的泛型方法

标签 c# android

我想在 c# 中创建一个通用方法,我想在其中返回一个 View 。

我有以下功能:

public static T findViewById<T>(View parent, int id)
        {
            return (T) parent.FindViewById(id);
        }

但我收到一条错误消息:-

Cannot convert type Android.Views.View to T

知道如何解决这个问题吗?

最佳答案

您的问题是代码过于通用。您根本没有约束 T,所以这些(以及更多)中的任何一个都是允许的:

var views = findViewById<int>(parent, id);
var views = findViewById<String>(parent, id);
var views = findViewById<Form>(parent, id);

views 可以是 int 或 string 或 Form。而且您不能将 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);
}

关于c# - C# 中的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563629/

相关文章:

Android GridView 绘制分隔线

android - 我在哪里可以找到 com.android.internal.R.styleable.AlertDialog_multiChoiceItemLayout 的来源?

java - Android :java. sql.SQLException:结果集中没有当前行

c# - 是否可以为字符串实现 ExpressionTree.GreaterThan 等,以便 LINQ 可以使用它

c# - 找不到类型或命名空间名称 'DevExpress' -- 错误

c# - 一个网吧软件的理想连接实现

c# - 系统托盘 notifyIcon 不接受左键单击事件

java - 从Android联系人列表中获取用户信息

java - 无法从静态上下文引用 FindViewById

c# - 使用数据库中的值加载 DataGridView 中的指定列