0

Python コードを C# に変換しようとしています

  class fwrapper:
      def __init_ _(self,function,childcount,name):
          self.function=function
          self.childcount=childcount
          self.name=name
  class node:
      def __init_ _(self,fw,children):
          self.function=fw.function
          self.name=fw.name
           self.children=children
      def evaluate(self,inp):
          results=[n.evaluate(inp) for n in self.children]
          return self.function(results)

c# で達成するのは難しいと思います。1. クラス fwrapper.function では、任意の署名を持つ関数を使用できます。2. 評価関数の戻り値の型に言及するために使用できる関数の戻り値の型を取得するには

どうもありがとう

4

2 に答える 2

0

私はこのようなものを推測していますか?

class Node {
    private FWrapper fw;
    private List<Node> children;

    public Node(FWrapper fw, List<Node> children){
        this.fw = fw;
        this.children = children;
    }

    public Evaluate(Object inp){
        var results = from child in children select child.Evaluate(inp);
        return fw.function(results);
    }

}

それは単なる出発点です。

于 2013-07-25T11:34:30.530 に答える
0

あなたが何をしようとしているのか完全にはわかりませんが、次のようなものがある場合:

public class FWrapper<TChild, TResult>{

    private int childCount;
    private string name;
    private Func<TChild, TResult> function;

    public Func<TChild, TResult> Function { get { return function; } }

    public FWrapper(Func<TChild, TResult> Function, int ChildCount, string Name){
        this.childCount = ChildCount;
        this.name = Name;
        this.function = Function;
   }
}

public class Node<TChild, TResult>{

    private FWrapper<TChild, TResult> fw;
    private IEnumerable<TChild> children;

    public Node(FWrapper<TChild, TResult> FW, IEnumerable<TChild> Children){
        this.fw = FW;
        this.children = Children;
    }

    public IEnumerable<TResult> Evaluate(){

        var results = new List<TResult>();

        foreach(var c in children){
            results.Add(fw.Function(c));
        }

        return results;
    }
}

これで、TChild をパラメーターとして取り、同じ TChild および TResult 型で動作する TResult と Node クラスを返す任意の関数を受け取る FWrapper クラスができました。たとえば、これを行うことができます (簡単な例)。

//Generic function that takes an int and returns a string
var func = new Func<int, string>(childInt => {
    var str = "'" + childInt.ToString() + "'";
    return str;
});

var fw = new FWrapper<int, string>(func, 10, "Foobar");
var children = new List<int>(){ 1,2,3,4,5,6,7,8,9,10 };

var node = new Node<int, string>(fw, children);
var results = node.Evaluate();

foreach(var r in results){
    Console.WriteLine(r);
}

//'1'
//'2'
//..
//..
//'9'
//'10'
于 2013-07-25T12:01:57.983 に答える