В C#, что'?' в типе 'DateTime?' [дубликат]

6
задан Jon Seigel 7 April 2010 в 01:05
поделиться

6 ответов

? делает его злоумеренным типом (его сокращение для сопутствующей структуры и применимо ко всем типам значений) Отказ

Значительные типы (C #)

Примечание:

?? Вы связаны с нулевым коамическим оператором, который совершенно отличается.

27
ответ дан 8 December 2019 в 03:00
поделиться

Наиболее вероятно, что он включает ТОННЫ включений. Я полагаю, что -MD перечислит все файлы включения в данном файле CPP (который включает в себя includes и так далее).

-121--2319037-

Убедитесь, что вы вызываете [super viewWillAppean:] и [super viewDidAppean:] во всех местах, где вы переопределяете viewWillAppean или viewDidAppease.

Вероятно, верно и для всех других методов viewDidWhather и viewWillWhather.

Проблема заключается в том, что UITextView не получает сообщение для отображения на экране при первом отображении таблицы, но получает сообщение при необходимости обновления.

-121--4906979-

Как другие упомянули об этом? синтаксис делает тип нулевым.

При работе с типами, допускающими значение NULL, необходимо помнить о нескольких ключевых вещах (взятых из документов , но я подумал, что было бы полезно вызвать их здесь):

  • При работе с типами, допускающими значение NULL, обычно используются свойства только для чтения Value и HasValue .

например.

int? num = null;
if (num.HasValue == true)
{
    System.Console.WriteLine("num = " + num.Value);
}
  • Для назначения значения по умолчанию типу, допускающему значение null, можно использовать оператор объединения null. Это очень удобно.

например.

int? x = null;
int y = x ?? -1;
0
ответ дан 8 December 2019 в 03:00
поделиться

Я подозреваю, что в ExceptionHandler.OnunhandledException Можно поднять новое исключение, которое остается необработанным, пузырится до обработчика необработанных исключений, что повышает ваш ExceptionHandler. OnunHandledException метод и т. Д. (Бесконечная петля -> переполнение стека).

Так что Doublecheck ваш метод onunhandledexception для брошенных ошибок.

Редактировать: забавно, я пытаюсь воспроизвести вашу ошибку, но вместо того, чтобы снова выбрасывать ошибку снова и снова, мое приложение. Просто выходит после необразованного метода обработчика исключений, независимо от того, что происходит там. Вы отладки или бегаете? Это может вызвать разницу.

-121--2399366-

Это ярлык для Nullable . Будьте в виду, что методы, использующие эти типы, не могут быть подвержены COM, так как они используют дженерики, несмотря на то, что они не выглядят.

0
ответ дан 8 December 2019 в 03:00
поделиться

перечислить - это ответ:

for index, element in enumerate(iterable):
    #work with index and element
-121--1595564-

Вопрос, на который нужно ответить:

«Нужно ли представлять пользователю хорошие сообщения». Пример: Уже есть задание с именем TestJob1. Если ответ Нет , просто поймите ошибку и выведите общее сообщение Если ответ Да , продолжайте читать

Если вы поймали ошибку после вставки , не хватает информации для представления правильного сообщения (по крайней мере, в агностической БД)

С другой стороны, могут быть условия гонки , и вы можете одновременно выполнить транзакцию, пытаясь вставить те же данные, поэтому вам необходимо ограничение БД

Подход, который хорошо работает:

  • проверить прежде, чем представить хороший сообщение
  • перехватить исключение и выдать общее сообщение об ошибке (при условии, что это не произойдет очень часто)
-121--2580690-

? в данном случае не является оператором, является частью типа. Синтаксис

DateTime?

является кратким для

Nullable<DateTime>

, поэтому он объявляет, что LastLogon является свойством, которое возвращает значение Null < DateTime > . Для получения дополнительной информации см. MSDN .

То ?? , с которым вы связали , имеет здесь некоторое значение. Это оператор нуль-коалесцирования, который имеет следующую семантику. Выражение

x ?? y

вычисляется как y , если x равно null , в противном случае оно вычисляется как x . Здесь x может быть ссылочным типом или типом, допускающим значение NULL.

4
ответ дан 8 December 2019 в 03:00
поделиться

Снаряжение для

Nullable<DateTime>
0
ответ дан 8 December 2019 в 03:00
поделиться

Ответ ( Intelocked.CompeyExchange ) уже был дан, но вот мой пример использования:

private int _isDisposing;

public bool IsDisposing
{
    get
    {
        return this._isDisposing != 0;
    }
}

public void Dispose()
{
    // Side note: I may want to `return` instead of `throw`
    if (Interlocked.CompareExchange(ref _isDisposing, 1, 0) != 0)
        throw new InvalidOperationException("Dispose was recursively called.");

    try
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
    finally
    {
        _isDisposing = 0;
    }
}
-121--4605463-

Это всегда хорошая идея вызова функции позже, хотя javascript работает так.

Большинство языков не будут работать таким образом, вместо этого.

function say(){
    alert("say");
}

say();

или

say = function(){
    alert("say");
}

say();

или

(function(){
    alert("say");
})();
-121--3021032-

Как уже упоминалось, ? используется для объявления типа значения как допускающего значение null .

Это замечательно в нескольких ситуациях:

  • При извлечении данных из базы данных с нулевым значением, хранящимся в поле, допускающем значение null (которое сопоставляется со значением типа .NET)
  • Когда необходимо представить «не указано» или «не найдено».

Например, рассмотрим класс, используемый для представления отзывов от клиента, которому был задан ряд необязательных вопросов:

class CustomerFeedback
{
    string Name { get; set; }
    int? Age { get; set; }
    bool? DrinksRegularly { get; set; }
}

Использование типов NULL для Age и ChargedRegular может использоваться для указания на то, что клиент не ответил на эти вопросы.

В приведенном примере значение null для LastLogon означает, что пользователь никогда не входил в систему.

0
ответ дан 8 December 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: