The obvious choice would be Design Patterns in C#, but I've not read it, so I can't comment on its quality.
Edit: As mentioned by Popo, the Design Patterns book itself is a great way to learn design patterns, but the code is not in C#: Design Patterns: Elements of Reusable Object-Oriented Software