首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将ExpandoObject的字典设置为不区分大小写?

将ExpandoObject的字典设置为不区分大小写,可以通过自定义一个类来实现。这个类继承自ExpandoObject,并重写其TrySetMember方法,使得在设置属性时,属性名称不区分大小写。以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.Dynamic;

public class CaseInsensitiveExpandoObject : DynamicObject
{
    private readonly ExpandoObject _expandoObject = new ExpandoObject();
    private readonly Dictionary<string, string> _keyMapping = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        string key = binder.Name;
        _keyMapping[key] = binder.Name;
        ((IDictionary<string, object>)_expandoObject)[key] = value;
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        string key = binder.Name;
        if (_keyMapping.TryGetValue(key, out string actualKey))
        {
            return ((IDictionary<string, object>)_expandoObject).TryGetValue(actualKey, out result);
        }
        else
        {
            result = null;
            return false;
        }
    }
}

使用示例:

代码语言:csharp
复制
dynamic caseInsensitiveExpandoObject = new CaseInsensitiveExpandoObject();
caseInsensitiveExpandoObject.Name = "John";
caseInsensitiveExpandoObject.Age = 30;

Console.WriteLine(caseInsensitiveExpandoObject.Name); // 输出 "John"
Console.WriteLine(caseInsensitiveExpandoObject.name); // 输出 "John"
Console.WriteLine(caseInsensitiveExpandoObject.AGE); // 输出 "John"

这个示例中,我们创建了一个名为CaseInsensitiveExpandoObject的类,它继承自DynamicObject,并重写了TrySetMemberTryGetMember方法。在TrySetMember方法中,我们将属性名称存储在一个字典中,并将其转换为小写。在TryGetMember方法中,我们根据传入的属性名称查找实际的属性名称,并从ExpandoObject中获取属性值。

这样,我们就可以使用CaseInsensitiveExpandoObject类来创建一个不区分大小写的字典。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

设置MySQL数据库区分大小写

我们大家可能都碰到过这种情况:在Linux下,MySQL表名区分大小写,而在Windows下是区分,从Windows下导出数据脚本中使用是小写,而Hibernate生成SQL中表名是大写,所以查不出数据...这个时候怎么办呢,显然改程序是不行,时间上也不允许,所以只能设置MySQL数据库区分大小写了,大家看以下步骤: 1、查询MySQL是否设置区分大小写 show variables like "%case...其中lower_case_table_names代表了:0是区分大小写; 1是区分大小写。显然我这个MySQL是区分大小写。...更改设置之后效果: ? 已经区分大小写了: ?...拓展知识 MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样: 1、数据库名与表名是严格区分大小写; 2、表别名是严格区分大小写; 3、列名与列别名在所有的情况下均是忽略大小写

16.4K21

IntelliJ IDEA自动提示,如何设置区分大小写

本文joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/154 我们在使用IntelliJ IDEA进行编码时候...,输入一个字母会自动提示,但是默认是区分大小写,如下:我们输入一个大写字母R,提示中只有以大写字母R开头,那么如何让提示区分大小写呢 使用IntelliJ IDEA打开项目后,依次进行如下设置...File-->Settings-->Editor-->Code completion 然后把Match Case前面的勾选去掉,点击OK保存 接下来我们再来输入下小写r,发现不论以大写还是小写r提示都出来了...注意:由于IntelliJ IDEA版本不一样,可能会有偏差。...本文joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/154

