2015-11-20 79 views
1

我有我的WCF以下类:如何创建类型列表的类属性的对象<class>

[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)。

+0

此代码甚至不会编译,因为'CibilEnquiryEnq'没有财产称为'Pa',你有没有意思是'CibilEnquiryEnq.Id = new CibilWcfService.PA();'? – 3dd

+0

错误是相当清楚的:你想创建对象的一个​​实例,并直接分配它是一个数组类型的属性。您需要创建一个数组,将新的实例粘贴在该数组中,并将该数组分配给该属性。 –

回答

1

错误消息是自描述,你不能的ID实例在该行分配给ID[]数组:

CibilEnquiryEnq.Id = new CibilWcfService.ID() 
已经声明 Id这样 public List<ID> Id { get; set; }当您添加服务引用

讲究中,服务参考效用在CibilWcfService.CibilEnquiry类型它转换为public ID[] Id { get; set; }

在磁盘阵列的一个实例分配给Id您可以使用此:

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

要使用一些值初始化数组,你可以创建你需要的大小的数组,然后在for循环创建的ID实例并对其进行初始化并将其分配给array[i],最后使用CibilEnquiryEnq.Id= array

您也可以使用List<ID>以及创建和使用list.Add()一些ID添加到它,然后再转换列表CibilEnquiryEnq.Id= list.ToArray()

+0

为什么它把它转换成数组时,它是一个列表?你的代码有效,但我希望能够在循环中动态添加实例。 – Arbaaz

+0

@Arbaaz你也可以在循环中动态添加项目到数组中,这是没有问题的。 –

+0

@Arbaaz **当它是一个列表时,它为什么将它转换为数组?**,您可以配置服务引用工具也使用通用列表作为您的列表,您可以删除您的服务引用,再次添加服务引用,选择高级,将集合类型设置为'System.Collections.Generic.List' –

1

这真的取决于CibilWcfService.ID()返回:数组和这种方式进行分配。如果返回ID那么为什么你宣布你的财产public List<ID> Id { get; set; }?如果你只是改变这种偏见,也许会更好?

如果你真的需要单个记录分配给一个列表,那么你可以这样做:

CibilEnquiryEnq.Id = new List<ID> { CibilWcfService.ID() }; 
相关问题