【问题标题】:Create Anonymous Method that returns a value to a variable创建将值返回给变量的匿名方法
【发布时间】:2020-11-09 07:30:37
【问题描述】:

我正在做一个 C# 项目,我想使用一个匿名的方法或函数来返回一个变量的值。

我试过这个:

    byte[] V;
    V= new byte[]()
    {
        //Some code here
        return new byte[]{0,1,2,3};
        
    }

但我有错误

如何使用匿名方法或函数向 V 变量返回值?

我只想知道如何使用匿名方法将值返回给变量。

【问题讨论】:

  • 为什么需要一个可以立即执行的匿名方法?为什么还要匿名?即使有一些逻辑可以提取到一个方法中,该方法的名称描述了它应该做什么,或者根本没有什么可以提取的。但是有局部函数
  • 请解释想要为此使用函数的理由,而不是将代码直接放在主代码路径中。在您问题的代码中,根本不需要函数,知道为什么要这样做可能表明更好的方法。

标签: c# lambda anonymous-function


【解决方案1】:

有几个机会,都有自己的优点和缺点。

  1. 代表

    byte[] V;
    V= new Func<byte[]>(() => ()
    {
        //Some code here
        return new byte[]{0,1,2,3};    
    }();
    
  2. 一个局部函数

    void DoSomething()
    {
        byte[] V;
    
        byte[]MyLocalFunction()
        {
            //Some code here
            return new byte[]{0,1,2,3};
        }
        V = MyLocalFunction();
    }
    
  3. 一个带有名字的普通私有方法

我个人最喜欢 3,因为您的名称清楚地描述了该方法应该做什么。 2 也有一个名字,实际上编译为你的类中的一个私有静态方法,所以它看起来也很合适。 1 只会让您的代码难以理解和阅读。有一些用例,但在大多数情况下,我不建议使用它。

因此,如果您认为应该以某种方式提取成员中的某些逻辑,则可以为其命名。这样,如果需要,您以后可以轻松地将其提取到另一个类中。

【讨论】:

  • 如果您在 .net 核心上并且数据应该是只读的,则 ReadOnlySpan 在性能方面要好得多,因为它最终会被写入二进制文件的静态数据部分.
  • 非常感谢#HimBromBeere,这是一个非常有益的答案,我非常感谢您,再次让我非常感谢先生,请接受我所有的尊重。
猜你喜欢
  • 2015-01-25
  • 1970-01-01
  • 2012-05-18
  • 2013-07-06
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多