Is this legal? Does it contain a hidden bug or flaw? Visual studio does not give any errors or warnings but ReSharper does:
///
/// immutable
Your constructor will loop forever, until it pops the stack. This is because it keeps calling itself recursively. Try splitting it up:
public Pair(TValue1 value1, TValue2 value2)
: this(value1, value2, () => toStringFunc(this)) { }
public Pair(TValue1 value1, TValue2 value2, Func, String> toStringFunc)
{ /* some actual logic */ }