作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这会生成一个错误,提示我无法转换类型 ClassType
到 T
。有什么解决方法吗?
有没有办法指定 this
的类型 事实上可以转换为 T
?
public void WorkWith<T>(Action<T> method)
{
method.Invoke((T)this);
}
最佳答案
两种可能的解决方案:
不是类型安全的:
public void WorkWith<T>(Action<T> method)
{
method.Invoke((T)(object)this);
}
这不是类型安全的,因为您可以将任何具有单个参数且没有返回值的方法传递给它,例如:
WorkWith((string x) => Console.WriteLine(x));
类型安全的“版本”(使用通用约束):
public class MyClass
{
public void WorkWith<T>(Action<T> method) where T : MyClass
{
method.Invoke((T)this);
}
}
这里的要点是,为了能够将 this
转换为 T
,编译器希望确保 this
始终可转换为T
(所以需要约束)。如非类型安全示例所示,与泛型一起使用的“经典”(不安全)解决方案是通过转换为 object
。
关于c# - 将对象转换为方法泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629885/
我是一名优秀的程序员,十分优秀!