Вы очень близки в своем коде. Вы можете сделать if (item is X x_item)
и затем использовать x_item
как тип X
. Вот так:
public class Main<T> where T : A, new()
{
public void callValue(T item)
{
if (item is B b_item)
{
Console.WriteLine(item.a + "||" + b_item.b);
}
if (item is C c_item)
{
Console.WriteLine(item.a + "||" + c_item.c);
}
}
}
Но, кажется, очень странно иметь такой обобщенный метод c.
Я мог бы, например, сделать это:
public class D : A
{
public int d;
}
И тогда это:
var m = new Main<D>();
m.callValue(new D());
Если это так, то какой смысл пытаться привести к B
или C
?
У вас плохой дизайн здесь.