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

标签 c# .net visual-studio-2010 dynamic expandoobject

给出下面的代码

dynamic e = new ExpandoObject();
var d = e as IDictionary<string, object>;
for (int i = 0; i < rdr.FieldCount; i++)
   d.Add(rdr.GetName(i), DBNull.Value.Equals(rdr[i]) ? null : rdr[i]);

有没有办法让它不区分大小写,所以给定字段名称 employee_name

e.Employee_name 和 e.employee_name 一样有效

似乎没有明显的方法,也许是 hack?

最佳答案

我一直在使用这个不区分大小写的“Flexpando”类(用于灵活的扩展)。

类似于Darin's MassiveExpando答案是它为您提供字典支持,但通过将其公开为一个字段,它可以避免为 IDictionary 实现 15 个左右的成员。

public class Flexpando : DynamicObject {
    public Dictionary<string, object> Dictionary
        = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

    public override bool TrySetMember(SetMemberBinder binder, object value) {
        Dictionary[binder.Name] = value;
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result) {
        return Dictionary.TryGetValue(binder.Name, out result);
    }
}

关于c# - 如何将 ExpandoObject 的字典设置为不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760035/

相关文章:

c# - 在不指定类型的情况下调用静态泛型类中的方法

c# - 将设备到云消息从 Azure IoT 中心路由到 Azure Blob 存储

visual-studio-2010 - 解决方案资源管理器上下文菜单太长

visual-studio-2010 - Visual Studio 2010 - vsix 向导扩展无法加载引用的程序集

c# - 处理器核心在 .net 平台中与生产者消费者一起使用多线程

asp.net - 如何自动填充站点地图文件

c# - 如何为自定义控件绑定(bind)事件处理程序

c# - Mono Cecil 和 NRefactory 之间有什么关系,如何将它们与 Roslyn 进行比较?

.net - 使用 .NET 检测互联网连接的最佳方法是什么?

c# - 尝试读取或写入 protected 内存