A Money Value Object implementation for .NET supporting ISO 4417.

What

NMoneys (plural) is a simple .Net library to represent monetary quantities.

What does NMoneys provide?


Why

The .NET Framework

.Net does not provide a good way of representing and operating with monetary quantities.
Nonetheless, it does support numeric types that can be used to represent monetary quantities and it also provides support for formatting those numeric values in different cultures.
But it is surprisingly easy to mix the concept of "10 represented euros when was saved" with "now, 10 represents something else because of the current culture of the thread".

The .Net Framework mixes numbers, currencies, cultures and formats in a way that it becomes confusing, difficult and/or impossible to represent something as simple as "one Euro" or "ten-and-the-half Zambian kwacha".

On top of that mixture of concepts, it does not support a complete implementation for the ISO standard and for the subset implemented, the information may be outdated or even wrong. Fixes might be issued for wrong/outdated data, but they may take too long to be rolled-out and to add further confusion currency formatting information can be modified by the user.

Open source

I have been using different incarnations of this library in commercial projects for some time now.
It started with a limited set of well-known currencies. Then it grew to include some others until I decided to support all ISO currencies.
At that point it struck me that there was no way I could support correctly all scenarios for multiple reasons:

With the realisation came the proposal to my employer to Open-Source the library and modify it so that is easy enough for people to help out, even if they are not .Net programmers.

And here we are.