Have you ever wondered whether it is possible to create your own collection initializers just like for the List<T>?
var list = new List { 12, 42, 256, 1024 };
Well… doing that is actually extremely simple. All your custom object needs is a public Add method that takes whatever arguments you might want. Don’t try to analyze the code, I know that it doesn’t make any sense at all – it’s just an example
public class MyCollection : IEnumerable
{
private List _list = new List();
public void Add(Predicate predicate, T trueValue, T falseValue)
{
_list.Add(new MyIfThen { Predicate = predicate, TrueValue = trueValue, FalseValue = falseValue });
}
public struct MyIfThen
{
public Predicate Predicate;
public T TrueValue;
public T FalseValue;
}
#region IEnumerable Members
public IEnumerator GetEnumerator()
{
return _list.Select(ifthen => ifthen.TrueValue).GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
GetEnumerator();
}
#endregion
}
...
var mine = new MyCollection
{
{i => i%2 == 0, 12, 42},
{i => i%3 == 0, 33, 66},
};