Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли переменной импа int задать значение null? 
:(
    Опции темы
STRELOKBMSTU
Дата 2.9.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 11.8.2007
Где: Russia.MR.Moscow( );

Репутация: нет
Всего: нет



Можно ли переменной импа int задать значение null? Если можно, то как это сделать?
PM MAIL ICQ Skype   Вверх
HalkaR
Дата 2.9.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 5
Всего: 42



Нет. Но специально для решения данной проблемы в .Net есть тип Nullable. Т.е. в вашем случае это выглядит так
Код

int? a = null;
int? b = 10;

PM MAIL   Вверх
SpaceSpace
Дата 3.9.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



теоретически, просто происходит упаковка значимого типа, но не в object, а в класс Nullable,
т.е. int? перестает быть значимым, становится ссылочным и храниться соответсвеннон не в стеке , а в куче

Это сообщение отредактировал(а) SpaceSpace - 3.9.2007, 09:33


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
HalkaR
Дата 3.9.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 5
Всего: 42



Цитата(SpaceSpace @ 3.9.2007,  09:32)
теоретически, просто происходит упаковка значимого типа, но не в object, а в класс Nullable,
т.е. int? перестает быть значимым, становится ссылочным и храниться соответсвеннон не в стеке , а в куче

Вот исходник типа Nullable:
Код

[Serializable, StructLayout(LayoutKind.Sequential), TypeDependency("System.Collections.Generic.NullableComparer`1"), TypeDependency("System.Collections.Generic.NullableEqualityComparer`1")]
public struct Nullable<T> where T: struct
{
    private bool hasValue;
    internal T value;
    public Nullable(T value)
    {
        this.value = value;
        this.hasValue = true;
    }

    public bool HasValue
    {
        get
        {
            return this.hasValue;
        }
    }
    public T Value
    {
        get
        {
            if (!this.HasValue)
            {
                ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_NoValue);
            }
            return this.value;
        }
    }
    public T GetValueOrDefault()
    {
        return this.value;
    }

    public T GetValueOrDefault(T defaultValue)
    {
        if (!this.HasValue)
        {
            return defaultValue;
        }
        return this.value;
    }

    public override bool Equals(object other)
    {
        if (!this.HasValue)
        {
            return (other == null);
        }
        if (other == null)
        {
            return false;
        }
        return this.value.Equals(other);
    }

    public override int GetHashCode()
    {
        if (!this.HasValue)
        {
            return 0;
        }
        return this.value.GetHashCode();
    }

    public override string ToString()
    {
        if (!this.HasValue)
        {
            return "";
        }
        return this.value.ToString();
    }

    public static implicit operator T?(T value)
    {
        return new T?(value);
    }

    public static explicit operator T(T? value)
    {
        return value.Value;
    }
}

Это -структура, т.е. value тип, так что никакой упаковки не происходит.
PM MAIL   Вверх
SpaceSpace
Дата 3.9.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



HalkaR
очень убедительный аргумент, НО
Код

public override bool Equals(object other)
    {
        if (!this.HasValue)
        {
            return (other == null);
        }
        if (other == null)
        {
            return false;
        }
        return this.value.Equals(other);
    }

    public override int GetHashCode()
    {
        if (!this.HasValue)
        {
            return 0;
        }
        return this.value.GetHashCode();
    }

    public override string ToString()
    {
        if (!this.HasValue)
        {
            return "";
        }
        return this.value.ToString();
    }


не напоминают ли тебе эти оверрайды object ? smile 

если сможешь меня переубедить - дам по репе smile smile

кста,
структуры - не всегда в стэке храняться,
у них ограничение на максимальный размер

и вообще, чтобы дженерики были value -- это нонсенс smile 

или у меня настолько сильные пробелы в теории? smile 

Это сообщение отредактировал(а) SpaceSpace - 3.9.2007, 10:04


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
QryStaL
Дата 3.9.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32



Ну, все правильно. Структуры неявно наследуются от System.ValueType, а тот в свою очередь от System.Object. Поэтому наследуют все методы object.

Цитата(SpaceSpace @  3.9.2007,  09:42 Найти цитируемый пост)
чтобы дженерики были value -- это нонсенс

Не вижу никаких оснований так считать.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
SpaceSpace
Дата 3.9.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



ну.. в общем я подумал.... почитал..
скорее всего мои догадки были неверны smile 

Корень моего незнания - в том что меня переклинило и я попутал object c System.Object 

поэтому прошу прошения за дезинформацию,
Nullable - value, лежит в куче

Это сообщение отредактировал(а) SpaceSpace - 3.9.2007, 10:32


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
HalkaR
Дата 3.9.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 5
Всего: 42



Цитата(SpaceSpace @ 3.9.2007,  10:29)
Корень моего незнания - в том что меня переклинило и я попутал object c System.Object 

object и System.Object суть одно и тоже - синонимы это.
А то, что неявняе наследники reference типа могут быть value типами - ничего удивительного.

Это сообщение отредактировал(а) HalkaR - 3.9.2007, 10:37
PM MAIL   Вверх
QryStaL
Дата 3.9.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32



Цитата(SpaceSpace @  3.9.2007,  10:29 Найти цитируемый пост)
попутал object c System.Object 


Это одно и то же


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
HalkaR
Дата 3.9.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 5
Всего: 42



Цитата(SpaceSpace @  3.9.2007,  09:42 Найти цитируемый пост)
структуры - не всегда в стэке храняться,
Всегда, если они неупакованны.

Цитата(SpaceSpace @  3.9.2007,  09:42 Найти цитируемый пост)
и вообще, чтобы дженерики были value -- это нонсенс

Никакого нонсенса smile
Цитата(SpaceSpace @  3.9.2007,  09:42 Найти цитируемый пост)
или у меня настолько сильные пробелы в теории?
Похоже что да. smile

PM MAIL   Вверх
SpaceSpace
Дата 3.9.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



Цитата

А то, что неявняе наследники reference типа могут быть value типами - ничего удивительного.


вот это и есть мой пробел
спасибо за инфу


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1087 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.