使用动态类型从匿名对象获取值是不好的做法吗?

2024-02-20

注意:我的问题与 ASP.Net 无关。

我有一个使用 LINQ 与匿名集合绑定的 GridView。

我希望在网格中的事件处理程序中从绑定对象获取一个值,该对象无法转换为任何静态类型,因为它的类型是匿名的。

为了解决这个问题我使用动态类型来获取值

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        dynamic dataItem = e.Row.DataItem; // getting the bound object

        bool isCurrentEntity = dataItem.IsCurrentEntity;
        if (isCurrentEntity)
            e.Row.Style.Add(HtmlTextWriterStyle.FontWeight, "Bold");
    }
}

我的问题是,在这里使用动态类型是一种不好的做法吗?


是的,我认为这是一种不好的做法。如果您想在代码中的多个位置使用匿名类型,那么将其设为名义类型就足够重要了。记住,动态再次启动编译器,这是一个严重的性能成本,而且它以开发者的便利为代价,换取隐藏用户发现的bug,这是一笔严重的客户关系成本。

Dynamic 的设计目的是使代码already会变得缓慢而脆弱,读起来更愉快。如果您已经要使用反射,或者已经要与旧版 COM 自动化对象对话,那么您就是already我们将进入一个充满缓慢、危险代码的世界。它也可能是易于阅读的缓慢危险的代码。如果你能避免陷入那个世界,那就去做;使用标称类型。

或者,如果您想使用匿名类型and让它静态类型化,使用“cast by example”技巧:

object anon;
void M1()
{
    anon = new { X = 123, Y = 456 };
}
void M2()
{ 
    // we want to get anon.X, but it is anonymous. How do we
    // trick the compiler into it?

    var cast = CastByExample(new { X = 0, Y = 0 }, anon);
    int x = cast.X;  // gets anon.X!
}

static T CastByExample<T>(T example, object ob) where T : class
{
    return (T)ob;
}

偷偷摸摸的,嗯?示例转换技巧使用泛型类型推断来表示“我认为这里的这个对象与这里的这个对象具有相同的匿名类型结构”。

请注意,通过示例进行转换只能在同一个程序集中工作。例如,您不能将在一个程序集中创建的匿名类型转换为在另一个程序集中创建的匿名类型。

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

