Nullable типы и using
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.07.08 13:29
Оценка:
Интересно, почему так нельзя:
using MyAlias = MyGenericType<MyType>?;


А так можно:
using MyAlias = MyGenericType<MyType?>;
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>
AVK Blog
Re: Nullable типы и using
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 09.07.08 13:34
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Интересно, почему так нельзя:

AVK>
AVK>using MyAlias = MyGenericType<MyType>?;
AVK>


Ну понятно почему — потому что по грамматике справа от "=" ожидается type or namespace name, и по той же грамматике "?" в него не входит.

Это, кстати, хороший вопрос. Ибо в спецификации c# ЯВНО сказано о полной взаимозаменяемости синтаксисов T? и Nullable<T>
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re: Nullable типы и using
От: IT Россия linq2db.com
Дата: 09.07.08 13:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Интересно, почему так нельзя:

AVK>
AVK>using MyAlias = MyGenericType<MyType>?;
AVK>


Видимо синтаксически неправильная конструкция.

Можно попробовать так:

using MyAlias = System.Nullable<MyGenericType<MyType>>;
Если нам не помогут, то мы тоже никого не пощадим.
Re: Nullable типы и using
От: nikov США http://www.linkedin.com/in/nikov
Дата: 09.07.08 13:43
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Интересно, почему так нельзя:

AVK>А так можно:

Ну формально, как уже заметили, такая грамматика:

using-alias-directive:
  using identifier = namespace-or-type-name ;


Видимо, осталось со времен C# 1.0, когда было решено, что (наверное, для ясности) нельзя делать алиасы для указателей и массивов. А потом грамматика перекочевала в следующие версии без изменений.
Re[2]: Nullable типы и using
От: nikov США http://www.linkedin.com/in/nikov
Дата: 09.07.08 13:49
Оценка:
Здравствуйте, xvost, Вы писали:

X>Это, кстати, хороший вопрос. Ибо в спецификации c# ЯВНО сказано о полной взаимозаменяемости синтаксисов T? и Nullable<T>


Действительно, написано так:

A nullable type is written T?, where T is the underlying type. This syntax is shorthand for System.Nullable<T>, and the two forms can be used interchangeably.


Но видимо, эту обобщающую фразу не нужно понимать слишком буквально. Вот другой пример:

class Program
{
    static void Main()
    {
        System.Nullable<int>.Equals(null, null); // OK
        int?.Equals(null, null); // Invalid expression term '.'
    }
}
Re[2]: Nullable типы и using
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.07.08 13:55
Оценка:
Здравствуйте, xvost, Вы писали:

X>Ну понятно почему — потому что по грамматике справа от "=" ожидается type or namespace name, и по той же грамматике "?" в него не входит.


Грамматика — следствие. Вопрос в том — это просто недосмотр или так специально задумано?
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>
AVK Blog
Re[3]: Nullable типы и using
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 09.07.08 15:03
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Грамматика — следствие. Вопрос в том — это просто недосмотр или так специально задумано?


Я думаю что недосмотр.

Одно "но" — мне лень сейчас проводить анализ, что возможно будут проблемы неоднозначного парсинга nullable-типов и "?:" выражений. Возможно как раз тут кроется причина
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re: Nullable типы и using
От: Аноним  
Дата: 10.07.08 21:52
Оценка: -1
В using вообще нельзя создать alias на любой Nullable тип, а не только generic, если записывать его с "?".
Чтобы это сделать нужно указывать Nullable тип в форме System.Nullable<T>.
Т.е. ваш alias можно было бы записать в виде:
using MyAlias = System.Nullable<MyGenericType<MyType>>

А зделать со знаком вопроса так нельзя потому, что по спецификации C# не положено.
Re[2]: Nullable типы и using
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 11.07.08 09:26
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>А зделать со знаком вопроса так нельзя потому, что по спецификации C# не положено.


Собственно, здесь и обсуждается откуда такое ограничение в спецификации
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re: Nullable типы и using
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.07.08 11:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Интересно, почему так нельзя:

AVK>
AVK>using MyAlias = MyGenericType<MyType>?;
AVK>


AVK>А так можно:

AVK>
AVK>using MyAlias = MyGenericType<MyType?>;
AVK>


Думаю, что это просто ошибка в парсере. В прочем, это может быть более глубокая ошибка — ошибка в эвристике применяемой для устранения неоднозначности знака "?" или знака ">".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Nullable типы и using
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.07.08 11:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Думаю, что это просто ошибка в парсере. В прочем, это может быть более глубокая ошибка — ошибка в эвристике применяемой для устранения неоднозначности знака "?" или знака ">".


Нет, парсер здесь действует точно по стандарту. Другой вопрос, что это может быть недоработка в стандарте.
Re[3]: Nullable типы и using
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.07.08 12:49
Оценка:
Здравствуйте, xvost, Вы писали:

X>Собственно, здесь и обсуждается откуда такое ограничение в спецификации


Решарпер, кстати, на выражение Nullable<MyType> в юзинге выдает suggestion с просьбой заменить на T?
... << RSDN@Home 1.2.0 alpha 4 rev. 1095 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re: Nullable типы и using
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.07.08 13:06
Оценка:
Интересно, почему так нельзя:
using MyAlias = int;


А так можно:
using MyAlias = System.Int32;
Re[2]: Nullable типы и using
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.07.08 13:08
Оценка:
Здравствуйте, nikov, Вы писали:

N>Интересно, почему так нельзя:

N>
N>using MyAlias = int;
N>


N>А так можно:

N>
N>using MyAlias = System.Int32;
N>


Наверное потому что практического смысла давать алиасы уже существующим в языке хардкодным алиасам смысла нет. Хотя конечно гипотетическую полезность от такого финта придумать можно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1095 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[4]: Nullable типы и using
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 11.07.08 14:30
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Решарпер, кстати, на выражение Nullable<MyType> в юзинге выдает suggestion с просьбой заменить на T?


Ща поправлю, спасибо
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[3]: Nullable типы и using
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.07.08 09:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Наверное потому что практического смысла давать алиасы уже существующим в языке хардкодным алиасам смысла нет. Хотя конечно гипотетическую полезность от такого финта придумать можно.
А ввести алиас на алиас можно?
типа:
using MyAlias = System.Int32;
using MyAlias2 = MyAlias;
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Nullable типы и using
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.07.08 09:06
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А ввести алиас на алиас можно?


Попробуй. Скорее всего нет. Можно, ЕМНИП, объявить алиас вне неймспейса, а использовать его внутри.
using MyAlias = System.Int32;

namespace MyNamespace
{
    using MyAlias2 = MyAlias;
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1095 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[4]: Nullable типы и using
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.07.08 09:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А ввести алиас на алиас можно?


9.4.1 Using alias directives
....
The order in which using-alias-directives are written has no significance, and resolution of the namespace-or-type-name referenced by a using-alias-directive is not affected by the using-alias-directive itself or by other using-directives in the immediately containing compilation unit or namespace body. In other words, the namespace-or-type-name of a using-alias-directive is resolved as if the immediately containing compilation unit or namespace body had no using-directives.


То есть, нельзя ввести алиас на алиас, определенный в той же декларации пространства имен, но можно — на определенный во внешней.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.