I had that problem in Python once, and found it needed fewer special-case handlers than I'd expected:
answer = ", ".join(words[:-2] + [" and ".join(words[-2:])])
Though that does rely on Python's array slice expressions having the right edge-case behaviour when the array gets shorter than 2 elements, and I don't know if C# will do the same.
no subject