как получить значение по умолчанию типа, если тип только известен как Система. Ввести? [дубликат]

Определите "фрагмент и масштаб"...

, Если у Вас есть растровый формат, обычно не замечательно (графически говорящий) расширить его и теребить его. Можно использовать повторяемые шаблоны для предоставления иллюзии того же эффекта. Например, если у Вас есть градиент, который становится легче к концу страницы, затем Вы использовали бы диаграмму, это - единственный широкий пиксель и та же высота как Ваш контейнер (или предпочтительно больше для составления масштабирования), и затем разместите его рядом через страницу. Аналогично, если бы градиент натыкался на страницу, то это было бы один пиксель высотой и более широким, чем Ваш контейнер и повторенное ниже на страницу.

Обычно для предоставления иллюзии его простирающийся для заполнения контейнера, когда контейнер растет или уменьшается Вы делаете изображение больше, чем контейнер. Любое перекрытие не было бы отображено вне границ контейнера.

, Если Вы хотите эффект, который полагается на что-то как поле с кривыми краями, затем Вы засунули бы левую сторону своего поля к левой стороне Вашего контейнера с достаточным количеством перекрытия, что (в причине), неважно, как большой контейнер, это никогда не исчерпывает фон и затем Вы разделяете изображение на уровни правой стороны поля с кривыми краями и располагаете его справа от контейнера. Таким образом, поскольку контейнер уменьшается или растет, кривой эффект поля, кажется, уменьшается или растет с ним - он не делает на самом деле, но он дает иллюзию, которая является тем, что происходит.

Что касается реального того, чтобы заставлять изображение уменьшиться и вырасти с контейнером, необходимо было бы использовать некоторые приемы разделения на уровни, чтобы заставить изображение, казаться, функционировать как фон и некоторый JavaScript для изменения размеров его с контейнером. Нет никакого текущего способа сделать это с CSS...

при использовании векторной графики Вы - путь вне моей области экспертных знаний, я боюсь.

40
задан Patrick Klug 12 May 2010 в 02:33
поделиться

3 ответа

Поскольку вам действительно нужно беспокоиться только о типах значений (ссылочные типы будут просто нулевыми), вы можете использовать Activator.CreateInstance , чтобы вызвать для них конструктор по умолчанию.

public static object GetDefaultValue(Type type) {
   return type.IsValueType ? Activator.CreateInstance(type) : null;
}

Edit: Джон (конечно) прав. IsClass не является исчерпывающим - он возвращает False , если тип является интерфейсом.

68
ответ дан 27 November 2019 в 01:34
поделиться

Без универсального вы не можете гарантировать, что у типа есть конструктор без параметров, но вы можете найти его с помощью отражения:

public static object GetDefaultValue(Type type)
{
    ConstructorInfo ci = type.GetConstructor( new Type[] {} );
    return ci.Invoke( new object[] {} );
}

Я пробовал это в консольном приложении, и он возвращает экземпляр класса "по умолчанию" - если это класс. Если вам нужно, чтобы она работала и для ссылочных типов, вам понадобится дополнительная техника.

1
ответ дан 27 November 2019 в 01:34
поделиться

Вот как я обычно это делаю. Это позволяет полностью избежать использования IsValueType или поиска проблем с конструкторами.

public static object MakeDefault(this Type type)
{
    var makeDefault = typeof(ExtReflection).GetMethod("MakeDefaultGeneric");
    var typed = makeDefault.MakeGenericMethod(type);
    return typed.Invoke(null, new object[] { });
}

public static T MakeDefaultGeneric<T>()
{
    return default(T);
}
7
ответ дан 27 November 2019 в 01:34
поделиться
Другие вопросы по тегам:

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