Método com tipo de retorno genérico, mas não entrada genérica. Isso é possível?
Suponha que tenhamos umNodeData
classe:
public class NodeData<T>
{
public string Name;
public T Value;
public NodeData(string name, T value)
{
this.Name = name;
this.Value = value;
}
}
E uma baseNode
classe e classes filho que possuem várias propriedades com o tipoNodaData
:
public class Node
{
public List<NodeData<T>> listOutputs<T>()
{
var fieldInfos = GetType().GetFields();
var list = new List<NodeData<T>>();
foreach (var item in fieldInfos)
{
Type t = item.FieldType;
string name = item.Name;
if (t == typeof(NodeData<T>))
{
var output = new NodeData<T>(name, default(T));
list.Add(output);
}
}
return list;
}
}
public class TestNode : Node {
public NodeData<int> data;
public NodeData<double> data2;
public NodeData<double> data3;
public TestNode ()
{
data = new NodeData<int>("test", 111);
data2 = new NodeData<double>("test", 113);
}
}
Como você pode ver, existe um método que lista todas as saídas com o tipoT
noNode
class Para que eu possa encontrar quais são os campos de saída da classe filho em tempo de execução:
TestNode node = new TestNode ();
var list = node.listOutputs<int>(); // this returns data
Mas preciso saber como usar esse método para listar todos os NodeOutputs de qualquer tipo T. Neste exemploint
edouble
. Preciso adicionar um método com esta assinaturapublic List<NodeData<T>> listOutputs() // should return all properties data, data2, data3
. É possível ter um método como este? O tipo de retorno é genérico, mas não há argumento de tipo para o método