public L GenerateValue() { IGeneratable <T> generator = generators.GetGenerator <T>(typeof(T)); Type unboundList = typeof(L).GetGenericTypeDefinition(); L result = (L)Activator.CreateInstance(unboundList.MakeGenericType(typeof(T))); byte listSize = (byte)generators.GenerateValue <byte>(typeof(byte)); MethodInfo add = typeof(L).GetMethod("Add"); if (add == null) { return(result); } for (int i = 0; i < listSize; i++) { add.Invoke(result, new object[] { generator.GenerateValue() }); } return(result); }