http://www.careercup.com/question?id=20786668 (http://csharppad.com/gist/11145703)