The principle sounds great - apart from UI code, write all your code on top of .NET so you can share it across iOS and android.
But is that the reality? My main frustration after 6 months with Xamarin is finding out Mono != .NET. The Mono source is littered with 'MonoTODOs' - parts where Mono, and therefore Xamarin, falls short of the .NET promise.
A good example can be found here - https://github.com/mono/mono/blob/f59fa062fb956b80666f4351a2fa31dd5e36eb1f/mcs/class/System/System.Net/WebRequest.cs#L133
[MonoTODO ("Implement the caching system. Currently always returns a policy with the NoCacheNoStore level")]
Network access is definitely an area you can imagine not having to write twice with .NETs comprehensive support but alas Mono has not got round to implementing the caching system, a rather fundamental part depending on your requirements - this particular MonoTODO has been there for over 5 years.
With these omissions you may find yourself implementing an increasing percentage of your app using the native iOS/Android APIs because the .NET equivalent falls short in comparison and asking was, writing everything in C#, worth it?