Если я понимаю ваш вопрос, возможно, вы хотите знать, как вручную проверить модель.
Вы можете использовать вызов TryValidateModel(modelInstance);
для ручной проверки требуемой модели.
Для других условий, которые вы упомянули в вопросе, вы можете добавить операторы if.
например. Если все строковые свойства userProfileModelObject равны NULL, тогда проверьте accountModelInstance
bool isSecondObjectValid = userProfileModelObject.GetType().GetProperties()
.Where(pi => pi.PropertyType == typeof(string))
.Select(pi => (string)pi.GetValue(myObject))
.Any(value => string.IsNullOrEmpty(value));
bool validationResult = false;
validationResult = !isSecondObjectValid ?
TryValidateModel(accountModelInstance) :
TryValidateModel(userProfileModelObject);
. Надеюсь, это поможет.
Ссылки:
У Саймона Мориса есть несколько отличных руководств по самым первым шагам. Взгляните: http://www.cocoachina.com/wiki/index.php?title=Category%3aSimon_Maurice_iPhone_OpenGL_ES . Выполняйте их с самого начала, и вы получите хорошее представление об основах.
РЕДАКТИРОВАТЬ:
Резервная ссылка
Исходный код
Еще раз, если я могу включить свою собственную работу, у меня есть короткая рецензия на том, что я изучил при записи Молекул для iPhone. Я вошел в это имеющее опыт с 3-D стороной OpenGL (я сделал немного 2-D аппаратного ускорения прежде), таким образом, у меня есть определенная другая точка зрения на предмет. Исходный код к Молекулам доступен, таким образом, Вы смогли узнавать о чем-то из ввода по абсолютному адресу вокруг внутренней части он. Я также записал сообщение о том, как использовать Базовые структуры Анимации и функции для ускорения OpenGL рендеринг ES, если Вы хотите что-то немного более техническое.
У Bill Dudney есть сообщение здесь о том, как он начал входить в OpenGL ES и затем последующее здесь, где он предоставляет код для Волнового фронта загрузчик Объекта для iPhone.
Я полагаю, что видел несколько более хороших ресурсов вокруг Переполнения стека в различных ответах, таким образом, Вы могли бы искать вокруг и видеть то, что еще можно найти здесь.
Вам нужна только одна ссылка:
Да, часть документации не имеет большой смысл в первый раз, когда Вы читаете его, но действительно, читаете предложение/абзац/страницу снова, и снова. Это действительно имеет смысл, и это очень точно. Который является чем-то, что Вы действительно не можете сказать из учебных руководств. Учебные руководства почти всегда пишутся людьми, которые не кажутся слишком суетившимися об игнорировании важных деталей, в то время как документация как этот обычно пишется очень nitpicky люди, которые переполняют каждый небольшой важный факт в (возможно чрезмерно сложный) предложения.
О, и одна золотая подсказка: Добавьте поисковую функцию к своему браузеру, который делает это:
http://www.google.com/search?q=%s+site%3Awww.khronos.org%2Fopengles%2Fsdk%2F1.1%2Fdocs%2Fman%2F&btnI
(замена %s
чем замещающая строка критерия поиска Вашего браузера, вышеупомянутый пример для Opera),
Я связал его с o
префикс, поэтому каждый раз, когда я должен искать что-то на OpenGL/ES, я просто, вводит o glDrawElements
в строке поиска и немедленно получают страницу документации на нем.
Поскольку OpenGL NeHe является большим учебным руководством. Хотя, это конкретно не покрывает OpenGLES, это должно все еще быть довольно полезно. Просто будьте готовы столкнуться с вещами время от времени, которые не будут работать над iPhone.
Также можно получить v1.1 если "Красная книга" онлайн.
Прежде чем вводить оптимизацию производительности за счет удобочитаемости, изучите такие модули, как psyco, которые будут выполнять некоторую JIT-компиляцию отдельных функций, часто с поразительными результатами, без ущерба для читаемости.
Тогда, если вы действительно хотите встать на путь оптимизации, вы должны сначала научиться измерять и профилировать. Оптимизация ДОЛЖНА БЫТЬ КОЛИЧЕСТВЕННОЙ - не соглашайтесь с интуицией. Профилировщик хот-спотов покажет вам функции, в которых ваша программа сжигает больше всего времени.
Если при оптимизации появляется такая функция, которая часто вызывается:
def get_order_qty(ordernumber):
# look up order in database and return quantity
Если есть какое-либо повторение номеров заказов, то мемоизация будет хорошая техника оптимизации для изучения, и она легко упаковывается в декоратор @memoize, так что это мало влияет на читаемость программы. Эффект мемоизации заключается в том, что значения, возвращаемые для заданного набора входных аргументов, кэшируются, так что дорогостоящая функция может быть вызвана только один раз, с последующими вызовами, разрешенными против кеша.
Наконец, рассмотрите возможность вывода инвариантов из циклов. Для больших многомерных структур это может сэкономить много времени - фактически, в этом случае я бы сказал, что эта оптимизация улучшает читаемость , поскольку она часто служит для того, чтобы прояснить, что некоторые выражения могут быть вычислены при измерение высокого уровня во вложенной логике.
(Кстати, это действительно то, что вы имели в виду? • В операторе if с символом или всегда помещайте сначала условие, которое, скорее всего, не сработает, поэтому второе не будет проверяться.
Я думаю, что это могло быть так для «и», но «или» будет сокращать- схема, если первое значение - Истина, сохраняя оценку второго члена условного. Поэтому я бы изменил это «правило» оптимизации на:
Опять же, не только для OpenGLES, но я считаю, что полезно изучить возможности OpenGL в целом, а затем отфильтровать те, которые вам не нужны.
"Красная книга" не рекомендуется начинающим OpenGL/OpenGLES. Это книга для профессионалов. Первый шаг - попробовать запустить скачанные простые программы или простые коды с сайтов OpenGL.