可以在方法中创建方法吗?

时间:2014-10-21 00:15:26

标签: c#

如何在不使用NestedClass的情况下在方法内创建方法?

例如,我想调用类似ff的方法:

Method1("sample string").Method2(12345).ToString();

我想的方法是:

public string Method1(string text)
{
   string Method2(int num1)
   {
      return text + num1;
   }
   return Method2;
}

或者

public string Method1(string text).Method2(int num1)
{
    Return text + num1;
}
这样的东西存在吗?如果是这样的那种方法是什么?

4 个答案:

答案 0 :(得分:2)

您可以返回Func(带有返回值的方法)或Action(无返回值)

public Func<int> Example()
{
    return () => 10
}

public Action<int> ExmapleAction()
{
    (i) => Console.WriteLine(i) // doesn't return, but acts on passed value
}

在您的情况下,您可以执行以下操作:

public Func<string, object> Method1(string value) { return (s) => new object(); }

并称之为:

Method1("value")("otherValue");

如果您设置链接方法,那么不需要创建特定类型的唯一方法就是扩展方法(Steve的回答)

答案 1 :(得分:2)

您无法在c#中执行嵌套方法。但是扩展方法可以做你想做的事。

//xxclass
public string Method1(string text)
{
   return text;
}

public static class stringExtension
{
    public static string Method2(this string s, int num1)
    {
       return s + num1;
    }
}


Method1("sample string").Method2(12345).ToString();

答案 2 :(得分:1)

public string Method1(string text)
{
    Func<string,string,string> method = (val1,val2) => {return val1 + val2}; 

    return method("hello", "world");
}

如果您需要本地功能,请使用委托。如果需要void方法,也可以使用Action,因为Func必须返回一个值。

答案 3 :(得分:0)

您似乎正在寻找Fluent Interface