public static T[] TupleToArray<T>(this IStructuralComparable tuple)
{
return EnumerateTuple<T>(tuple).ToArray();
}
public static IEnumerable<T> EnumerateTuple<T>(this IStructuralComparable tuple)
{
if (tuple is T[] array) {
foreach (var item in array) { yield return item; }
}
else if ( tuple is ValueTuple) { yield break; }
else if (tuple is ValueTuple<T> t1) { yield return t1.Item1; }
else if (tuple is ValueTuple<T,T> t2) { yield return t2.Item1; yield return t2.Item2; }
else if (tuple is ValueTuple<T,T,T> t3) { yield return t3.Item1; yield return t3.Item2; yield return t3.Item3; }
else if (tuple is ValueTuple<T, T, T, T> t4) { yield return t4.Item1; yield return t4.Item2; yield return t4.Item3; yield return t4.Item4; }
else if (tuple is ValueTuple<T, T, T, T, T> t5) { yield return t5.Item1; yield return t5.Item2; yield return t5.Item3; yield return t5.Item4; yield return t5.Item5; }
else if (tuple is ValueTuple<T, T, T, T, T, T> t6) { yield return t6.Item1; yield return t6.Item2; yield return t6.Item3; yield return t6.Item4; yield return t6.Item5; yield return t6.Item6; }
else if (tuple is ValueTuple<T, T, T, T, T, T, T> t7) { yield return t7.Item1; yield return t7.Item2; yield return t7.Item3; yield return t7.Item4; yield return t7.Item5; yield return t7.Item6; yield return t7.Item7; }
else foreach(var item in EnumerateTuple8<T>(tuple)) { yield return item; }
}
private static IEnumerable<T> EnumerateTuple8<T>(this IStructuralComparable tuple)
{
dynamic d = tuple;
yield return d.Item1;
yield return d.Item2;
yield return d.Item3;
yield return d.Item4;
yield return d.Item5;
yield return d.Item6;
yield return d.Item7;
foreach(var item in EnumerateTuple<T>(d.Rest)) { yield return item; }
}
ICAgICAgICBwdWJsaWMgc3RhdGljIFRbXSBUdXBsZVRvQXJyYXk8VD4odGhpcyBJU3RydWN0dXJhbENvbXBhcmFibGUgdHVwbGUpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gRW51bWVyYXRlVHVwbGU8VD4odHVwbGUpLlRvQXJyYXkoKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBzdGF0aWMgSUVudW1lcmFibGU8VD4gRW51bWVyYXRlVHVwbGU8VD4odGhpcyBJU3RydWN0dXJhbENvbXBhcmFibGUgdHVwbGUpCiAgICAgICAgewogICAgICAgICAgICBpZiAodHVwbGUgaXMgVFtdIGFycmF5KSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBhcnJheSkgeyB5aWVsZCByZXR1cm4gaXRlbTsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCB0dXBsZSBpcyBWYWx1ZVR1cGxlKSB7IHlpZWxkIGJyZWFrOyB9CiAgICAgICAgICAgIGVsc2UgaWYgKHR1cGxlIGlzIFZhbHVlVHVwbGU8VD4gdDEpIHsgeWllbGQgcmV0dXJuIHQxLkl0ZW0xOyB9CiAgICAgICAgICAgIGVsc2UgaWYgKHR1cGxlIGlzIFZhbHVlVHVwbGU8VCxUPiB0MikgeyB5aWVsZCByZXR1cm4gdDIuSXRlbTE7IHlpZWxkIHJldHVybiB0Mi5JdGVtMjsgfQogICAgICAgICAgICBlbHNlIGlmICh0dXBsZSBpcyBWYWx1ZVR1cGxlPFQsVCxUPiB0MykgeyB5aWVsZCByZXR1cm4gdDMuSXRlbTE7IHlpZWxkIHJldHVybiB0My5JdGVtMjsgeWllbGQgcmV0dXJuIHQzLkl0ZW0zOyB9CiAgICAgICAgICAgIGVsc2UgaWYgKHR1cGxlIGlzIFZhbHVlVHVwbGU8VCwgVCwgVCwgVD4gdDQpIHsgeWllbGQgcmV0dXJuIHQ0Lkl0ZW0xOyB5aWVsZCByZXR1cm4gdDQuSXRlbTI7IHlpZWxkIHJldHVybiB0NC5JdGVtMzsgeWllbGQgcmV0dXJuIHQ0Lkl0ZW00OyB9CiAgICAgICAgICAgIGVsc2UgaWYgKHR1cGxlIGlzIFZhbHVlVHVwbGU8VCwgVCwgVCwgVCwgVD4gdDUpIHsgeWllbGQgcmV0dXJuIHQ1Lkl0ZW0xOyB5aWVsZCByZXR1cm4gdDUuSXRlbTI7IHlpZWxkIHJldHVybiB0NS5JdGVtMzsgeWllbGQgcmV0dXJuIHQ1Lkl0ZW00OyB5aWVsZCByZXR1cm4gdDUuSXRlbTU7IH0KICAgICAgICAgICAgZWxzZSBpZiAodHVwbGUgaXMgVmFsdWVUdXBsZTxULCBULCBULCBULCBULCBUPiB0NikgeyB5aWVsZCByZXR1cm4gdDYuSXRlbTE7IHlpZWxkIHJldHVybiB0Ni5JdGVtMjsgeWllbGQgcmV0dXJuIHQ2Lkl0ZW0zOyB5aWVsZCByZXR1cm4gdDYuSXRlbTQ7IHlpZWxkIHJldHVybiB0Ni5JdGVtNTsgeWllbGQgcmV0dXJuIHQ2Lkl0ZW02OyB9CiAgICAgICAgICAgIGVsc2UgaWYgKHR1cGxlIGlzIFZhbHVlVHVwbGU8VCwgVCwgVCwgVCwgVCwgVCwgVD4gdDcpIHsgeWllbGQgcmV0dXJuIHQ3Lkl0ZW0xOyB5aWVsZCByZXR1cm4gdDcuSXRlbTI7IHlpZWxkIHJldHVybiB0Ny5JdGVtMzsgeWllbGQgcmV0dXJuIHQ3Lkl0ZW00OyB5aWVsZCByZXR1cm4gdDcuSXRlbTU7IHlpZWxkIHJldHVybiB0Ny5JdGVtNjsgeWllbGQgcmV0dXJuIHQ3Lkl0ZW03OyB9CiAgICAgICAgICAgIGVsc2UgZm9yZWFjaCh2YXIgaXRlbSBpbiBFbnVtZXJhdGVUdXBsZTg8VD4odHVwbGUpKSB7IHlpZWxkIHJldHVybiBpdGVtOyB9CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyBJRW51bWVyYWJsZTxUPiBFbnVtZXJhdGVUdXBsZTg8VD4odGhpcyBJU3RydWN0dXJhbENvbXBhcmFibGUgdHVwbGUpCiAgICAgICAgewogICAgICAgICAgICBkeW5hbWljIGQgPSB0dXBsZTsKCiAgICAgICAgICAgIHlpZWxkIHJldHVybiBkLkl0ZW0xOwogICAgICAgICAgICB5aWVsZCByZXR1cm4gZC5JdGVtMjsKICAgICAgICAgICAgeWllbGQgcmV0dXJuIGQuSXRlbTM7CiAgICAgICAgICAgIHlpZWxkIHJldHVybiBkLkl0ZW00OwogICAgICAgICAgICB5aWVsZCByZXR1cm4gZC5JdGVtNTsKICAgICAgICAgICAgeWllbGQgcmV0dXJuIGQuSXRlbTY7CiAgICAgICAgICAgIHlpZWxkIHJldHVybiBkLkl0ZW03OwogICAgICAgICAgICBmb3JlYWNoKHZhciBpdGVtIGluIEVudW1lcmF0ZVR1cGxlPFQ+KGQuUmVzdCkpIHsgeWllbGQgcmV0dXJuIGl0ZW07IH0KICAgICAgICB9
prog.cs(1,22): error CS1525: Unexpected symbol `T', expecting `class', `delegate', `enum', `interface', `partial', or `struct'
Compilation failed: 1 error(s), 0 warnings