2.2K40
  • SQL Server区分大小写问题

    SQL Server区分大小写问题   默认情况下,SQL Server区分大小写,如果数据表TESTTNAME列中有数据“abcd”和“Abcd”, 如果使用查询语句:select * from...可以通过设置排序规使其区分大小写,可以分别在创建数据库、修改数据库、创建表字符型列(char\varchar\nchar \nvarchar等)时指定排序规则来实现。...如 create database test  COLLATE  Chinese_PRC_CS_AS   --这样创建数据库中区分大小写 alter database test  COLLATE  Chinese_PRC_CS_AS...   --修改后数据库中区分大小写 Create table test(tid int primary key,tname varchar(20) COLLATE  Chinese_PRC_CS_AS...) --这样创建tname列在使用SELECT 语句时就可以区分大小写了。

    3.3K20

    MySQL存储字段是区分大小写,你知道吗?

    00 简单回顾 之前写过一篇关于mysql 对表大小写敏感问题(你有遇到过MySQL因大小写敏感导致问题吗),其实在mysql中字段存储内容是区分大小写,本篇进行简单总结。...02 解决方案 因为默认情况下字段内容是区分大小写,也即大小写不敏感。所以解决方案就是要新增字段内容校验规则。 使用mysql BINARY 关键字使搜索区分大小写。...utf8 COLLATE=utf8_bin COMMENT='用户表' 使用 NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin会将字段中varchar类型全部设置区分大小写...2)utf8_general_ci:utf8_genera_ci区分大小写,cicase insensitive缩写,即大小写不敏感。...3)utf8_general_cs:utf8_general_cs区分大小写,cscase sensitive缩写,即大小写敏感。

    4.1K30

    爬虫抓取博客园前10页标题带有Python关键字(区分大小写文章

    写一个简易爬虫程序,抓取博客园网站首页前10页中所有文章标题带有Python关键字(区分大小写文章,并把文章链接和文章标题存入硬盘,要求如下: 使用正则表达式匹配出需要数据,然后对数据进行解析...程序中很明显有多个任务,这多个任务必须是异步调用 任务返回值要及时处理,不能等所有任务都执行完再统一处理 提示信息:可以使用生产者消费者模型来处理 尽可能提升程序执行效率 爬虫储备知识: requests...模块是一个非常强大爬虫模块,它基本使用非常简单,但是它是所有爬虫程序根源,我们只需要使用requests模块里面级简单功能就能完成,用法可以通过查询得知。...""" 写一个简易爬虫程序,抓取博客园网站首页前10页中所有文章标题带有 Python关键字(区分大小写文章,并把文章链接和文章标题存入 硬盘,要求如下: 1 使用正则表达式匹配出需要数据,然后对数据进行解析...2 程序中很明显有多个任务,这多个任务必须是异步调用 3 任务返回值要及时处理,不能等所有任务都执行完再统一处理 4 提示信息:可以使用生产者消费者模型来处理 5 尽可能提升程序执行效率 """

    1.3K20

    ASP.NET MVC5中View-Controller间数据传递

    $(function () { $('#btn').click(function () { //url区分大小写 location.href...}/{action}/{id}" ); 前端代码只需要将location.href值改为和路由匹配url即可,本示例中"/home/getvalue/100" Controller中代码: public...获取路由参数另外一种方式是给Action设置一个和路由模板中指定参数名一致(区分大小写参数即可,代码如下: public void GetValue(int id) { } 注意,这里不仅获取了路由数据...ExpandoObject 上面提到,直接使用匿名类型向View中传递数据是行不通,可以使用ExpandoObject类型对象来替代匿名类型 public ActionResult Index() {...ActionResult Index() { User user = new User() { UserName = "雪飞鸿", Age = 24 }; return View(user); } @* 设置页面强类型页面

    2.7K10

    【CSS】盒子模型内边距 ⑤ ( 内边距不影响盒子模型尺寸情况 | 设置宽度或高度设置 Padding 内边距时撑开盒子 )

    文章目录 一、内边距不影响盒子模型尺寸情况 二、内边距影响盒子模型尺寸情况 一、内边距不影响盒子模型尺寸情况 ---- 如果元素没有指定高度 , 该元素设置 Padding 内边距 , 则不会撑开盒子...; 下面的代码中 , 父容器是 div , 子容器是 p , p 标签宽度默认充满父容器 , 如果没有为其设置父容器宽度 , p 标签设置 内边距 , 不会撑开盒子 ; 代码示例 : 展示效果 : 测量模型宽度 : 测量模型高度 : 二、内边距影响盒子模型尺寸情况 ---- 如果给 p 标签设置了 具体尺寸..., 设置 Padding 内边距 , 会撑开盒子 ; 代码示例 : <!...: 没有设置 垂直方向 上内边距 , 没有撑开效果 ;

    1.5K20

    VBA: 字典(Dictionary)基本概念

    键可以理解新华字典检字表中关键字,而值可以理解对关键字解释。字典在数据去重上很有用。 在VBA字典中,有4个属性和6种方法,相比其它对象要简洁得多,而且容易理解。...常用值有0和1。0代表二进制比较,区分大小写;1代表文本比较,区分大小写。默认是二进制比较,区分大小写,即关键字B和b是不一样。...Set dic = CreateObject("Scripting.Dictionary") dic.CompareMode = vbTextCompare '文本比较,区分大小写...dic.Add "b", "香蕉" dic.Add "c", "雪梨" dic.Add "B", "火龙果" '程序报错,提示key已存在 End Sub 上述代码中,由于设置比较模式文本模式...,区分关键字大小写,即关键字b和B是一样,因此程序会报错。

    1.3K20

    MySQL数据库面试题和答案(一)

    TEXT是区分大小写BLOB。四种文本类型是: - TINYTEXT - TEXT - MEDIUMTEXT - LONGTEXT 10、BLOB和TEXT之间区别是什么?...-在BLOB排序和比较中,对BLOB值区分大小写。 -在TEXT文本类型中,区分大小写进行排序和比较。 11、MyISAM表是如何存储? MyISAM表以三种格式存储在磁盘上。...使用: SELECT CURRENT_DATE(); 15、如何将字符输入十六进制数字? -如要以十六进制数字输入字符,可输入单引号和(X)前缀十六进制数字。...16、如何将MySQL时间戳显示给用户? - MySQL时间戳以可读格式呈现给用户:yyyyy -MM- dd - HH:MM:SS。 17、如何在MySQL中将表导出XML文件?...21、什么是MySQL数据字典?如何确定数据字典位置? MySQL将其数据存储在数据字典磁盘上。该数据字典每个子目录表示这些目录中MySQL数据库。

    7.5K31

    .NET框架设计(常被忽视框架设计技巧)

    、元数据应该隐藏在Model背后、元数据与DSL关系 3.链式配置Dynamic模式(爱不释手思维习惯编程) 4.委托工厂模式(要优于常见 工厂,概念更加准确,减少污染) 5.规则外挂(视委托特殊规则对象原型...中呢,如果加的话随着代码量增加,这些都会成为后面维护成本开销;那么我们如何将干净POJO对象提供给程序员用,但是在后台我们也能对POJO进行强大控制?...这是我们对象模型,那么我们如何将它与数据库相关信息提取出来形成独立元数据信息,对元数据抽取需要动、静结合才行; 什么动、静结合,我们是否都会碰见过这样问题,很多时候我们代码在编译时是确定,...,比如我们在开发自己ORM框架如果不能直接嵌入到VisualStudio中的话,用起来会很不爽;当我们用自己插件去连接数据库并且生成代码时候,有部分元数据模型已经在代码中实现,但是有部分需要我们动态设置才行...都是在一些框架、工具中用来做灵活接口用; 5】规则外挂(视委托特殊规则对象原型) 规则外挂其实跟上面的委托工厂有点像,但是绝对不一样设计思想;如何将规则外挂出去,放入Cache中让运行时可以配置这个规则参数

    1.4K80

    【深入浅出C#】章节 9: C#高级主题:反射和动态编程

    调用方法和属性: 通过反射,你可以在运行时调用对象方法、获取和设置属性值,甚至调用私有成员。这编写通用代码或执行特定操作外部代码提供了灵活性。...状态转移方程(State Transition Equation):动态编程通常通过状态转移方程来描述问题递归结构。状态转移方程定义了如何将一个问题解从一个或多个相关子问题解中导出。...4.4 动态对象 ExpandoObject和动态字典 ExpandoObject 和动态字典是用于在运行时创建和扩展属性.NET Framework中两个重要概念。...与 ExpandoObject 不同,动态字典通常不会提供属性自动扩展,而是需要显式地添加和检索键值对。...如果你需要动态创建对象并添加属性,ExpandoObject 可能更适合。如果你只需要一个键值对集合,动态字典就足够了。

    83032
    领券