Skip to content

Instantly share code, notes, and snippets.

@daberni
Created January 30, 2019 19:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daberni/7c13b150cdb04fd164c55bb8a211b6c1 to your computer and use it in GitHub Desktop.
Save daberni/7c13b150cdb04fd164c55bb8a211b6c1 to your computer and use it in GitHub Desktop.
C# ElasticObject which never fails
public class ElasticObject : DynamicObject
{
private IDictionary<string, object> members = new Dictionary<string, object>();
private IDictionary<int, object> indexes = new Dictionary<int, object>();
public ElasticObject()
{
}
public ElasticObject(IDictionary<string, object> dictionary)
{
members = dictionary;
}
public override IEnumerable<string> GetDynamicMemberNames()
{
return members.Keys;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
members.TryGetValue(binder.Name, out result);
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
members[binder.Name] = value;
return true;
}
public override bool TryDeleteMember(DeleteMemberBinder binder)
{
members.Remove(binder.Name);
return true;
}
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
{
int index = (int)indexes[0];
this.indexes.TryGetValue(index, out result);
return true;
}
public override bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value)
{
int index = (int)indexes[0];
this.indexes[index] = value;
return true;
}
public override bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes)
{
int index = (int)indexes[0];
this.indexes.Remove(index);
return true;
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
dynamic method = members[binder.Name];
result = method(args[0].ToString(), args[1].ToString());
return true;
}
static public implicit operator ElasticObject(ExpandoObject expando)
{
return new ElasticObject(expando);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment