Question: I'd be interested in some before-and-after c# examples, some non-idiomatic vs idiomatic examples. Non-c# examples would be fine as well if they get the idea across. Thanks.

Answer: 
Some examples:

**Resource management**, non idiomatic:

```
string content;
StreamReader sr = null;
try {
    File.OpenText(path);
    content = sr.ReadToEnd();
}
finally {
    if (sr != null) {
        sr.Close();
    }
}

```

Idiomatic:

```
string content;
using (StreamReader sr = File.OpenText(path)) {
    content = sr.ReadToEnd();
}

```

**Iteration**, non idiomatic:

```
for (int i=0;i<list.Count; i++) {
   DoSomething(list[i]);
}

```

Also non-idiomatic:

```
IEnumerator e = list.GetEnumerator();
do {
   DoSomenthing(e.Current);
} while (e.MoveNext());

```

Idiomatic:

```
foreach (Item item in list) {
   DoSomething(item);
}

```

**Filtering**, non-idiomatic:

```
List<int> list2 = new List<int>();
for (int num in list1) {
  if (num>100) list2.Add(num);
}

```

idiomatic:

```
var list2 = list1.Where(num=>num>100);

```
Practically speaking, it means writing code in a consistent way, i.e. all developers who work on your code base should follow the same conventions when writing similar code constructs.

So the idiomatic way is the way that matches the style of the other code, non-idiomatic way means you are writing the kind of function but in a different way.

e.g. if you are looping a certain number of items, you could write the loop in several ways:

```
for (int i = 0; i < itemCount; i++)

for (int i = 1; i <= itemCount; i++)

for (int i = 0; i < itemCount; ++i)

```

etc

What is most important is that the chosen style is used consistently. That way people become very familiar and confident with how to use it, and when you spy a usage which looks different it can be a sign of a mistake being introduced, perhaps an off by one error, e.g.

```
for (int i = 1; i < itemCount; i++)

```