64 lines
2.3 KiB
C#
64 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Pf2eDataScrapper.WPF.ViewModels.EntityViewStructure;
|
|
|
|
/// <summary>
|
|
/// Базовый класс для полей структуры.
|
|
/// </summary>
|
|
/// <param name="builder">Класс построения структуры данных.</param>
|
|
/// <param name="name">Название поля.</param>
|
|
/// <param name="depth">Глубина поля.</param>
|
|
internal abstract class StructureField(StructureBuilder builder, string name, int depth)
|
|
{
|
|
/// <summary>
|
|
/// Название поля.
|
|
/// </summary>
|
|
public readonly string Name = name;
|
|
|
|
/// <summary>
|
|
/// Тип поля структуры.
|
|
/// </summary>
|
|
public abstract StructureFieldType FieldType { get; }
|
|
|
|
/// <summary>
|
|
/// Класс построения структуры данных.
|
|
/// </summary>
|
|
public readonly StructureBuilder Builder = builder;
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, отображается ли поле.
|
|
/// </summary>
|
|
public virtual bool Visible { get; set; } = true;
|
|
|
|
/// <summary>
|
|
/// Глубина поля структуры.
|
|
/// </summary>
|
|
public readonly int Depth = depth;
|
|
|
|
/// <summary>
|
|
/// Получить строку, представляющую тип поля.
|
|
/// </summary>
|
|
/// <returns>Строка, представляющая тип поля.</returns>
|
|
public abstract string GetTypeString();
|
|
|
|
/// <summary>
|
|
/// Получить строку, представляющую значение поля.
|
|
/// </summary>
|
|
/// <returns>Строка, представляющая значение поля.</returns>
|
|
public abstract string GetValueString();
|
|
|
|
/// <summary>
|
|
/// Получить набор строк, используя результат функция.
|
|
/// </summary>
|
|
/// <typeparam name="T">Тип результирующей строки.</typeparam>
|
|
/// <param name="func">Функция, оборажения поля в результирующую строку.</param>
|
|
/// <returns>Коллекция, содержащая набор строк.</returns>
|
|
public virtual ICollection<T> GetRows<T>(Func<StructureField, T> func)
|
|
{
|
|
StructureField[] q = [this];
|
|
return q.Select(func).ToList();
|
|
}
|
|
}
|