使用动态类型从匿名对象获取值是不好的做法吗? 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • FBConnect facebook.stream.publish 与 NSDictionary 问题

    我有这段代码 到目前为止还无法发送 Facebook 请求 NSDictionary firstDict NSDictionary dictionaryWithObjectsAndKeys image Type http mysite co
  • 如何查看k8s部署历史?

    I tried kubectl rollout history deployment my app 它只返回No rollout history found 我认为存在一种方法来获取所有部署历史记录 这将会非常有帮助 参考官方文档 http
  • 该平台不支持 LocalDB

    我正在尝试启动 Net Core 2 0申请于Ubuntu 17 04 我之前在Windows 10上开发过 效果很好 问题是当我跑步时dotnet ef database update我得到下一个例外 System PlatformNot
  • 为 nextjs 项目设置关键 CSS 并删除不需要的 CSS 的正确方法

    我有一个 NextJS 项目设置 gt https github com stefanre1 nextjs setup https github com stefanre1 nextjs setup 我想知道从 Tailwindcss 中删
  • 在 iTunes 中设置 iOS 应用程序语言

    我想在 iTunes 中设置应用程序语言 它总是只显示英语 但我想在 iTunes 中显示两种语言 我不想对应用程序代码进行任何更改 因为我已经按设备语言管理这两种语言 示例图像包含多种语言 如英语 中文 荷兰语和法语 我目前也遇到同样的问
  • 如何在 Visual Studio Code 中关闭保存时的文本格式?

    我不知道为什么我的代码在保存时自动格式化 并且由于某种原因更改了布局 我发现这是由于保存时自动格式化造成的 如何在 Visual Studio Code 中关闭自动保存 对于 Windows 以下是关闭自动完成功能所需遵循的一些基本步骤 S
  • Safari getDisplayMedia 必须从用户手势处理程序调用

    我的网站具有截屏和共享屏幕功能 在 chrome 和 firefox 上一切正常 但在 safari 上我收到错误 必须从用户手势处理程序调用 getDisplayMedia 是否可以从代码本身模拟用户手势 我尝试过使用myButton c
  • ScrollViewReader/scrollTo(_:anchor:) 无法可靠工作

    我已经建立了一个ScrollView其中包含 0 3 个图像和一个多行文本字段VStack 我还添加了一个ScrollViewReader在滚动视图内 并在某些事件发生时使用它滚动到文本字段的底部 用户开始键入 图像集合更改 关键是 有时有
  • 当输入为“???”时,StringUtils isNumeric 返回 true,为什么? [复制]

    这个问题在这里已经有答案了 我正在阅读 commons apache orgisNumeric http commons apache org proper commons lang apidocs org apache commons l
  • MATLAB 中的神经网络,初始权重 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我用 newff 在 MATLAB 中制作了神经网络 当您使用相同的输入和输出对其进行训练时 不同运行的训练结果会有所不同 我知道这种
  • 我想用Python从点云生成网格

    我有来自人体不同部位的点云 比如眼睛 我想做一个网格 我尝试使用 Mayavi 和 Delaunay 但没有得到好的网格 云的点完全混乱 我的点云位于 npz 文件中 使用 Mayavi 然后我想将模型保存在 obj 或 stl 文件中 但
  • 从方法链中使用的临时移出

    我正在尝试做类似的事情 include
  • 是否存在空 URI?

    我正在开发一个解析 URI 的例程 在明显的情况下 有一个空字符串的情况 空字符串是有效输入吗 空字符串的结果 URI 会是什么 空字符串不可能是 URI 这通用 URI 语法 https www rfc editor org rfc rf
  • 防止周末和节假日期间发出 Grafana 警报

    背景 我们正在使用 Grafana 警报 在周末和节假日期间 我们的一些指标会较低 但这实际上没关系 但仅限于那些日子 Problem 在周末和节假日期间 即使系统实际上没问题 我们也会收到来自 Grafana 的警报 Question 我
  • Genshin - 如何打印范围内的所有变量

    很简单 我想打印出 genshi 模板范围内的所有变量 作为调试和发现措施 有办法做到吗 标准Python函数locals http docs python org library functions html locals 返回一个字典
  • 如何从 matplotlib 获取 AxesImages

    所有 我使用这样的代码来绘制图像 import matplotlib pyplot as plt plt imshow array cmap jet plt show 但是 现在我想得到句柄 im of im plt imshow arra
  • 应该学习没有 jQuery 的 angularjs 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是客户端 JavaScript 的新手 在一个网络项目中 我发现了 AngularJS 并使用了一些基础知识 我应该学习 jQuery 还是只
  • laravel nova 隐藏索引页面上的编辑按钮

    如何禁用 nova 索引页面上的编辑 删除按钮并仍然允许在详细信息页面中 如果我将创建一个策略 这将禁用到处的操作 我想允许在详细信息页面中编辑和删除 但只想删除这些按钮从索引 正在做类似的事情 public function update
  • 使用 rvest 抓取时,在缺失值的地方输入 NA

    我想用rvest抓取一个页面 其中包含最近一次会议上演讲的标题和运行时间 然后将这些值组合成一个tibble library tibble library rvest url lt https channel9 msdn com Event
  • 使用动态类型从匿名对象获取值是不好的做法吗?

    注意 我的问题与 ASP Net 无关 我有一个使用 LINQ 与匿名集合绑定的 GridView 我希望在网格中的事件处理程序中从绑定对象获取一个值 该对象无法转换为任何静态类型 因为它的类型是匿名的 为了解决这个问题我使用动态类型来获取