首页
学习
活动
专区
工具
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如何设置不区分大小写

MySQL如何设置不区分大小写 摘要 本文将深入探讨MySQL数据库中如何设置不区分大小写,并针对不同操作系统以及使用Navicat等工具的情况进行详细介绍。...在Windows中设置MySQL不区分大小写 在Windows操作系统中,默认情况下MySQL是不区分大小写的。但是,您可以通过修改MySQL的配置文件来更改这一行为。...,通过它也可以设置MySQL不区分大小写。...在连接属性中找到选项设置或高级选项。 在选项中查找大小写敏感性设置,并将其设置为不区分大小写。 保存设置并重新连接到MySQL数据库。 QA环节 问题1:为什么要设置MySQL不区分大小写?...总结 本文详细介绍了在不同环境中设置MySQL不区分大小写的方法,以及如何在Navicat等工具中进行相关设置。

25010

设置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.6K21
  • 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.3K40

    SQL Server不区分大小写的问题

    SQL Server不区分大小写的问题   默认情况下,SQL Server不区分大小写,如果数据表TEST的TNAME列中有数据“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不区分大小写,ci为case insensitive的缩写,即大小写不敏感。...3)utf8_general_cs:utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。

    4.9K30

    如何在Linux中使用locate和find进行不区分大小写的文件搜索?

    find的基本用法基本的find命令格式如下:find 路径 -name 文件名例如,要在当前目录及其子目录中查找名为“wljslmz”的文件,可以使用:find / -name wljslmz不区分大小写的搜索...locate进行不区分大小写的搜索locate命令支持不区分大小写的搜索,可以使用-i选项来实现:locate -i 文件名例如,要不区分大小写地查找“WLJSLMZ”,可以使用:locate -i WLJSLMZ...这将返回所有名称中包含“WLJSLMZ”的文件,无论其大小写如何。...find进行不区分大小写的搜索find命令通过在文件名模式中使用-iname选项来实现不区分大小写的搜索:find 路径 -iname 文件名例如,要不区分大小写地查找“WLJSLMZ”,可以使用:find...Linux系统中使用locate和find命令进行不区分大小写的文件搜索。

    11100

    爬虫抓取博客园前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.6K20

    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
    领券