为什么我无法将对象转换为泛型类型

问题描述 投票:0回答:1

我无法理解这个问题。

我有一个通用方法,可以提供

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# generics .net-core action
1个回答
0
投票

该错误是由于编译器不保证强制转换将正确且安全地完成。

您可以使用 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"
© www.soinside.com 2019 - 2024. All rights reserved.