如何创建List <class>

时间:2015-11-20 05:56:09

标签: c# asp.net wcf class generics

我的wcf中有以下课程:

[DataContract]
public class CibilEnquiry
{
    public PN Pn { get; set; }
    [DataMember]
    public List<ID> Id { get; set; }  
}



[DataContract]
public class ID
{
    [DataMember]
    public string SegmentTag { get; set; }
    [DataMember]
    public string IDType { get; set; }
    [DataMember]
    public string IDNumber { get; set; }
}

[DataContract]
public class PN
{
    [DataMember]
    public string SegmentTag { get; set; }
    [DataMember]
    public string ConsumerNameField1 { get; set; }   
}

我正在尝试在ym应用程序中创建对象:

CibilWcfService.CibilEnquiry CibilEnquiryEnq = new CibilWcfService.CibilEnquiry();//no problem

CibilEnquiryEnq.Pn = new CibilWcfService.PN();//no problem
CibilEnquiryEnq.Id  = new CibilWcfService.ID() ;//Cannot implicitly convert type 'CbilFileReader.CibilWcfService.ID' to 'CbilFileReader.CibilWcfService.ID[]' 

正如我在评论中提到的,我无法创建属于List类型的CibilEnquiry属性的对象。

此外,似乎当我在wcf中使用构造函数初始化属性时,它没有用。 (已经在这里问了一个:Unable to initialize member through Constructor in WCF)。

2 个答案:

答案 0 :(得分:1)

错误消息是自我描述的,您无法在此行向ID数组分配ID[]的实例:

CibilEnquiryEnq.Id  = new CibilWcfService.ID()

请注意您已以Id方式声明public List<ID> Id { get; set; },当您添加服务引用时,服务引用实用程序会将其转换为public ID[] Id { get; set; }类型中的CibilWcfService.CibilEnquiry

要将数组实例分配给Id,您可以使用:

CibilEnquiryEnq.Id = new CibilWcfService.ID[]{};

要使用某些值初始化数组,可以使用所需的大小创建数组,然后在for循环中创建ID的实例并初始化它并将其分配给{{1最后使用array[i]

此外,您可以使用CibilEnquiryEnq.Id= array并使用List<ID>为其创建并添加一些ID,然后将列表转换为数组,并按以下方式指定:list.Add() < / p>

答案 1 :(得分:1)

这实际上取决于CibilWcfService.ID()返回的内容。如果它返回ID,那么为什么要将您的属性声明为public List<ID> Id { get; set; }?也许如果你只是改变这种贬低会更好吗?

如果您确实需要将单个记录分配到列表,那么您可以这样做:

CibilEnquiryEnq.Id = new List<ID> { CibilWcfService.ID() };