我们如何检查动态粘土对象是否具有属性?

2024-01-14

我有一个动态对象,我认为是用 Clay 实现的。它具有两个可能的属性名称之一。我想使用任何可用的属性名称。以下不起作用:

dynamic workItemPart = item.WorkItem; // is an Orchard.ContentManagement.ContentPart
var learnMore = workItemPart.LearnMore ?? workItemPart.LearnMoreField;

它抛出一个Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:

不包含“了解更多”的定义

我们如何检查动态 Clay 对象是否具有属性? 例如,在 JavaScript 中,我们可以执行以下操作。 http://repl.it/WUJ

var workItemPart = {
    LearnMoreField: "Sure"    
    }
console.log(workItemPart.LearnMore || workItemPart.LearnMoreField);

C# 和 Clay 中还有这么简洁的东西吗?

Related:

Orchard.ContentManagement.ContentPart 是用 Clay 实现的吗? https://stackoverflow.com/questions/25166799/is-orchard-contentmanagement-contentpart-implemented-with-clay

https://twitter.com/bleroy/status/497078654405312512 https://twitter.com/bleroy/status/497078654405312512


您还可以使用索引方法:

var learnMore = workItemPart["LearnMore"] != null ? 
     workItemPart.LearnMore : workItemPart.LearnMoreField;

希望这可以帮助。

UPDATE

我不知道为什么没有。两种方法都应该有效。

        dynamic New = new ClayFactory();
        var person = New.Person();
        person.skill = "Outstanding";
        var talent = person.talent;
        var talentTwo = person["talent"];
        var skill = person.talent ?? person.skill;
        Console.WriteLine(skill);
        skill = person.skill ?? person.talent;
        Console.WriteLine(skill);

也许是 Orchard 给你扔了一个曲线球......

有趣的是,空合并运算符没有正确处理第一个测试用例。但是,标准测试成功:

        skill = person.talent != null ? person.talent : person.skill;
        Console.WriteLine(skill);

目前不知道该给您什么建议。

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

我们如何检查动态粘土对象是否具有属性? 的相关文章

