Just to add one more feature, if you are using the .NET 4.0 F # 2.0 assembly, you can debug at runtime from the F # tuple to the .NET 4.0 System.Tuple platform, and then use the ItemX properties of the .NET 4.0 tuples to access to the tuple element you need,
let x = (1, 1.2, "hello") let y = ((box x) :?> System.Tuple<int, float, string>);; y.Item3
However, I would never use this, instead chose the choice of matching the pattern. (also, I read places that the F # compiler cannot always choose to represent its tuples as tuples of .NET 4.0, so there may be a chance that the cast will fail).
After reading your comments in some other answers, I'm not sure why the template solution doesn't work for you. Perhaps you want to access the tuple element in a specific place inside the expression? If so, the previous one will certainly work:
let str = "hello" + ((box x.[1]) :?> System.Tuple<int,string>).Item2 //though might as well use snd and fst for length 2 F
but you can achieve the same goals using the pattern matching technique (again, considering that this is even what you need):
let str = "hello" + (let (_,name) = x.[1] in name)
source share