Dev O'Connor Ответов: 1

Динамическое перечисление передается в качестве параметра класса для создания словаря


Привет,

я не уверен, что это вообще возможно, и я пробовал сам, но, похоже, ничего не могу с этим поделать:

у меня есть несколько подклассов, которые выполняют кучу SQL-операторов и хранят значения в подклассах, одним из недостатков этого является то, что мне приходится настраивать свойства под каждым классом для хранения значений.

Мои мысли о том, где создать класс, который может быть унаследован или что-то в родительском классе, чтобы я мог передать перечисление (перечисление содержит все имена полей и порядковый номер), дочерний класс затем создаст словарь этого перечисления и строку для хранения значений.

Создавая словарь как таковой, я могу использовать один общий класс для хранения всех параметров без необходимости выписывать свойства и класс в каждом классе, который у меня есть, просто пытаясь избежать повторяющегося кода повсюду (pet hate)

зачем писать что-то 20 раз, когда вы можете написать адаптируемый класс для удовлетворения ваших потребностей! :)

Итак, просто чтобы уточнить. Я хочу передать кучу разных перечислений одному и тому же методу создания экземпляра класса, а затем преобразовать его в словарь переданного перечисления и строки, но из-за того, что передаются разные перечисления, это должно быть сделано на лету, если это имеет смысл? Поэтому, как только словарь заполнен, и я использую Dictionary[] затем он приносит мне список членов enum?

Как это statnds 'EnumObj'
this.objDict = new Dictionary<EnumObj, String>();


основные моменты с его сообщением об ошибке
The type or namespace name 'EnumObj' could not be found (are you missing a using directive or an assembly reference?)


Вот базовый пример кода, с которым я работаю
class ParentClass
{
    /// <summary>
    /// Holds the properties
    /// </summary>
    public ChildClass Properties;

    public ParentClass()
    {
        this.Properties = new ChildClass(typeof(MyEnum));
    }

    enum MyEnum
    {
        col1 = 1,
        col2 = 2,
        col3 = 3
    }



}
/// <summary>
/// Holds the properties values for the array record
/// </summary>
public class ChildClass
{

    private Object objDict;

    public ChildClass(Type EnumObj)
    {
        this.objDict = new Dictionary<EnumObj, String>();
    }
    public ChildClass(Object EnumObj)
    {
        this.objDict = new Dictionary<typeof(EnumObj), String>();
    }
}


Что я уже пробовал:

Различные варианты передачи метода, я пытался передать перечисление как объект, а не как тип, а затем преобразовать его.

1 Ответов

Рейтинг:
8

InbarBarkai

Поскольку вы используете универсальный словарь, дочерний класс должен быть универсальным.
Попробовать это:

/// <summary>
/// Holds the properties values for the array record
/// </summary>
public class ChildClass<TEnum>
{
    private Dictionary<TEnum,String> objDict;
 
    public ChildClass()
    {
        this.objDict = new Dictionary<TEnum,String>();
    }
}

class ParentClass
{
    /// <summary>
    /// Holds the properties
    /// </summary>
    public ChildClass<MyEnum> Properties;
 
    public ParentClass()
    {
        this.Properties = new ChildClass<MyEnum>();
    }
 
    enum MyEnum
    {
        col1 = 1,
        col2 = 2,
        col3 = 3
    } 
}


Dev O'Connor

Именно этого я и хотел добиться. Действительно apprecaite помощь 5+ для меня :)