我来自ColdFusion中的背景,并最终转向现代的东西,所以请耐心等待。在C#中铸造对象(ASP.Net MVC)
我遇到了铸造对象的问题。我有两个数据库表,我用它们作为模型 - 住宅和商业。他们都分享他们的大部分领域,尽管每个领域都有一些独特的领域。我创建了另一个类作为包含所有属性字段总和的容器。查询住宅和商业,将其放入我的容器中,狡猾地称为Property。这工作正常。
但是,我遇到了从住宅/商业到房地产的混淆问题。为每个属性创建一个方法非常简单:fillPropertyByResidential(Residential source)和fillPropertyByCommercial(Commercial source),并为变量生成别名。这也可以正常工作,但显然会复制一堆代码 - 所有那些在两个主要模型之间共享的字段。
所以,我想要一个通用的fillPropertyBySource()接受对象,并检测它是Residential还是Commercial,填充每个类型的特定字段,然后执行所有的字段。除此之外,我在C#中收集的内容是在if内创建的变量仅在if的范围内,所以我不确定如何执行此操作。
public property fillPropertyBySource(object source)
{
property prop = new property();
if (source is Residential)
{
Residential o = (Residential)source;
//Fill Residential only fields
}
else if (source is Commercial)
{
Commercial o = (Commercial)source;
//Fill Commercial only fields
}
//Fill fields shared by both
prop.price = (int)o.price;
prop.bathrooms = (float)o.bathrooms;
return prop;
}
作为商业或住宅的“o”只存在于if的范围内。如何检测源对象的原始类型并采取措施?
忍无可忍 - 从ColdFusion转变为现代语言相当困难。更多的是因为我习惯了程序代码,MVC是一个巨大的范式转变。
编辑:我应该包含错误:名称'o'在当前上下文中不存在 对于共享区域中价格和浴室的别名。
@丹 - 非常感谢。这将我在Controller中的逻辑回归到它所属的模型中。很棒! – Mortanis