Generi c Ключ и значение редактирования класса и списка - PullRequest
0 голосов
/ 14 марта 2020

Я хотел бы создать обобщенный список c, который принимает обобщенный c класс. Но проблема в том, что я не могу получить доступ к переменным внутри класса generi c, и я видел, как люди оставляли интерфейс пустым и задавались вопросом, как мне поступить, чтобы получить доступ к переменным в классе.

public List<IAttributeInterface> attributes = new List<IAttributeInterface>();
public void AddAttribute<T>(T attribute, T value)
    for (int i = 0; i < attributes.Count; i++)
    {
        if (attributes[i].key == attribute)
        {
            attributes[i].value = value;
            return;
        }
    }

    attributes.Add(new Attribute(attribute, value));
}

public class Attribute<T> where T : IAttributeInterface
{
    public T key;
    public T value;

    public Attribute(T key, T value)
    {
        this.key = key;
        this.value = value;
    }
}

public interface IAttributeInterface
{
}

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Необходимо добавить свойства внутри интерфейсов:

public interface IAttributeInterface<T>
{
    T Key { get; set; }
    T Value { get; set; }
}

Затем нам нужно реализовать этот универсальный c интерфейс в классе, чтобы иметь возможность создавать экземпляр объекта:

public class Attribute<T> : IAttributeInterface<T>
{   
    public T Key { get; set ; }
    public T Value { get ; set; }

    public Attribute(T key, T value)
    {
        this.Key = key;
        this.Value = value;
    }
}

и ваш метод будет выглядеть следующим образом:

public List<IAttributeInterface<string>> attributes = 
    new List<IAttributeInterface<string>>();

public void AddAttribute<T>(T attribute, T value) where T: IAttributeInterface<string>
{
    for (int i = 0; i < attributes.Count; i++)
    {
        if (attributes[i].Key == attribute.Key)
        {
            attributes[i].Value = value.Value;
            return;
        }
     }
     attributes.Add(new Attribute<string>("key", "value"));
}

, и его можно использовать так:

AddAttribute(new Attribute<string>("foo key 0", "foo value 0"), 
    new Attribute<string>("foo key 1", "foo value 1"));
0 голосов
/ 14 марта 2020

Вам необходимо добавить {get; set;} для этих атрибутов (свойств) в интерфейсе.

public interface IAttributeInterface<T>
{
    T Key { get; set; }
    T Value { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...