【问题标题】:Assign string[] array field to another array field of same type c#将 string[] 数组字段分配给另一个相同类型的数组字段 c#
【发布时间】:2021-09-15 23:58:00
【问题描述】:

我的解决方案中定义了两个类

public class Registration {
    [...]
    public list<Account> Accounts {get; set;}
}

public class Account {
    [...]       
    public string Code { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
}

在我正在使用的 Web 服务中,可以使用以下类定义

public partial class VendReg {
    [...]
    private Payment_Details[] requestDetailsField;
    
    [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
    public Payment_Details[] RequestDetails {
        get {
            return this.requestDetailsField;
        }
        set {
            this.requestDetailsField = value;
        }
    }       
}


public partial class Payment_Details {
          
    private string bk_CodeField;
    
    private string bk_NameField;
    
    private string bk_AddressField;
                         
    public string Bk_Code {
        get {
            return this.bk_CodeField;
        }
        set {
            this.bk_CodeField = value;
        }
    }
    
    public string Bk_Name {
        get {
            return this.bk_NameField;
        }
        set {
            this.bk_NameField = value;
        }
    }
    
    public string Bk_Address {
        get {
            return this.bk_AddressField;
        }
        set {
            this.bk_AddressField = value;
        }
    }         
}

我想将Account 分配给Request Details,这是一个Payment_Details 数组。我在下面尝试了这段代码 vendReg.RequestDetails = registration.Accounts.Cast&lt;Payment_Details&gt;().ToArray();

我得到了无效的转换异常:无法将类型为“Account”的对象转换为类型“Payment_Details”

请指导我做错了什么

【问题讨论】:

  • 您的错误是说您的数据实际上是Models.BankAccount 类型,但我在您的帖子中没有看到这种类型。
  • @gunr2171,我已经更新了这个问题。它实际上是 Account 而不是 BankAccount。谢谢

标签: c# web-services dynamics-business-central


【解决方案1】:

您需要自己转换它(或者您可以查看 Automapper 之类的东西)

vendReg.RequestDetails = registration.Accounts.Select(acc => 
   new Payment_Details {
      Bk_Code = acc.Code,
      Bk_Name = acc.Name,
      Bk_Address = acc.Address
   }).ToArray();

【讨论】:

  • 这就像魔术一样。谢谢一堆。你知道为什么我的代码不起作用吗?
  • @hopeforall 在 c# 中的类型转换仅在运行时的实际类型匹配时才有效。例如。如果你有类Animal,然后是Cat: AnimalDog: Animal,你可以有一个Animal[] 的数组并取一个并转换为Cat 如果该动物是狗,则转换将失败。但是您可以选择CatDog 并转换为Animal。现在在你的情况下,AccountPayment_Details 是不相关的类型,所以 CLR 无法弄清楚你想要它做什么。
  • 我教的两个班是同一类型的。不过感谢您的解释。欣赏
猜你喜欢
  • 2019-08-02
  • 2015-12-26
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 2014-12-12
  • 2018-09-03
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多