internal static IEnumerable<PropertyInfo> GetAccessProperties(Type tupleType, int size, int index) {
ContractUtils.RequiresNotNull(tupleType, "tupleType");
if (index < 0 || index >= size) throw new ArgumentException("index");
foreach (int curIndex in GetAccessPath(size, index)) {
PropertyInfo pi = tupleType.GetProperty("Item" + String.Format("{0:D3}", curIndex));
Debug.Assert(pi != null);
yield return pi;
tupleType = pi.PropertyType;
}
}