0 Вопрос: Получить и установить значения свойств универсального типа

вопрос создан в Thu, May 2, 2019 12:00 AM

Я на самом деле борюсь с дженериками:)

Как я могу получить доступ к свойствам типа, переданного как метод в метод? Нужно ли использовать отражение в любом случае?

Например, следующий класс

public class someClassA()
{
    public int attributeA1;
    public string attributeA2;
{

public class someClassB()
{
public int attributeB1;
public string attributeB2;
{


// Then a generic method
private TItem GetSomeData<TItem>(Guid Id) where TItem: new()
    {
        TItem instanceOfClass = new TItem();
        // doing some data stuff
        // ....
        // finally group the result for better iteration
        var groupedById = result.ToList().GroupBy(x =>
                                (x["SomeId"]))
                                .Select(grp => grp.ToList())
                                .ToList();

        foreach (var item in groupedById)
        {
            // how can I access and set the properties of TItem -> instanceOfClass?
            instanceOfClass.... = item.property1;
            instanceOfClass.... = item.property2;
            ....
        }

        return instanceOfClass;
    }

Вышеуказанный метод вызывается так, например,

var data = GetSomeData<someClassA>(someId)

Любая подсказка или совет очень важны!

Я уже пробовал с отражением, но не уверен, полезно это или нет.

    
0
  1. Я не совсем понимаю, чего вы пытаетесь достичь, но то, что вы пытаетесь, на самом деле не выглядит для меня в общих чертах. Если вашему «универсальному» методу требуется доступ к свойствам с разными именами, объявленными разными типами, то он не является на самом деле универсальным, а скорее специфическим (т. Е. Его логика реализации зависит от того, работает ли он с someClassA и someClassB)
    2019-05-02 14: 58: 57Z
  2. "как я могу получить доступ и установить свойства TItem", кратко: вы не можете! если вы не ограничите универсальный параметр для реализации определенного интерфейса или наследования от определенного класса. Исследуйте «общее ограничение»
    2019-05-02 15: 05: 45Z
  3. вы оба правы ... спасибо за подсказки:)
    2019-05-02 15: 07: 19Z
  4. Как я знаю, вы не можете сделать это без приведения или чего-то еще, потому что ваш метод, который принимает универсальный тип, не знает универсального типа, которым вы кормите. Поэтому вы либо пытаетесь выяснить, какой тип является универсальным типом, либо создаете базовый класс для обоих классов, которые их реализуют. Но, как упомянуто @elgonzo, оно не будет очень общим
    2019-05-02 15: 08: 34Z
0 ответов                              0                         
источник размещен Вот