два вопросительных знака что означает
Что означают два знака вопроса в С#?
Перейдите по этой строке кода:
Что означают две вопросительные знаки, это какой-то тройственный оператор? Трудно найти в Google.
ОТВЕТЫ
Ответ 1
который далее расширяется до:
По-английски это означает: «Если то, что слева, не равно нулю, используйте это, иначе используйте то, что справа».
Обратите внимание, что вы можете использовать любое количество из них в последовательности. Следующее утверждение назначит первому ненулевому номеру Answer# Answer (если все ответы нулевые, то Answer нулевой):
Также стоит упомянуть, хотя приведенное выше расширение концептуально эквивалентно, результат каждого выражения оценивается только один раз. Это важно, если, например, выражение является вызовом метода с побочными эффектами. (Благодарим @Joey за указание на это.)
Ответ 2
Просто потому, что никто еще не сказал волшебные слова: это оператор нулевой коалесценции. Он определен в разделе 7.12 спецификации С# 3.0.
Это очень удобно, особенно из-за того, как он работает, когда он используется несколько раз в выражении. Выражение вида:
Кроме того, если тип d не является нулевым, тип всего выражения также не является нулевым.
Ответ 3
Это нулевой оператор слияния.
Да, почти невозможно искать, если вы не знаете, как это называется! 🙂
РЕДАКТИРОВАТЬ: И это классная особенность из другого вопроса. Вы можете связать их
Ответ 4
Спасибо всем, вот самое краткое объяснение, которое я нашел на сайте MSDN:
Ответ 5
?? существует, чтобы предоставить значение для типа с нулевым значением, когда значение равно null. Итак, если formsAuth имеет значение null, он вернет новый FormsAuthenticationWrapper().
Ответ 6
Два знака вопроса (??) указывают на то, что это оператор объединения.
Оператор объединения возвращает первое значение NON-NULL из цепочки. Вы можете увидеть это видео на YouTube, которое демонстрирует практически все это.
Но позвольте мне добавить больше к тому, что говорит видео.
Если вы видите английское значение объединения, оно говорит: «объединяйтесь». Например, ниже приведен простой объединяющий код, который объединяет четыре строки.
Проще говоря, оператор Coalescing возвращает первое значение NON-NULL из цепочки.
Ответ 7
Ответ 8
Это короткая рука для тернарного оператора.
Или для тех, кто не делает тройной:
Ответ 9
Ничего опасного в этом нет. На самом деле это красиво. Вы можете добавить значение по умолчанию, если это желательно, например:
CODE
Ответ 10
Ответ 11
Только для вашего удовольствия (зная, что вы все парни С#;).
Я думаю, что он возник в Smalltalk, где он существует уже много лет. Он определяется там как:
в UndefinedObject (aka nil class):
Есть и оценка (?) и неоценивающих версий (??) этого.
Он часто встречается в методах getter для lazy-initialized private (instance) переменных, которые остаются нулевыми до тех пор, пока они действительно не нужны.
Ответ 12
Некоторые из примеров здесь получения значений с использованием коалесценции являются неэффективными.
Что вы действительно хотите:
Это предотвращает воссоздание объекта каждый раз. Вместо частной переменной, остающейся пустой, и создания нового объекта по каждому запросу, это обеспечивает приватную переменную, если новый объект создан.
Ответ 13
Как правильно указывалось в многочисленных ответах, это «оператор слияния нулей» (??), о котором можно также упомянуть его двоюродного брата «Оператор с нулевым условием» (?. Или ? [), Который является оператором, который много раз он используется в сочетании с ??
Используется для проверки на нулевое значение перед выполнением операции доступа к члену (?.) Или индекса (? [). Эти операторы помогают вам написать меньше кода для обработки нулевых проверок, особенно для спуска в структуры данных.
по-старому без ? и ?? делать это
что более многословно и громоздко.
Ответ 14
Примечание:
Я прочитал целую эту тему и многие другие, но я не могу найти столь же полный ответ, как это.
С помощью которого я полностью понял «зачем использовать?» и когда использовать? и как использовать.
Источник:
Основы коммуникаций Windows, выпущенные Craig McMurtry ISBN 0-672-32948-4
Типы недопустимых значений
Язык программирования С# предоставляет сокращенный синтаксис для объявления типов построенный из System.Nullable. Этот синтаксис позволяет сокращать:
Компилятор не позволит одному из способов присвоить значение типа значения NULL для обычного типа значений следующим образом:
Это не позволяет сделать это, потому что тип значения с нулевым значением может иметь значение null, которое в действительности было бы в этом случае, и это значение не может быть присвоено типу обычного значения. Хотя компилятор разрешил бы этот код,
Второй оператор вызовет исключение, поскольку любая попытка доступ к свойству System.Nullable.Value является недопустимой операцией, если тип построенный из System.Nullable, не было присвоено допустимое значение T, которое в этом случае не произошло.
Вывод:
Одним из правильных способов присвоения значения типа значения NULL для обычного типа значений является использование свойства System.Nullable.HasValue для определения того, было ли допустимое значение T присвоено типу значения NULL:
Другим вариантом является использование этого синтаксиса:
Ответ 15
Это оператор слияния, который работает аналогично троичному оператору.
Еще один интересный момент для этого: «Обнуляемый тип может содержать значение или он может быть неопределенным». Поэтому, если вы попытаетесь назначить тип значения, допускающий значение NULL, для типа, не допускающего значения NULL, вы получите ошибку времени компиляции.
Так сделать это с помощью?? оператор:
Ответ 16
Ответ 17
?? Оператор называется оператором нуль-слияния. Возвращает левый операнд, если операнд не равен нулю; в противном случае он возвращает правый операнд.
Что означают два вопросительных знака вместе в C #?
Просмотрите эту строку кода:
Что означают два вопросительных знака, это какой-то тернарный оператор? Сложно поискать в гугле.
18 ответов
Это очень удобно, особенно из-за того, как работает при многократном использовании в выражении. Выражение формы:
Кроме того, если тип d не допускает значения NULL, тип всего выражения также не допускает значения NULL.
Всем спасибо, вот самое краткое объяснение, которое я нашел на сайте MSDN:
Два вопросительных знака (??) указывают на то, что это оператор объединения.
Оператор объединения возвращает первое значение NON-NULL из цепочки. Вы можете посмотреть это видео на YouTube, которое демонстрирует все на практике.
Но позвольте мне добавить больше к тому, что говорится в видео.
Если вы видите английское значение слияния, оно означает «объединяться вместе». Например, ниже приведен простой код объединения, который объединяет четыре строки в цепочку.
Проще говоря, оператор объединения возвращает первое значение NON-NULL из цепочки.
?? предназначен для предоставления значения для типа, допускающего значение NULL, когда значение равно NULL. Итак, если formAuth имеет значение null, он вернет новый FormsAuthenticationWrapper ().
Это сокращение от тернарного оператора.
Или для тех, кто не занимается тройным:
Ничего опасного в этом нет. На самом деле это красиво. Вы можете добавить значение по умолчанию, если это желательно, например:
Используется для проверки нулевого значения перед выполнением операции доступа к члену (?. ) или индексации (? [). Эти операторы помогают вам писать меньше кода для обработки нулевых проверок, особенно для спуска в структуры данных.
Что более многословно и громоздко.
Только для вашего развлечения (зная, что вы все ребята из C # ;-).
Я думаю, что он зародился в Smalltalk, где он существует уже много лет. Там он определяется как:
В UndefinedObject (он же класс nil):
Существуют как оценочные (?), Так и неоценочные версии (??).
Это часто встречается в методах получения для приватных (экземпляров) переменных с отложенной инициализацией, которые остаются равными нулю до тех пор, пока они действительно не понадобятся.
Некоторые из приведенных здесь примеров получения значений с помощью объединения неэффективны.
Что вам действительно нужно:
Это предотвращает повторное создание объекта каждый раз. Вместо того, чтобы закрытая переменная оставалась нулевой и новый объект создавался при каждом запросе, это гарантирует, что закрытая переменная назначается, если создается новый объект.
Это нулевой оператор объединения, который работает аналогично тернарному оператору.
Но самое интересное в том, что вы можете связать их, как говорят другие. Единственное, что не затронуто, это то, что вы можете использовать его для создания исключения.
Это нулевой оператор объединения.
Да, почти невозможно найти, если не знаешь, как это называется! 🙂
РЕДАКТИРОВАТЬ: И это классная функция из другого вопроса. Вы можете связать их.
Устаревший нулевой тест:
Используя оператор Null Coalescing, это можно записать:
Который также можно записать с сокращенным синтаксисом:
Некоторым он кажется более читаемым и лаконичным.
Проще говоря, два вопросительных знака называются «оператором объединения», который возвращает первое ненулевое значение из цепочки.
Например, если вы получаете значения из объекта, допускающего значение NULL, в переменной, не допускающей значения NULL, вы можете использовать этот оператор. т.е.
Примечание.
Я прочитал всю эту и многие другие ветки, но не могу найти столь подробного ответа, как этот.
Источник:
Основа коммуникации Windows, выпущенная Крейгом Макмертри ISBN 0-672-32948-4
Типы значений, допускающие значение NULL
Компилятор предотвратит попытку присвоить значение типа значения, допускающего значение NULL, обычному типу значения следующим образом:
Это не позволяет сделать это, потому что тип значения, допускающий значение NULL, может иметь значение NULL, которое он действительно имел бы в этом случае, и это значение не может быть присвоено обычному типу значения. Хотя компилятор разрешил этот код,
Заключение:
Что означают два знака вопроса в С#?
Перейдите по этой строке кода:
Что означают две вопросительные знаки, это какой-то тройственный оператор?
Трудно найти в Google.
Спасибо всем, вот самое краткое объяснение, которое я нашел на сайте MSDN:
который далее расширяется до:
По-английски это означает: «Если то, что слева, не равно нулю, используйте это, иначе используйте то, что справа».
Обратите внимание, что вы можете использовать любое количество из них в последовательности. Следующее утверждение назначит первому ненулевому номеру Answer# Answer (если все ответы нулевые, то Answer нулевой):
Также стоит упомянуть, хотя приведенное выше расширение концептуально эквивалентно, результат каждого выражения оценивается только один раз. Это важно, если, например, выражение является вызовом метода с побочными эффектами. (Благодарим @Joey за указание на это.)
Просто потому, что никто еще не сказал волшебные слова: это оператор нулевой коалесценции. Он определен в разделе 7.12 спецификации С# 3.0.
Это очень удобно, особенно из-за того, как он работает, когда он используется несколько раз в выражении. Выражение вида:
Кроме того, если тип d не является нулевым, тип всего выражения также не является нулевым.
Это нулевой оператор слияния.
Да, почти невозможно искать, если вы не знаете, как это называется! 🙂
РЕДАКТИРОВАТЬ: И это классная особенность из другого вопроса. Вы можете связать их
?? существует, чтобы предоставить значение для типа с нулевым значением, когда значение равно null. Итак, если formsAuth имеет значение null, он вернет новый FormsAuthenticationWrapper().
Два знака вопроса (??) указывают на то, что это оператор объединения.
Оператор объединения возвращает первое значение NON-NULL из цепочки. Вы можете увидеть это видео на YouTube, которое демонстрирует практически все это.
Но позвольте мне добавить больше к тому, что говорит видео.
Если вы видите английское значение объединения, оно говорит: «объединяйтесь». Например, ниже приведен простой объединяющий код, который объединяет четыре строки.
Проще говоря, оператор Coalescing возвращает первое значение NON-NULL из цепочки.
Ничего опасного в этом нет. На самом деле это красиво.
Вы можете добавить значение по умолчанию, если это желательно, например:
CODE
Это короткая рука для тернарного оператора.
Или для тех, кто не делает тройной:
Только для вашего удовольствия (зная, что вы все парни С#;).
Я думаю, что он возник в Smalltalk, где он существует уже много лет. Он определяется там как:
в UndefinedObject (aka nil class):
Есть и оценка (?) и неоценивающих версий (??) этого.
Он часто встречается в методах getter для lazy-initialized private (instance) переменных, которые остаются нулевыми до тех пор, пока они действительно не нужны.
Некоторые из примеров здесь получения значений с использованием коалесценции являются неэффективными.
Что вы действительно хотите:
Это предотвращает воссоздание объекта каждый раз. Вместо частной переменной, остающейся пустой, и создания нового объекта по каждому запросу, это обеспечивает приватную переменную, если новый объект создан.
Как правильно указывалось в многочисленных ответах, это «оператор слияния нулей» (??), о котором можно также упомянуть его двоюродного брата «Оператор с нулевым условием» (?. Или ? [), Который является оператором, который много раз он используется в сочетании с ??
Используется для проверки на нулевое значение перед выполнением операции доступа к члену (?.) Или индекса (? [). Эти операторы помогают вам написать меньше кода для обработки нулевых проверок, особенно для спуска в структуры данных.
по-старому без ? и ?? делать это
что более многословно и громоздко.
Я прочитал целую эту тему и многие другие, но я не могу найти столь же полный ответ, как это.
С помощью которого я полностью понял «зачем использовать?» и когда использовать? и как использовать.
Основы коммуникаций Windows, выпущенные Craig McMurtry
ISBN 0-672-32948-4
Типы недопустимых значений
Язык программирования С# предоставляет сокращенный синтаксис для объявления типов
построенный из System.Nullable. Этот синтаксис позволяет сокращать:
Компилятор не позволит одному из способов присвоить значение типа значения NULL для обычного типа значений следующим образом:
Это не позволяет сделать это, потому что тип значения с нулевым значением может иметь значение null, которое в действительности было бы в этом случае, и это значение не может быть присвоено типу обычного значения. Хотя компилятор разрешил бы этот код,
Второй оператор вызовет исключение, поскольку любая попытка
доступ к свойству System.Nullable.Value является недопустимой операцией, если тип
построенный из System.Nullable, не было присвоено допустимое значение T, которое в этом случае не произошло.
Одним из правильных способов присвоения значения типа значения NULL для обычного типа значений является использование свойства System.Nullable.HasValue для определения того, было ли допустимое значение T присвоено типу значения NULL:
Другим вариантом является использование этого синтаксиса:
Что означают два вопросительных знака вместе в C#?
Наткнулся на эту строку кода:
Что означают два вопросительных знака, это какой-то тернарный оператор? Это трудно найти в Google.
18 ответов
который далее расширяется до:
По-английски это означает «если то, что находится слева, не является null, используйте это, в противном случае используйте то, что находится справа.»
Обратите внимание, что вы можете использовать любое их количество последовательно. Следующее утверждение назначит первый не-null Answer# Answer (если все ответы равны null, то Answer равен null):
Кроме того, стоит отметить, что хотя приведенное выше расширение концептуально эквивалентно, результат каждого выражения вычисляется только один раз. Это важно, если, например, выражение является вызовом метода с побочными эффектами. (Спасибо @Joey за то, что указал на это.)
Это очень удобно, особенно из-за того, как он работает, когда он используется несколько раз в выражении. Выражение формы:
Кроме того, если тип d не является нулевым, то тип всего выражения также не является нулевым.
Это коалесцирующий оператор null.
Да, почти невозможно искать, если вы не знаете, как это называется! 🙂
EDIT: и это классная особенность из другого вопроса. Их можно заковать в цепи.
Спасибо всем, вот самое краткое объяснение, которое я нашел на сайте MSDN:
?? существует для того, чтобы предоставить значение для типа nullable, когда это значение равно null. Таким образом, если formsAuth-это null, он вернет новый FormsAuthenticationWrapper().
Два вопросительных знака (??) указывают на то, что это Коалесцирующий оператор.
Но позвольте мне добавить больше к тому, что говорит видео.
Если вы видите английское значение слова coalescing, то оно говорит “consolidate together”. Например, ниже приведен простой коалесцирующий код, который связывает четыре строки.
Проще говоря, Коалесцирующий оператор возвращает первое значение, не являющееся NULL, из цепочки.
Это короткая рука для тернарного оператора.
Или для тех, кто не делает троичных:
В этом нет ничего опасного. На самом деле, это прекрасно. Вы можете добавить значение по умолчанию, если это желательно, например:
CODE
Как правильно указано в многочисленных ответах, это «null coalescing operator» ( ?? ), говоря о котором, вы также можете проверить его двоюродного брата «Null-conditional Operator» (?. или ? [), который является оператором, который много раз используется в сочетании с ??
Используется для проверки null перед выполнением операции доступа к элементу ( ?. ) или индексации (? [). Эти операторы помогают вам писать меньше кода для обработки проверок null, особенно для спуска в структуры данных.
что более многословно и громоздко.
Я думаю, что он возник в Smalltalk, где он существует уже много лет. Там он определяется как:
в UndefinedObject (он же класс Нила):
Существуют как оценивающие (?), так и не оценивающие версии (??) этого.
Он часто встречается в getter-методах для лениво инициализированных частных переменных (экземпляров), которые остаются нулевыми до тех пор, пока они действительно не понадобятся.
Некоторые из приведенных здесь примеров получения значений с помощью коалесцирования неэффективны.
То, что вы действительно хотите, это:
Это предотвращает повторное создание объекта каждый раз. Вместо того чтобы частная переменная оставалась null и новый объект создавался при каждом запросе, это гарантирует, что частная переменная будет назначена, если будет создан новый объект.
Примечание:
Я прочитал всю эту тему и многие другие, но не могу найти столь же исчерпывающего ответа, как этот.
Источник:
Windows коммуникационный фонд, выпущенный Крейгом McMurtry ISBN 0-672-32948-4
Типы Значений, Допускающих Обнуление
Компилятор предотвратит попытку присвоить значение типа значения nullable обычному типу значения таким образом:
Это мешает сделать это, потому что тип значения nullable может иметь значение null, которое он фактически имел бы в этом случае, и это значение не может быть присвоено обычному типу значения. Хотя компилятор разрешил бы этот код,
Вывод:
Один правильный способ присвоить значение обнуляемого типа значений для обычного типа значения, чтобы использовать свойство System.Nullable.HasValue чтобы установить, соответствует ли действительное значение t была назначена типом, поддерживающим значение null :
Другой вариант-использовать этот синтаксис:
Это коалесцирующий оператор null, который работает аналогично тернарному оператору.
Еще один интересный момент для этого заключается в том, что» nullable тип может содержать значение или он может быть неопределенным». Поэтому, если вы попытаетесь присвоить нулевой тип значения ненулевому типу значения, вы получите ошибку времени компиляции.
Некоторые находят его более читаемым и лаконичным.
Похожие вопросы:
Возможный Дубликат : Что означают два вопросительных знака вместе в C#? Я пытаюсь понять, что делает это утверждение: что означает. это сом тип если-условии? string cookieKey = SearchDisplayType.
Возможный Дубликат : Что означают два вопросительных знака вместе в C#? может ли кто-нибудь объяснить этот синтаксис? protected string CompanyProductSeriesId < get < return.
Я познакомился с этим кодом и никак не мог понять, что означают эти два вопросительных знака? определение этой переменной выглядит следующим образом: var featureImageSizeOptional: CGSize? Код.
Что означают два вопросительных знака в строке в тройном предложении?
Недавно я видел этот оператор тернарной операции в фрагменте кода Java:
Что означает это утверждение (т.е. как мне читать его как словесное выражение условий true / false ) и какие входные данные должны быть для <
5 ответов
Это просто вложенный тернарный оператор. Понятнее, добавив скобки:
какими должны быть входы для возврата 2?
number = null и required = false
Вот почему всегда полезно явно добавлять круглые скобки, чтобы цель была ясна с первого взгляда:
Спасибо @ luk2302 и @racraman за ваши ответы! На основе изложенного вами понимания в скобках:
Я просто хочу добавить, что это можно «прочитать» как истину:
Я надеюсь, что это поможет другим, у кого могут возникнуть проблемы с чтением этого заявления.
(Примечание: я не был уверен, лучше ли опубликовать это как обновление вопроса или нет, но, поскольку это технически «объяснение», мне показалось, что ответ был лучшим местом для этого. Если вам нравится мой ответ, пожалуйста upvote @ luk2302 и @racraman, поскольку именно они вдохновили это дополнение)
То есть это эквивалентно:
Более интересный случай
Что можно было бы прочитать как
Чтобы устранить эту двусмысленность, спецификация языка Java пишет:
Условный оператор синтаксически является правоассоциативным (группирует справа налево)
Стоило бы добавить круглые скобки, было бы понятнее
Для возврата требуется 2 входа number = null и required = false