Some weird but pretty code trick.
It is c#?
Yes, indeed!
This snippet simply use Expressions in such weird way. Here is the implementation of Hash<T> - pretty straightforward, yeah?
It is c#?
var hash = new Hash{ a => "A value", b => "B value" }; Console.WriteLine(hash["a"]);
Yes, indeed!
This snippet simply use Expressions in such weird way. Here is the implementation of Hash<T> - pretty straightforward, yeah?
class Hash<t> : IEnumerable<Expression<Func<object, string>> { private readonly Dictionary<string, T> _dictionary = new Dictionary<string, T>(); public void Add(Expression<Func<object, string>> item) { string name = item.Parameters.Single().Name; var value = (T) ((ConstantExpression) item.Body).Value; _dictionary.Add(name, value); } public IEnumerator<Expression<Func<object, string>>> GetEnumerator() { return _dictionary.Select(pair => (Expression<Func<object, string>) Expression.Lambda( Expression.Constant(pair.Value), Expression.Parameter(typeof (object), pair.Key)) ).GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public T this[string name] { get { return _dictionary[name]; } set { _dictionary[name] = value; } } }
No comments:
Post a Comment