我正在使用 Linq To XML

new XElement("Prefix", Prefix == null ? "" : Prefix)

但我想在将前缀添加到 xml 之前对其进行一些计算,例如消除空格、特殊字符、一些计算等

我不想创建函数,因为这些函数对我的程序的任何其他部分都没有任何帮助,但是有没有办法创建内联函数?

最佳答案

是的,C# 支持。有几种可用的语法。

在 C# 2.0 中添加了

  • Anonymous methods:
    Func<int, int, int> add = delegate(int x, int y)
    {
        return x + y;
    };
    Action<int> print = delegate(int x)
    {
        Console.WriteLine(x);
    }
    Action<int> helloWorld = delegate // parameters can be elided if ignored
    {
        Console.WriteLine("Hello world!");
    }
    
  • Lambdas 是 C# 3.0 中的新内容,有两种风格。
  • 表达式 lambdas:
    Func<int, int, int> add = (int x, int y) => x + y; // or...
    Func<int, int, int> add = (x, y) => x + y; // types are inferred by the compiler
    
  • 语句 lambdas:
    Action<int> print = (int x) => { Console.WriteLine(x); };
    Action<int> print = x => { Console.WriteLine(x); }; // inferred types
    Func<int, int, int> add = (x, y) => { return x + y; };
    
  • Local functions 已在 C# 7.0 中引入:
    int add(int x, int y) => x + y;
    void print(int x) { Console.WriteLine(x); }
    

  • 这些基本上有两种不同的类型: Func Action Func s 返回值但 Action s 没有。 Func 的最后一个类型参数是返回类型;所有其他都是参数类型。

    有不同名称的相似类型,但内联声明它们的语法是相同的。一个例子是 Comparison<T> ,大致相当于 Func<T, T, int>
    Func<string, string, int> compare1 = (l,r) => 1;
    Comparison<string> compare2 = (l, r) => 1;
    Comparison<string> compare3 = compare1; // this one only works from C# 4.0 onwards
    

    这些可以直接调用,就好像它们是常规方法一样:
    int x = add(23, 17); // x == 40
    print(x); // outputs 40
    helloWorld(x); // helloWorld has one int parameter declared: Action<int>
                   // even though it does not make any use of it.
    

    关于c# - 如何在 C# 中创建内联函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4900069/

    10-17 00:58