No guarantees, but try overloading the + operator in your class
public static Gen<T> operator +(Gen<T> a, Gen<T> b)
{
return (Gen<T>)(a.Value + b.Value);
}
EDIT (31 May 2016) -------------------------------------------------------
For those that missed it, I prefaced my answer with "no guarantees". To assist the perception-impaired, I bolded and italicized the qualifying text so it's easier to see.
Voting my answer with a one is bullsh|t (and this is one of the reasons I no longer participate in Q/A).