public static int GetSize(Type tupleType) {
ContractUtils.RequiresNotNull(tupleType, "tupleType");
int count = 0;
lock(_sizeDict) if (_sizeDict.TryGetValue(tupleType, out count)) return count;
Stack<Type> types = new Stack<Type>(tupleType.GetGenericArguments());
while (types.Count != 0) {
Type t = types.Pop();
if (typeof(MutableTuple).IsAssignableFrom(t)) {
foreach (Type subtype in t.GetGenericArguments()) {
types.Push(subtype);
}
continue;
}
if (t == typeof(DynamicNull)) continue;
count++;
}
lock (_sizeDict) _sizeDict[tupleType] = count;
return count;
}