随机推荐

  • 检测到的 JDK 版本:1.6.0-24 不在允许范围 1.7 内

    当我运行命令时 mvn clean package 我收到错误 Detected JDK Version 1 6 0 24 is not in the allowed range 1 7 如何修复上述错误 我尝试检查安装的jdk版本并得到了
  • django模型管理添加表单卡住了

    考虑一下这个 admin register Personal site admin site class PersonalAdmin admin ModelAdmin form ChangePersonalForm add form Add
  • 正则表达式匹配额外的空组

    我是正则表达式领域的新手 我下面发布的所有内容都是我的代码中的简化示例 我有一根绳子 比方说test 1 some 2 foo bar 4 我想替换为title test 1 title some 2 title foo title bar
  • 如何在 MVC 4 中不指定表单区域

    我有一个 MVC 应用程序 其中配置了区域 注销链接出现在布局页面中 因此它会显示在每个页面上 当我单击注销时 它总是将其附加到它所在的区域中 我只想让它转到帐户 注销 无区域 我尝试了以下方法 但没有成功 有什么建议吗 using Htm
  • WPF richTextBox问题

    如果一行文本换行到另一行 如何以编程方式确定字符串中的断点 示例 输入字符串 这是对文本换行行的测试 Based on the width of the richTextBox it could display This is a test
  • 如何在 Blazor 中将 AuthorizeView 标记与自定义身份验证逻辑结合使用

    我在 Blazor 服务器应用程序中有一个自定义身份验证系统 具有自定义数据库和一些逻辑 我希望受益于 razor 中内置的 AuthorizeView 标签 但我不知道如何在没有 AspNetCore Identity 的情况下使用它 现
  • Openssl:在 SSL_CTX_load_verify_locations API 中使用 CApath 参数时证书验证失败

    我正在尝试与服务器计算机建立 TLS 连接 我已使用 openssl CLI 命令创建了根 CA 证书和服务器证书 我创建了服务器证书 其通用名称与其 IP 地址相同 根 CA 证书的通用名称是服务器的 FQDN 我正在使用 openssl
  • JAX-RS 2.0 WebSphere 8.5 没有独立的共享库

    我正在使用 Jersey 2 在 IBM WebSphere 8 5 环境中实现 JAR RS 2 0 读完这篇文章后Websphere 8 中的 JAX RS Jersey 2 10 支持 https stackoverflow com
  • ASP.NET MVC - MapRoute 与 paths.Add(和 404)

    我刚刚开始使用 ASP NET MVC MapRoute 和 paths Add 之间有什么区别 我应该只使用 MapRoute 吗 我可以绘制多条路线吗 哪些 地图 优先 您首先调用的还是最后调用的 我希望能够为用户做一些类似于 Stac
  • 在共享主机上使用 Laravel 发送邮件

    我正在尝试从我的网站发送邮件 我正在使用 laravel 5 5 和 hostnet nl 的共享托管 我非常确定我的所有配置都是正确的 我的 env MAIL DRIVER mail MAIL HOST smtp02 hostnet nl
  • 如何让我的安装程序应用程序在 Windows 上正常运行?

    我在 Delphi 中制作了一个简单的安装程序应用程序 没什么花哨的 基本上我将文件包含到 Exe 中 然后将它们解压到用户指定的路径 然而 我偶然发现了一个问题 我注意到这适用于任何 Windows 可执行文件 无论它是否是安装程序 如果
  • 对 Android 中的特定布局进行“屏幕截图”

    我有两个密切相关的主要问题 我是从程序化的角度来看待这些问题的 1 我希望截取特定布局的内容的屏幕截图 即ScrollView嵌套在一个LinearLayout 罢工 gt 2 作为ScrollView有溢出屏幕的内容 因此可以滚动 如何确
  • PHP 克隆关键字 [重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中的对象克隆是什么 https stackoverflow com questions 2144506 what is object cloning in php 我正在研究一个经常使用 cl
  • 在 python 中使用 boto3 查询 cloudwatch 日志中的不同值

    我有一个 lambda 函数 可以将指标写入Cloudwatch 在写入指标的同时 它会在日志组中生成一些日志 INFO username email protected cdn cgi l email protection ClinicI
  • 来自调试器的消息:由于内存问题而终止

    我的应用程序正在使用Geojson文件 我用地图盒SDK https www mapbox com ios sdk examples line geojson to add MGLPolyline来映射 但问题是我的文件太大 导致应用程序崩
  • music.listen 返回一个空数组

    我正在开发 Spotify 应用内应用程序 我想知道我的朋友们在听什么 我目前正在使用音乐 听打开graph api 但它对大多数用户返回空数据 我注册了一个新的 Facebook 帐户 然后使用新帐户登录了 Spotify 我点了一首歌然
  • 在 vbscript 中在另一台计算机上显示消息框?

    如何使用 vbscript 在网络中正在运行的计算机上显示消息框 我到处寻找但没有得到任何答案 也许这对于 VBScript 来说是一个有点高级的问题 但是由于 WSH 允许远程脚本编写 因此这可能是一个任务WSH控制器 http msdn
  • Google Apps脚本不会更新应用程序

    我对此是全新的 我知道这可能很简单 但我似乎无法让它发挥作用 我在网上发现了这个应用程序脚本 可以让人们将文件上传到我的 Google 云端硬盘 但是当我尝试更改其中的任何内容并保存它时 它不会反映在应用程序中 我尝试在 Google 脚本
  • 复合标识符的任何部分都不能为空[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试做一个复合主键映射并且不起作用 必要条件是 关系可能是 IdClass注解 我需要与人实体的关系 ManyToOne My cod
  • 我们如何检查动态粘土对象是否具有属性?

    我有一个动态对象 我认为是用 Clay 实现的 它具有两个可能的属性名称之一 我想使用任何可用的属性名称 以下不起作用 dynamic workItemPart item WorkItem is an Orchard ContentMana