我有一个问题,我一直在谷歌搜索,但找不到答案。
假设您有一个名为 Account 的类,它继承自一个名为 AccountInquiry 的类。
如果您有一个 AccountInquiry 实例,您能否将其转换为 Account 实例而不有效地复制它。如果不是什么是管理这个的最佳方法。
基本上有一点背景知识,当有人在我们的网站上填写基本的姓名/电子邮件表格时,会创建一个帐户查询,一旦他们完成此操作,他们就会看到第二个表格。如果填写第二张表格,则将帐户查询转换为帐户。
非常感谢
山姆
我有一个问题,我一直在谷歌搜索,但找不到答案。
假设您有一个名为 Account 的类,它继承自一个名为 AccountInquiry 的类。
如果您有一个 AccountInquiry 实例,您能否将其转换为 Account 实例而不有效地复制它。如果不是什么是管理这个的最佳方法。
基本上有一点背景知识,当有人在我们的网站上填写基本的姓名/电子邮件表格时,会创建一个帐户查询,一旦他们完成此操作,他们就会看到第二个表格。如果填写第二张表格,则将帐户查询转换为帐户。
非常感谢
山姆
这听起来不像Account
真的是一个AccountInquiry
。这听起来更像是两个完全独立的类,即使它们具有一些相同的属性。
在使用继承之前要小心——考虑它是否真的合适。
在这种情况下,您AccountInquiry
听起来像是一个真实的有效搜索条件Account
-因此您可能应该有一些能够执行查询的服务类,其方法如下:
List<Account> FindAccounts(AccountInquiry inquiry)
或者可能只是一个返回类型,Account
如果只匹配一个帐户。这里没有进行“转换”——您只需使用一个对象的属性来查找另一个对象。
(我怀疑它真的应该是询问而不是顺便询问,但这是一个旁白。)
如果原始类(帐户)是 AccountInquiry 的向下转换,则只能向上转换,所以,不,这是不可能的。
复制是唯一的选择。
你能在不有效复制的情况下将其转换为 Account 的实例吗
在这种情况下,没有。Account
可以降级,AccountInquiry
但反之则不行。您可以使用AutoMapper之类的工具来更轻松地映射字段。
作为一种替代方法,您可以做的是创建一个可以完全消除问题Account
的属性。AccountInquiry
你不能,但是 ¿ 这个怎么样?
Account account = new Account();
account.CustomerID = 25;
account.MaxAmount = (decimal)5000.00;
进而
((AccountInquiry)account).Method = "ListChanges";
((AccountInquiry)account).StartDate = DateTime.Today.AddDays(-10);
((AccountInquiry)account).EndDate = DateTime.Today;
然后,如果您需要传递给他的参数应该是 Type 的任何方法,您可以。