Преобразование бокса из "двойного" в "System.Runtime.Serialization.ISerializable"

Я хочу сериализовать класс Range<T>, поэтому реализую для него ISerializable, как показано ниже:

public class Range<T> where T : IComparable<T>, ISerializable
{
    /// <summary>Minimum value of the range.</summary>
    public T Minimum { get; set; }

    /// <summary>Maximum value of the range.</summary>
    public T Maximum { get; set; }

    /// <summary>Presents the Range in readable format.</summary>
    /// <returns>String representation of the Range</returns>
    public override string ToString()
    {
        return string.Format("[{0} - {1}]", Minimum, Maximum);
    }

    /// <summary>Determines if the range is valid.</summary>
    /// <returns>True if range is valid, else false</returns>
    public bool IsValid()
    {
        return Minimum.CompareTo(Maximum) <= 0;
    }

    public XmlSchema GetSchema() { return null; }

    public void ReadXml(XmlReader reader)
    {
        // start reading
        reader.MoveToContent();

        Type t = typeof(T);
        var min = reader["Minimum"];
        var max = reader["Maximum"];

        Minimum = (T)Convert.ChangeType(min, t);
        Maximum = (T)Convert.ChangeType(max, t);

        reader.Read();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteAttributeString("Minimum", Minimum.ToString());
        writer.WriteAttributeString("Maximum", Maximum.ToString());
    }
}

но когда я хочу использовать этот класс, как показано ниже...,

public Range<double> Whr;

я получаю эту ошибку

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS0315 Тип «double» не может использоваться в качестве параметра типа «T» в универсальном типе или методе «Range». Преобразование бокса из "двойного" в "System.Runtime.Serialization.ISerializable" отсутствует. XCLASS ...\ACLASS.cs 89 Активный

Как я могу исправить эту ошибку?


person Babak.Abad    schedule 20.06.2019    source источник
comment
Вы не можете, double не реализует ISerializable.   -  person DavidG    schedule 20.06.2019
comment
@DavidG Я думаю, что цель состоит в том, чтобы класс реализовал его, а не T.   -  person D Stanley    schedule 20.06.2019
comment
@DStanley Хм, да, ты мог бы быть прямо здесь.   -  person DavidG    schedule 20.06.2019


Ответы (1)


Я думаю, вы хотите:

public class Range<T> : ISerializable where T : IComparable<T>

Как у вас сейчас, T должен реализовать ISerializable. Вместо этого вы хотите, чтобы класс реализовал ISerializable.

person D Stanley    schedule 20.06.2019