反映参数名称:滥用 C# lambda 表达式还是语法精妙? [关闭]

2024-04-14

我正在看MvcContrib http://www.codeplex.com/MVCContrib网格组件,我对其中使用的语法技巧着迷,但同时又感到排斥网格语法 http://www.jeremyskinner.co.uk/2009/02/22/rewriting-the-mvccontrib-grid-part-2-new-syntax/:

.Attributes(style => "width:100%")

上面的语法将生成的 HTML 的 style 属性设置为width:100%。现在如果你注意的话,“风格”没有被指定。它是从name表达式中的参数!我必须深入研究这一点并找到“魔法”发生的地方:

Hash(params Func<object, TValue>[] hash)
{
    foreach (var func in hash)
    {
        Add(func.Method.GetParameters()[0].Name, func(null));
    }
}

事实上,代码正在使用正式的编译时参数名称来创建属性名称-值对的字典。由此产生的语法结构确实非常具有表现力,但同时也非常危险。

lambda 表达式的一般使用允许替换names使用无副作用。我在一本书上看到一个例子,上面写着collection.ForEach(book => Fire.Burn(book))我知道我可以写我的代码collection.ForEach(log => Fire.Burn(log)) and 这意味着同样的事情。但是突然间有了 MvcContrib Grid 语法,我发现代码可以根据我为变量选择的名称主动查找并做出决策!

那么这是 C# 3.5/4.0 社区和 lambda 表达式爱好者的常见做法吗?或者是一个我不应该担心的流氓一招特立独行者?


我觉得这不太奇怪,因为name,但是因为lambda 是不必要的;它可以使用匿名类型并且更加灵活:

.Attributes(new { style = "width:100%", @class="foo", blip=123 });

这是在 ASP.NET MVC 的大部分(例如)中使用的模式,并且具有其他用途 http://marcgravell.blogspot.com/2009/10/pass-data-simply-learning-from-jquery.html (a caveat http://marcgravell.blogspot.com/2009/10/anonymous-type-tricks-clarification.html,还请注意阿延德的想法 http://ayende.com/Blog/archive/2009/10/14/what-is-up-with-the-entity-framework-vnext.aspx如果名称是一个魔法值而不是特定于调用者的值)

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

