.NET is trying to protect developers from making simple mistakes
while providing them with all sorts of non obvious problems completely
for free.
The simple mistake is trying to mutate a struct returned by a property.
Line 14 in the example code raises compile time error. This line is otherwise completely fine except that it doesn't make sense -- the Start property is returning a copy of the value type Point.
1 struct Point {
2 public int x;
3 public int y;
4 }
5 class Line {
6 Point start;
7 Point end;
8 public Point Start {get {return start;}}
9 public Point End {get {return end;}}
10 }
11 public class Main {
12 public static void Main() {
13 Line l = new Line();
14 l.Start.x = 2
15 }
16 }
The example comes from here
The page explains that in such a case IronPython will also fail (by design) with an error.
Now about the free errors. They are all sponsored by the evil locale. Parsing in .NET takes
the operating system's locale into account. In Poland the floating point numbers are written
using coma instead of a dot. So 2.3 is written as 2,3. Trying to parse your settings
file containing floats on a computer with Polish locale will throw an exception if there
are any dots in them.
But it is not just parsing. If you invoke ToUpper on a string it also takes locale into account.
In Turkey they have dotted i and dotless ı. The letter i (the dotted one obviously) has upper case
equivalent which has a dot above it (expressible in unicode). If you have good fonts you should
be able to see it right here: İ.
One more thing, when dealing with DateTime think about Buddhist Era in Sri Lanka :).