我无法理解这个问题。
我有一个通用方法,可以提供
Action<T>
来处理某些事情。但我无法将此对象转换为 T。
public interface T1 { }
public interface A : T1
{
void A1();
}
public interface B : T1
{
void A1();
}
public class Test : A, B
{
void A.A1()
{
Console.WriteLine("A");
}
void B.A1()
{
Console.WriteLine( "B");
}
public void T100<T>(Action<T> call) where T : T1
{
call((T)this); // error comes from here
}
}
这段代码有什么问题吗?
请告诉我如何创建类似上面的东西。
该错误是由于编译器不保证强制转换将正确且安全地完成。
您可以使用 C# 模式匹配:
public void T100<T>(Action<T> call) where T : T1
{
if (this is T instance)
{
call(instance);
}
else
{
}
}
用法:
Test test = new Test();
test.T100<A>(firstIstance=> firstIstance.A1()); // This will output "A"
test.T100<B>(secondIstance => secondIstance.A1()); // This will output "B"