C# - 初始化器内类字段的闭包?

2024-04-03

考虑以下代码:

using System;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var square = new Square(4);
            Console.WriteLine(square.Calculate());
        }
    }

    class MathOp
    {        
        protected MathOp(Func<int> calc) { _calc = calc; }
        public int Calculate() { return _calc(); }
        private Func<int> _calc;
    }

    class Square : MathOp
    {
        public Square(int operand)
            : base(() => _operand * _operand)  // runtime exception
        {
            _operand = operand;
        }

        private int _operand;
    }
}

(忽略类设计;我实际上并不是在编写计算器!此代码仅代表一个需要一段时间才能缩小范围的更大问题的最小重现)

我希望它能够:

  • 打印“16”,或者
  • 如果在这种情况下不允许关闭成员字段,则会引发编译时错误

相反,我在指定的行抛出了一个无意义的异常。在 3.0 CLR 上,它是空引用异常;在 Silverlight CLR 上,这是臭名昭著的操作可能会破坏运行时的稳定性。


这是一个已修复的编译器错误。该代码从一开始就不应该是合法的,如果我们要允许它,我们至少应该生成有效的代码。我的错。对于给您带来的不便,我们深表歉意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 初始化器内类字段的闭包? 的相关文章

  • Google 电子表格 API C# 在批量更新时缺少资源版本 ID

    我尝试使用电子表格 api C v2 2 0 0 批量更新空单元格 foreach var csvline in csv var csvlineParsed csvline Split for uint index 0 index lt c
  • 如何从内容页检索母版页中的控件

    当我最近问一个关于如何从内容页检索母版页中的控件 许多人建议我使用内容页面中的这段代码 Label lbl this Master Page FindControl uxLabel as Label Note any server cont
  • 从c#读取android上的logcat

    我正在考虑制作一个 C 程序 该程序将从 Android 设备读取 logcat 输出并将其读入 C 程序 最初 它应该在手机连接时执行此操作 并且不需要在手机上安装特定应用程序 c 程序就能够检索 logcat 输出 此外 手机不应该需要
  • 块作用域链接 C 标准

    以下标识符没有链接 声明为对象或函数之外的任何标识符 声明为函数参数的标识符 未使用存储类说明符 extern 声明的对象的块作用域标识符 static int a no linkage 对于在该标识符的先前声明可见的范围内使用存储类说明符
  • 有没有一种快速的方法将字符绘制到屏幕上?

    我用 Java 开发了一个 Matrix 主题应用程序 并正在尝试移植到 C 然而我发现后者的DrawString当绘制大量单个字符时 该方法的性能要差得多 因此我希望存在以下两种可能性之一 还有一种绘制大量单个字符的替代方法 速度要快得多
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 在 C++11 中使用 decltype() 时出错(在 gcc 4.7.0 中创建不透明错误消息)

    使用以下代码 我的原始代码的精简版本 include
  • 为什么我们需要在 getline(cin, string) 之前使用 cin.ignore() ? [复制]

    这个问题在这里已经有答案了 为什么我们需要使用cin ignore 在输入字符串之前 反手过程是怎样的 为什么它会跳过字符串中的输入 如果我们调用getline函数用于更多变量 如果我们不使用cin ignore 你只需要使用cin ign
  • 了解多重继承中的 vptr 吗?

    我试图理解 Effective C 一书中的陈述 下面是多重继承的继承图 现在书上说vptr需要每个类中单独的内存 它还做出以下声明 上图中的一个奇怪之处是 尽管涉及四个类 但只有三个 vptr 如果实现可以随意生成四个 vptr 但三个就
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • ASP.NET MVC 应用程序中的工作单元模式

    我一直在看这个优秀的blog http www nhforge org wikis patternsandpractices nhibernate and the unit of work pattern aspx标题为 NHibernat
  • 按常量 id 对自定义类型的向量进行排序

    我需要对自定义类型的向量进行排序std vector
  • 用 while 循环打开文件 - C [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 各位程序员大家好 我的问题不大 我不知道如何打开具有不同数字 在文件名中 的文件 从 1 到存在的任意数量的文件 例如 我有两个 或最
  • 为什么我不能将一个非 const 指针传递给一个函数,该函数将以对 const 指针的引用作为其参数

    这是一个代码片段 希望能够传达我想要做的事情 void updatePointer const int i i int main int array 5 int arrayPtr array updatePointer arrayPtr r
  • 删除指向对象的 C++ 指针

    我认为删除命令会释放我分配的内存 有人可以解释为什么删除后我似乎仍然有内存在使用吗 class Test public int time int main Test e e new Test e gt time 1 cout lt lt e
  • 如何检查类型是否显式/隐式可构造?

    如何检查某种类型是否可以从其他类型显式 或反之亦然隐式 构造 这种情况下有SFINAE的伎俩吗 我可以写is explicitly constructible as a 的组合std is constructible and std is
  • 如何在非托管 ATL GUI 中嵌入 Windows 窗体?

    我有一个使 COM 可见的 Windows 窗体用户控件 现在我想将该控件嵌入到 ATL 对话框 GUI 中 ATL项目 非托管C 只应获取winform的progID并在运行时动态创建和嵌入它 这可能吗 如果可以 我该怎么做 我不确定 A
  • 转换位域结构的字节顺序

    我需要将位字段结构从小端架构转换为大端架构 最好的方法是什么 因为如果我只是交换结构元素 字节边界就会出现问题 前结构是 struct unsigned int b1 1 unsigned int b2 8 unsigned int b3
  • 从 C 数组中删除大量元素的最快方法

    我有包含数千个甚至更多元素的动态数组 为了不消耗大量内存 我可以从中删除不需要的元素 即元素已被使用 不再需要它们 所以从一开始我可以通过估计每次删除元素后所需的最大大小来分配较小的内存大小 我用这个方法但是需要很长很长的时间才能完成 有时
  • 如何使用 Visual Studio 扩展从当前解决方案中收集类型?

    我创建了 Visual Studio 2012 包 使用 VS2012 SDK 该扩展 如果安装在客户端的 IDE 环境上 应该具有从开发人员正在开发的当前打开的解决方案中收集所有特定类型的功能 Visual Studio Designer

随机推荐