Guard clauses are a part of aspect oriented programming, where you can define what is an allowable input to a method.
From what I know of the .Net implementation (which I haven't really looked into), you do this with attributes, e.g.
public static void NeverGetNull([ThisParamNotNull]MyClass i, [ThisParamNotNull]OtherClass j)
{
// Will never need to check for null values on i or j!
}
I actually know what guard expressions are from Erlang, where the method dispatch is dependant on the guard methods. I'll give a bit of psuedocode below to illustrate the point:
myMethod(input i) where i is an int
{
return i + 10
}
myMethod(input i) where i is an int and i > 10
{
return i - 10
}
var i = myMethod(1) // returns 11
var i = myMethod(i) // returns 1
As might not be obvious, you could provide an expression in the guard which is evaluated during dispatch. Pretty neat, hey?