C#, универсальный, “где ограничение” с “любым универсальным типом” определение?

Этот код (C# DotNet 1.0 вперед) работает вполне хорошо для сериализации большинства объектов к XML. (и назад), Это не работает на объекты, содержащие ArrayLists, и если возможная палка к использованию только Массивов

using System;    
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


public static string Serialize(object objectToSerialize)
{
    MemoryStream mem = new MemoryStream();          
    XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());         
    ser.Serialize(mem, objectToSerialize);                      
    ASCIIEncoding ascii = new ASCIIEncoding();
    return ascii.GetString(mem.ToArray());
}        

public static object Deserialize(Type typeToDeserialize, string xmlString)
{
    byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
    MemoryStream mem = new MemoryStream(bytes);         
    XmlSerializer ser = new XmlSerializer(typeToDeserialize);
    return ser.Deserialize(mem);
}
107
задан Vegard Larsen 7 January 2013 в 12:32
поделиться

2 ответа

Обычно есть 2 способа добиться этого.

Option1 : Добавьте еще один параметр в IGarrage , представляющий T , который следует передать в ограничение IGenericCar :

interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... }

Option2 : Определите базовый интерфейс для IGenericCar , который не является универсальным и ограничивает этот интерфейс

interface IGenericCar { ... }
interface IGenericCar<T> : IGenericCar { ... }
interface IGarrage<TCar> where TCar : IGenericCar { ... }
137
ответ дан 24 November 2019 в 03:42
поделиться

Имеет ли смысл делать что-то вроде:

interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType > 
    where TCar: IGenericCar< TCarType > {...}
6
ответ дан 24 November 2019 в 03:42
поделиться
Другие вопросы по тегам:

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