反映参数名称:滥用 C# lambda 表达式还是语法精妙? [关闭] 的相关文章

  • ASP.NET MVC 4 Web Api 和 REST 经典服务之间的区别

    我看到了ASP Net MVC4 WebApi将服务公开为 Rest 服务 但实际上和正常有什么区别Rest and ASP Net MVC4 WebApi 我不确定你的意思normal Rest REST http en wikipedi
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • Caliburn.Micro - ShowDialog() 如何关闭对话框?

    EDIT 新信息 刚刚设法让记录器工作 老实说 我不知道 cm 有一个 并且在尝试使用时收到此消息TryClose TryClose requires a parent IConductor or a view with a Close m
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 最新 .Net MongoDb.Driver 的连接问题

    我创建了一个 MongoLab 沙箱数据库 我与 MongoChef 连接 效果很好 我通过 Nuget 安装了 MongoDB Driver 2 2 2 我编写了一些简单的 C 演示代码 但就是无法使其工作 连接字符串是直接从 Mongo
  • ASP.NET - 在 RenderContent 调用中将事件处理程序添加到 Repeater 内的 LinkBut​​ton

    我有一个加载自定义用户控件的 Sharepoint WebPart 用户控件包含一个 Repeater 而 Repeater 又包含多个 LinkBut ton 在 Web 部件的 RenderContent 调用中 我有一些用于添加事件处
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 应用程序处于中断模式。您的应用程序已进入中断状态,

    我发现自己遇到了同样的问题here https stackoverflow com questions 36204009 disable break mode page in vs2015 我在 dll 中使用 Windows 窗体 这是针
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 在 C# 中使用命名空间别名有什么好处? [复制]

    这个问题在这里已经有答案了 使用命名空间别名有什么好处 仅仅是为了简化编码吗 仅当与类发生冲突时我才使用名称空间别名 对我来说 这根本没有简化 我的意见是 如果没有必要 就不要使用
  • 传递数组时在 C 中的函数参数中强制指定数组大小

    Context 在 C 中 我有一个以数组作为参数的函数 该参数用作该函数的输出 输出的大小始终相同 我会 让阅读代码的人清楚所需的大小 不过它已经在函数注释中了 理想情况下 编译会输出警告或错误 这样我就可以在编译时而不是运行时防止出现问
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 为什么 printf 仍然可以在 RAX 小于 XMM 寄存器中 FP 参数数量的情况下工作?

    我正在关注Linux 64系统中的 开始x64汇编编程 一书 我正在使用 NASM 和 gcc 在关于浮点运算的章节中 本书指定了以下用于添加 2 个浮点数的代码 在本书和其他在线资源中 我读到寄存器 RAX 根据调用约定指定要使用的 XM
  • 将数组作为声音播放并并行记录其输出

    我知道 Octave MATLAB 可以将数组作为声音播放 但我想知道 Octave 是否可以做到这一点 我想循环播放一系列频率 并让 Octave 使用计算机上的扬声器播放它们 并让 Octave 也记录使用麦克风输入的声音来获取最大值
  • 关于僵尸进程和线程的问题

    自从我阅读一些有关进程和线程的新主题以来 我脑海中浮现出这些问题 如果有人能帮助我 我会很高兴 1 如果一个线程被标记为不可取消 然后该进程在临界区内被终止 会发生什么 2 我们的程序是否有操作系统已知的主线程 我的意思是操作系统是否给予程
  • MSYS2环境的使用

    我想彻底了解MSYS2平台环境的使用情况 部分描述可在以下位置找到 https www msys2 org docs environments https www msys2 org docs environments 我理解的事情 MSY
  • 如何在 MongoDB 的 Linq 查询中使用 .Contains 和 ToLower?

    MongoDB C Linq 如何在 Linq 查询中使用 contains 和 ToLower List
  • 正则表达式将 10 位数字与特定模式完全匹配

    假设我给出一个模式 123 或 1234 我想匹配以该模式开头的任何 10 位数字 它应该正好有 10 位数字 Example 模式 123 应匹配 1234567890 但不匹配 12345678 我尝试了这个正则表达式 123 d 0
  • 按位运算符的结果是如何产生的?

    我很惊讶我在谷歌上找不到这个听起来简单的问题的答案 在检查了大约十几个不同的页面之后 我只想在这里问 根据这一页 http www leepoint net notes java data expressions bitops html 3
  • 如何在 Android 上回滚事务?

    这是交易的标准习惯用法 db beginTransaction try db setTransactionSuccessful finally db endTransaction 我想添加一个 catch 块 并且我想发出回滚 有可能吗 我
  • EJB注入时出现空指针异常

    我用一个无状态 Ejb 编写了非常简单的 Web 应用程序 当我实现接口时 有趣的时刻到来了 ejb 依赖注入不起作用 web xml
  • 如何使用 python 中的 spacy 库将句子转换为问题 [请参阅下面的我的代码进行更正]

    我需要使用 python 中的 spacy 将任何句子转换为问题 我下面的代码太长了 我需要做更多的工作才能将任何句子完成为问题格式 现在在这段代码中我根据以下条件制定条件是形式 需要形式 有形式 做形式通过检查过去时和现在时 输入 尼娜拉
  • 带有多行标签的 Tkinter 表单?

    我正在构建一个通用的 数据驱动的 Tkinter 表单 每行左侧有一个标签 右侧有一个输入字段 对于简单的测试数据 可以使用标签作为标签文本 但是当所需的标签文本比标签字段长时 它只会被截断 一旦构建了表单 我就不需要动态改变标签文本 文本
  • WPF 中的 PrintDialog.PrinterSettings 等效项

    我正在尝试向我正在编写的 C WPF 应用程序添加打印支持 对此我感到抓狂 我正在尝试从 WPF 应用程序中的窗口打印单个图像 该图像是运输标签 打印机是装有 4 x6 运输标签纸的热敏打印机 打印的代码如下 PrintDialog pd
  • springrabbitmq:无法将id设置为属性?

    我有一个属性文件 其中包含队列 其值为queue name 如果我在其他请使用该属性 那么它可以工作 但如果我在 id 上使用它 那么它会失败
  • 如何使用基于类的视图为 Django 指定自定义 404 视图?

    使用 Django 您可以通过在根目录中执行此操作来覆盖默认的 404 页面urls py handler404 path to views custom404 使用基于类的视图时如何做到这一点 我无法弄清楚 文档似乎也没有说什么 我试过了
  • MatDialog 内部的动画不起作用

    我有组件 对话框 我将在其中动态添加 删除组件 另外 我确实在进入 离开时有动画 因此当删除组件并添加新组件时 我希望以动画方式滑入滑出 但 MatDialog 内部不起作用 我认为问题出在动画上 但是当我将在对话框中显示的组件插入到使用
  • 如何显示由onclick事件触发的div

    我有两个divs 我想显示一个div 其中还有其他div在里面 当onclick事件被触发 任何帮助或建议将不胜感激 干得好 div display none document querySelector button addEventLi
  • 为什么不总是配置事件中心分区的最大数量?

    The Azure 事件中心概述 https azure microsoft com en us documentation articles event hubs overview 文章指出以下内容 分区数量在事件中心创建时指定 且必须在
  • C# - Debug.WriteLine - 此函数是异步的吗?

    我刚刚遇到一种情况 我正在调试一个迭代大量数据的线程 我正在使用 Debug WriteLine 打印正在处理的记录 刚刚发生的事情是该线程报告它已处理所有记录 但是 Visual Studio 的调试窗口仍然显示 我确信线程已经完成了它的
  • 如何使用自定义挂钩在组件之间共享状态数据?

    我有以下自定义挂钩useFlash import useState from react export default function useFlash const messages setMessages useState const
  • 反映参数名称:滥用 C# lambda 表达式还是语法精妙? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在看MvcContrib http www codeplex com MVCContrib网格组件 我对其中使用的语法技巧着迷 但同时又感到