C#: Оператор ??

Программирование на Юнити.

C#: Оператор ??

Сообщение alexz 01 мар 2011, 00:59

Я тут уже спрашивал, но как-то заглохло. Вопрос: почему следующий код, если компонент MeshFilter отсутствует, всегда возвращает null?

Синтаксис:
Используется csharp
var meshFilter = gameObject.GetComponent<MeshFilter>() ?? gameObject.AddComponent<MeshFilter>();
Последний раз редактировалось alexz 01 мар 2011, 01:16, всего редактировалось 1 раз.
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: C#: Оператор ??

Сообщение Paul Siberdt 01 мар 2011, 01:05

Это C# :-\
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: C#: Оператор ??

Сообщение alexz 01 мар 2011, 01:11

Это C#.
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: C#: Оператор ??

Сообщение Paul Siberdt 01 мар 2011, 01:12

var meshFilter ?

Вам уже более чем достаточно ответили на офф.форуме:

I personally never use it, I hate unreadable code and "idiotically short if you have auto complete and intellisense" is unreadable out of my view.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: C#: Оператор ??

Сообщение alexz 01 мар 2011, 01:15

Он ответил не на поставленный, а на какой-то другой, воображаемый вопрос.

var meshFilter ?

А что такого?
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: C#: Оператор ??

Сообщение zoon 01 мар 2011, 05:16

alexz писал(а):Он ответил не на поставленный, а на какой-то другой, воображаемый вопрос.


Я тоже столкнулся с этим багом - он существует только если собирать внутри редактора - в релизных сборках все OK.
Честно говоря у меня не было времени копать кто неправ - Unity или компилятор - я просто добавил комментарий для Решарпера:

Синтаксис:
Используется csharp
    // ReSharper disable ConvertIfStatementToNullCoalescingExpression
    ...
    // ReSharper restore ConvertIfStatementToNullCoalescingExpression
 


[EDIT]
Не выдержал и проверил - IL метода с ?? собранный для редактора и для релиза одинаковый (компилятор не причем). В редакторе есть null-reference в релизе все OK. Я грешу на среду исполнения внутри редактора.
Последний раз редактировалось zoon 01 мар 2011, 05:54, всего редактировалось 1 раз.
Джаггер
Evo
Аватара пользователя
zoon
UNIт
 
Сообщения: 58
Зарегистрирован: 24 май 2010, 08:27

Re: C#: Оператор ??

Сообщение zoon 01 мар 2011, 05:29

Paul Siberdt писал(а):var meshFilter ?

Вам уже более чем достаточно ответили на офф.форуме:

I personally never use it, I hate unreadable code and "idiotically short if you have auto complete and intellisense" is unreadable out of my view.


Вы готовы от Дриморы выслушивать советы о стиле программирования? :) У него есть мнение абсолютно по любому вопросу - 18500+ постов это не шутка. (Я удержусь от личных выпадов).
Джаггер
Evo
Аватара пользователя
zoon
UNIт
 
Сообщения: 58
Зарегистрирован: 24 май 2010, 08:27

Re: C#: Оператор ??

Сообщение Zaicheg 01 мар 2011, 13:31

Paul Siberdt писал(а):var meshFilter ?

var (справочник по C#)
http://msdn.microsoft.com/ru-ru/library/bb383973.aspx
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: C#: Оператор ??

Сообщение Paul Siberdt 01 мар 2011, 14:15

Нет, на Дреамору мне параллельно. Просто буча поднята из-за такого пустякового каприза, что в данном случае, я соглашусь с главным болтуном офф.форума. :p
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: C#: Оператор ??

Сообщение Zaicheg 01 мар 2011, 14:55

Меня наоборот этот вопрос очень заинтересовал и я пока не могу понять причину такой работы.
Можно конечно использовать для краткой записи в данном случае оператор ?: -- однако всё равно интересно.
Кстати, можно ссылку на тему на на оф. форуме?
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: C#: Оператор ??

Сообщение Paul Siberdt 01 мар 2011, 16:16

Ссылка в первом посте, а ?: с такими условиями/выражениями тоже не работает...
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: C#: Оператор ??

Сообщение Zaicheg 01 мар 2011, 16:29

Paul Siberdt писал(а):Ссылка в первом посте, а ?: с такими условиями/выражениями тоже не работает...

Работает
Код: Выделить всё
void Start()
{
   var meshFilter = GetComponent<MeshFilter>() ? GetComponent<MeshFilter>() : gameObject.AddComponent<MeshFilter>();
   Debug.Log(meshFilter);
}

-> всегда "MyGO (UnityEngine.MeshFilter)"
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: C#: Оператор ??

Сообщение Paul Siberdt 01 мар 2011, 16:31

А, ну да, я еще больше упрощал, потому и не работало. :p
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: C#: Оператор ??

Сообщение alexz 01 мар 2011, 23:23

alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 6