Вопрос

Я пытаюсь сделать что -то вроде этого:

public class MySuperCoolClass<T>
{
    public T? myMaybeNullField {get; set;}
}

Это возможно?

Это дает мне ошибку:

Ошибка CS0453: тип T' must be a non-nullable value type in order to use it as type parameterT 'в общем типе или методе System.nullable'.

Спасибо

Это было полезно?

Решение

Добавлять where T : struct общее ограничение, чтобы избавиться от ошибки с момента Nullable<T> принимает только struct.

public class MySuperCoolClass<T> where T : struct
{
    public T? myMaybeNullField { get; set; }
}

Nullable<T> определяется, как показано ниже

public struct Nullable<T> where T : struct

Итак, вы также вынуждены сделать это, просто чтобы не допустить MySuperCoolClass<object> что делает object? что недопустимо.

Другие советы

Вы видите свою работу?

public static Nullable<T> ToNullable<T>(this string s) where T: struct
{
    Nullable<T> result = new Nullable<T>();
    try
    {
        if (!string.IsNullOrEmpty(s) && s.Trim().Length > 0)
        {
            TypeConverter conv = TypeDescriptor.GetConverter(typeof(T));
            result = (T)conv.ConvertFrom(s);
        }
    }
    catch { } 
    return result;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top