gpt4 book ai didi

c# - 将对象转换为方法泛型类型

转载 作者:太空狗 更新时间:2023-10-29 21:32:45 24 4
gpt4 key购买 nike

这会生成一个错误,提示我无法转换类型 ClassTypeT。有什么解决方法吗?

有没有办法指定 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com