Why i can not convert an object to a generic type

84 Views Asked by At

I have problem to undrestand this issue.

I have a generic Method that give an Action<T> to handle somthing. but i can not convert this object to 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
    }
}

whats wrong with this code?

Please tell me how can i create somthing like above.

1

There are 1 best solutions below

1
mpasdanis On BEST ANSWER

The error is due to the fact that the compiler does not guarantee that the cast will be done correctly and safely.

You could use C# pattern matching :

public void T100<T>(Action<T> call) where T : T1
{
    if (this is T instance)
    {
        call(instance);
    }
    else
    {

    }
}

Usage :

Test test = new Test();
test.T100<A>(firstIstance=> firstIstance.A1()); // This will output "A"
test.T100<B>(secondIstance => secondIstance.A1()); // This will output "B"