Using a Function to emulate F# Match in C#
To be honest, it's pretty much impossible to do elegant pattern matching in a language that doesn't support it (e.g., C#).  The problem with what you've written there is it's more complicated than the equivalent if-then-else chain:

if (IsCloudy(skyImage)) {
    ChangeWeatherIcon(Icons.Clouds);
    return 13;
}
if (a &lt; b) {
    throw new Exception();
}


Now, I would dearly love to see some later version of C# adopt algebraic data types (a la F#) with pattern matching, but until then I very much doubt you'll be able to do better than if-then-else chains.