Как я могу привести объект класса к списку?

1

Я новичок в С#, и мне трудно преобразовать объект в List<T>. Я получаю сообщение об ошибке "Невозможно неявно преобразовать тип Attachment в System.Collections.Generic.List<Attachment>. Есть много сообщений о похожих ошибках, которые я просмотрел, но я не могу понять, что Я скучаю.

Мой основной объект выглядит так:

public class Attachment 
{
    public Attachment() { }
    ...
}

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

public class MyClass
{
    ...
    public List<Attachment> attachments { get; set; };
    ...
    public MyClass(JObject jobj)
    {
        ...
        //Attachments
        if (jobj["attachments"] != null)
        {
            attachments = (Attachment)jobj.Value<Attachment>("attachments");
        }
    }
}

Ошибка возникает в последней строке кода, где я пытаюсь передать объект Attachment в List<attachments>. Я понимаю, что говорит сообщение, но все, что я пробовал, не работает.

  • 1
    Так как Attachment не является List , почему это вас удивляет? Или вы хотели добавить его в List ?
  • 0
    Могут ли два нижних избирателя объяснить, почему это такой ужасный вопрос, кроме того, что вы думаете, что это простая ошибка?
Показать ещё 2 комментария
Теги:
generics

2 ответа

6
Лучший ответ

Вы устанавливаете List<T> в T

attachments = (Attachment)jobj.Value<Attachment>("attachments");

Вместо этого вы, вероятно, захотите добавить его. Но не забудьте сначала создать экземпляр списка.

attachments = new List<Attachment>();
attachments.Add((Attachment)jobj.Value<Attachment>("attachments"));

Подумайте об этом в терминах, которые не связаны с дженериками. Скажем, у меня есть int x и я установил его в string константу.

int x = "test";

Что это значит? Это совершенно разные типы. Это похоже на конверсию, которую вы просите компилятор выполнить. Тип слева должен быть (полиморфным родителем или) типом справа.

  • 0
    Мэтью, спасибо. Это сделал это, и теперь это работает. Большое спасибо.
  • 0
    Мэтью, спасибо за дополнительное объяснение.
Показать ещё 4 комментария
3

Просто используйте метод ToObject

List<Attachment> attachments = jobj["attachments"].ToObject<List<Attachment>>();
  • 1
    @ downvoter, есть причина? Так как это действительно работает ...
  • 1
    Я думаю, это зависит от того, чего на самом деле хочет автор ... если они пытаются присвоить списку ранее существующий список, тогда да, это то, что они хотят. Если они пытаются добавить один элемент в список, то ответ Мэтью - то, что они хотят
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню