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

Kum*_*mar 6 .net c# dynamic visual-studio-2010 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]);
Run Code Online (Sandbox Code Playgroud)

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

e.Employee_name与e.employee_name一样有效

似乎没有一个明显的方式,也许是一个黑客?

Luk*_*son 8

我一直在使用这个"Flexpando"类(用于灵活的expando),它不区分大小写.

它类似于Darin的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢简单,但觉得应该对内部进行更多的控制.也许有两个构造函数,一个是默认为你在这里的构造函数,另一个是带有IDictionary <string,object>的构造函数,构造函数设置了Dictionary字段,我将其改为带有私有setter的公共属性. (2认同)

Dar*_*rov 5

您可以检查Massive的实现,MassiveExpando这是一个不区分大小写的动态对象.