1
Есть ли способ выполнить следующее? Вот некоторый упрощенный пол псевдо код, что я пытаюсь сделать:Возможно ли создание анонимных/делегатов, как показано на C#?
class Foo {
static public FUNCTION one(int foo, int bar) {
return List<Vector> FUNCTION(int num) {
List<Vector> v = new List<Vector>();
for (int i = 0; i < num; i++) {
v.Add(new Vector(1+foo, 1+bar));
}
return v;
}
static public FUNCTION two(int foo, int bar) {
return List<Vector> FUNCTION(int num) {
List<Vector> v = new List<Vector>();
// Do something else?
return v;
}
}
}
Тогда я хотел бы назвать это так:
generic = Foo.one(1, 2);
List<Vector> v = generic(2);
generic = Foo.two(1, 2);
List<Vector> v = generic(2);
Я думаю, что это вид вдоль линий что Я хочу, но я не уверен, как передать первый набор аргументов в.
public static Func<int, int, List<Vector>> one()
{
Func<int, List<Vector>> func = (int num) =>
{
List<Vector> v = new List<Vector>();
return v;
};
return func;
}
Я считаю, что это именно то, что я пытался сделать. Однако у меня есть один вопрос. Должны ли совпадать обе подписи Func? Вы можете сделать что-то вроде: public static Func> one (int foo, int bar) { Func > func = (num, num2) => {}; return func; } –
williamt
Конечно нет. Тип возвращаемого объекта должен быть тем же (или производным), что и определено в сигнатуре функции. Вы также не можете вернуть целое число из функции, которая ожидает возвращаемое значение строки. Если вы хотите вернуть объект 'Func>', просто определите его в обратной сигнатуре вашей 'one' функции. –
Fratyx