Have you ever heard a C# guy going around talking about how they ported their C# code to iOS/Android/Linux? Excluding projects started with that specifically in mind and built using Mono I have never heard of of a Windows C# project going the other way.
Agreed its rare but I wanted to reply here because I did just this thing myself last week. I had a ~6000 line TCP/IP sockets and serial port application (command line) written in C# on windows. I needed to port it to run on a Raspberry Pi (running Debian Wheezy). A rewrite in C was the initial plan/expectation. But got it working in Mono, with only a handful of changes to the serial port code.
Hardware interaction is the place where mono fails most often in my experience; portability for something that actually touches the underlying hardware (of any type) is probably not possible using c#.
And for that you can always call the native methods written in C, from C# - the support for doing this is excellent on both Linux and Windows. You can reference a function in a .DLL on windows and in a .so on linux.