Задать вопрос
Ответы пользователя по тегу Восстановление данных
  • C#. Возможно ли создать список объектов заранее неизвестного типа?

    Shedal
    @Shedal
    Если заранее неизвестно, каких типов будут элементы, и при этом их нужно будет экспортировать в какой-то формат, то пишут конвертеры для всех стандартных типов, а для остальных подразумевается, что они должны реализовать какой-то интерфейс.

    К примеру, вот так:

    protected Dictionary<Type, IExporter> Exporters { get; set; }
    
    public void Export(object value, StreamWriter writer)
    {
    	IExporter exporter = FindExporter(value.GetType());
    	
    	if (exporter != null)
    	{
    		exporter.Export(value, writer);
    	}
    	else
    	{
    		writer.WriteString(value.ToString());
    	}
    }
    
    private IExporter FindExporter(Type type)
    {
    	IExporter exporter = null;
    	
    	if(Exporters.ContainsKey(type))
    	{
    		exporter = Exporters[type];
    	}
    	else
    	{
    		if(typeof(IMyFormatExportable).IsAssignableFrom(type))
    		{
    			exporter = new ExportAwareExporter(type);
    		}
    	}
    	
    	return exporter;
    }
    


    И для своих классов, которые хотите экспортировать вручную, реализовываете такой интерфейс:

    public interface IMyFormatExportable
    {
    	void Export(StreamWriter writer);
    }
    
    public MyClass : IMyFormatExportable
    {
    	// ...
    	
    	void Export(StreamWriter writer)
    	{
    		// writer.Write...(...);
    	}
    }
    
    Ответ написан