suppose have nodedata class:
public class nodedata<t> { public string name; public t value; public nodedata(string name, t value) { this.name = name; this.value = value; } } and base node class , child classes have several properties type nodadata:
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); } } as can see there method lists outputs type t in node class can find output fields of child class in runtime:
testnode node = new testnode (); var list = node.listoutputs<int>(); // returns data but need know how use method list nodeoutputs of type t. in example int , double. need add method signature public list<nodedata<t>> listoutputs() // should return properties data, data2, data3. possible have method this? return type generic there no type argument method.
even after edit(s) not entirely clear trying achieve here assumptions: -you want have kind of node object acts container different types of nodedata elements. -you want able return 1 list node object contains nodedata elements stored in node container, regardless of nodedata objects' type.
instead of returning list> object listoutputs methods, return non-generic version of list object. don't have deal t in method call.
the logic loops through objects in non-generic list can examine type process contained nodedata objects correctly.
important note: proposed solution no means pretty think answers question. in opinion flawed oo point of view in presented code (e.g. use of reflection) , better solution have start changing underlying data structures. can done if have more information how used, e.g. kind of logic consumes returned list.
Comments
Post a Comment