C# 如何将类对象强制转换为列表?

C# 如何将类对象强制转换为列表?,c#,generics,C#,Generics,我是C语言的新手,在将对象转换为列表时遇到困难。我一直收到错误“无法隐式地将type附件转换为System.Collections.Generic.List。我已经看过很多关于类似错误的帖子,但我似乎无法找出我遗漏了什么 我的核心对象看起来像: public class Attachment { public Attachment() { } ... } 它在另一个类的构造函数中被调用,如下所示: public class MyClass { ... publ

我是C语言的新手,在将对象转换为
列表时遇到困难。我一直收到错误“无法隐式地将type
附件
转换为
System.Collections.Generic.List
。我已经看过很多关于类似错误的帖子,但我似乎无法找出我遗漏了什么

我的核心对象看起来像:

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");
        }
    }
}
公共类MyClass
{
...
公共列表附件{get;set;};
...
公共MyClass(JObject jobj)
{
...
//附件
if(jobj[“附件”]!=null)
{
附件=(附件)作业价值(“附件”);
}
}
}

错误发生在我试图将附件对象强制转换到
列表的最后一行代码中。我理解消息的意思,但我尝试的一切都不起作用。

您正在将
列表设置为
t

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

这意味着什么?这些是完全不同的类型。这有点像您要求编译器执行的转换。左侧的类型必须是(或)右侧的类型。

您正在将
列表设置为
T

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

这意味着什么?这些是完全不同的类型。这有点像您要求编译器执行的转换。左侧的类型必须是(或的多态父类型)右侧的类型。

只需使用
ToObject
方法即可

List<Attachment> attachments = jobj["attachments"].ToObject<List<Attachment>>();
List attachments=jobj[“attachments”].ToObject();

只需使用
ToObject
方法即可

List<Attachment> attachments = jobj["attachments"].ToObject<List<Attachment>>();
List attachments=jobj[“attachments”].ToObject();

既然
附件
不是一个
列表
,为什么这会让你感到惊讶?或者你是想把它添加到
列表
中吗?除了你认为这是一个简单的错误之外,这两个被否决的选民愿意解释为什么这是一个如此糟糕的问题吗?@Powerlord老实说,我之所以要成为一个被否决的选民,是因为它做到了看起来有点琐碎,但当我真正思考它时,我很快就改变了我的投票,因为我要说的是,这个问题没有什么不清楚的地方。它说明了想要的行为和尝试。所以现在我肯定+1。我认为这是一个很好的问题,事实上。说到点子上,但很完整。Trebor,发布你的json。因为
Attachment
不是一个
列表
,为什么这会让你感到惊讶?或者你是想把它添加到
列表
中吗?除了你认为这是一个简单的错误之外,这两个被否决的选民愿意解释为什么这是一个如此糟糕的问题吗?@Powerlord说实话,我即将成为一个被否决的选民,因为它看起来有点微不足道,但是当我真正思考这个问题的时候,我很快就推翻了我的投票,因为我会说这个问题没有什么不清楚的地方。它说明了想要的行为和尝试。所以我现在肯定是+1。事实上,我认为这是一个很好的问题。切中要害,但很完整。Trebor,发布你的json。Matthew,谢谢。这样做了,效果很好噢,非常感谢。Matthew,既然它是一个字段(public List attachments{get;set;};),它需要实例化吗?@Trebor首先,次要的一点:这只是一个艺术术语——当您有一个getter和setter时,它被称为“属性”,而不是“字段”。“没什么大不了的,只是让你知道在将来。第二,我不能完全肯定我知道你的意思。我确实在代码的第一行实例化了它。我确实在最初发布我的答案几秒钟后补充了这一点,因为我忘了把它包括在内,但我现在在那里的东西不起作用吗?谢谢你对这个词的澄清。我仍在逐渐习惯这个词。是您添加的实例化使我感到惊讶。Intellisense(或红色错误突出显示)表示它将在有或没有实例化行的情况下工作,因此我试图更好地理解它。@Trebor yep,我肯定知道这种感觉。是的,Intellisense捕获编译时错误。编译器理解您不能从一种类型转换到另一种类型(正如错误所说,如果不存在转换),但它没有实例化的事实是一个运行时错误。属性采用其类型的默认值(对于引用类型,如
List
,即
null
)。因此,如果没有这一行,它将是一个等待发生的
NullReferenceException
。但是编译器还不够聪明,不能在这种情况下使用它。Matthew,谢谢。这就做到了,现在也行了。非常感谢。Matthew,既然它是一个字段(public List attachments{get;set;};),那么它需要实例化吗?@Trebor首先,次要的一点:只是一个艺术术语——当你有一个getter和setter时,它被称为“属性”,而不是“字段”。没什么大不了的,只是让你将来知道而已。第二,我不能完全肯定我知道你的意思。我确实在代码的第一行实例化了它。我确实在最初发布我的答案几秒钟后补充了这一点,因为我忘了把它包括在内,但我现在在那里的东西不起作用吗?谢谢你对这个词的澄清。我仍在逐渐习惯这个词。是您添加的实例化使我感到惊讶。Intellisense(或红色错误突出显示)表示它将在有或没有实例化行的情况下工作,因此我试图更好地理解它。@Trebor yep,我肯定知道这种感觉。是的,Intellisense捕获编译时错误。编译器理解您不能从一种类型转换到另一种类型(正如错误所说,如果不存在转换),但它没有实例化的事实是一个运行时错误。属性采用其类型的默认值(对于引用类型,如
List
,即
null
)。因此,如果没有这一行,它将是一个等待发生的
NullReferenceException
。但是公司