c# - текста - wpf inputbox




Что такое default(object); делать в C#? (5)

Задает значение по умолчанию параметра типа. Это будет значение null для ссылочных типов и ноль для типов значений.

Просмотреть по default

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

MyVariable = default(MyObject);

и мне интересно, что это значит ...


Возможно, это может помочь вам:

using System;
using System.Collections.Generic;
namespace Wrox.ProCSharp.Generics
{
    public class DocumentManager < T >
    {
        private readonly Queue < T > documentQueue = new Queue < T > ();
        public void AddDocument(T doc)
        {
            lock (this)
            {
                documentQueue.Enqueue(doc);
            }
        }

        public bool IsDocumentAvailable
        {
            get { return documentQueue.Count > 0; }
        }
    }
}

Невозможно присвоить значения null общим типам. Причина в том, что общий тип также может быть создан как тип значения, а null разрешен только с ссылочными типами. Чтобы обойти эту проблему, вы можете использовать ключевое слово по умолчанию. С ключевым словом по умолчанию null присваивается ссылочным типам, а 0 - типам значений.

public T GetDocument()
{
    T doc = default(T);
    lock (this)
    {
        doc = documentQueue.Dequeue();
    }
    return doc;
}

Ключевое слово по умолчанию имеет несколько значений в зависимости от контекста, в котором он используется. Оператор switch использует значение по умолчанию для определения случая по умолчанию, а в случае дженериков значение по умолчанию используется для инициализации общих типов либо нулями, либо 0 в зависимости от того, является ли это ссылочным или типом значений.


Ключевое слово по default возвращает значение «по умолчанию» или «пустое» для переменной запрашиваемого типа.

Для всех ссылочных типов (определенных с помощью class , delegate и т. Д.) Это значение равно null . Для типов значений (определенных с помощью struct , enum и т. Д.) Это значение с DateTime 0001-01-01 00:00:00 значением (например, int 0 , DateTime 0001-01-01 00:00:00 и т. Д.).

В основном он используется с общим кодом, который может быть применен как к ссылочным, так и к типам значений, поскольку вы не можете присвоить значение null переменной типа значения.


Он установит значение по умолчанию для объекта переменной: null для ссылочных типов и 0 для типов значений.


  • Для ссылочного типа он возвращает null
  • Для значения типа, отличного от Nullable<T> он возвращает нулевое значение
  • Для Nullable<T> он возвращает пустое (псевдо-нулевое) значение (на самом деле это повторная постановка второй пули, но стоит сделать ее явной)

Наибольшее использование default(T) по default(T) относится к дженерикам, и такие вещи, как шаблон Try... :

bool TryGetValue(out T value) {
    if(NoDataIsAvailable) {
        value = default(T); // because I have to set it to *something*
        return false;
    }
    value = GetData();
    return true;
}

Как это бывает, я также использую его в некотором генерации кода, где больно инициализировать поля / переменные, но если вы знаете тип:

bool someField = default(bool);
int someOtherField = default(int)
global::My.Namespace.SomeType another = default(global::My.Namespace.SomeType);




c#