[DataContract]
public class SearchCriteria
{
[DataMember]
public string CountryID { get; set; }
}
[DataContract]
public class CitySearchCriteria: SearchCriteria
{
[DataMember]
public string CityID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在我的MVC控制器操作中创建了一个SearchCriteria实例,并尝试将其转换为CitySearchCriteria.
SearchCriteria searchCriteria = new SearchCriteria();
searchCriteria.CountryID = "1";
CitySearchCriteria citySearchCriteria = searchCriteria as CitySearchCriteria;
Run Code Online (Sandbox Code Playgroud)
上述语句后面的"citySearchCriteria"对象显示NULL值.我希望它显示属性,CountryID和CityID,其中CountryID已填充,CityID为空......但它将对象设置为NULL.
这可能是什么解决方案?DataContract有什么用呢?
评论建议,你不能将基数转换为派生:但实际上,我已经在我的视图中成功完成了这一点,它只是在控制器操作中不起作用:
CitySearchCriteria citySearchCriteria = (CitySearchCriteria)Model.SearchCriteria;
Run Code Online (Sandbox Code Playgroud)
这是成功转换的,为什么类似的东西不能在控制器动作中工作呢?
我有Message类,我已经扩展并添加了新属性.
class ChildMessage: Message
{
prop...
}
Run Code Online (Sandbox Code Playgroud)
在尝试将Message Class添加到ChildMessage列表时,我获得了添加类的Null引用.
var myChildList =new List<ChildMessage> ();
var myParentClass = new Message();
myChildList.add(myParentClass as ChildMessage)
myChildList[0] == null //Always return null
Run Code Online (Sandbox Code Playgroud)
我的代码出了什么问题?有哪些替代方案?
我有两个类,除了一个类需要另一个属性之外,它们应该完全相同。
我没有将所有属性重写两次,而是想从 BaseClass 继承所有属性,而只在 MyNewClass 中添加一个额外属性
public class BaseClass
{
public int BaseProperty1 { get; set; }
public int BaseProperty2 { get; set; }
public int BaseProperty3 { get; set; }
}
public class MyNewClass: BaseClass
{
public int? ExtraProperty{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因为我已经在我的函数中填写了原始 BaseClass 的所有细节,所以能够使用这个类的实例来填写 MyNewClass 的新实例的细节会容易得多。
我希望它会像以下一样简单,但不幸的是我收到错误:System.InvalidCastException:'无法将'BaseClass'类型的对象转换为'MyNewClass'。'
MyNewClass myNewClass= new MyNewClass();
myNewClass = (MyNewClass)baseClass; //baseClass is alread populated at this point
myNewClass.ExtraProperty = 1;
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使用另一个少一个属性的类来快速填充一个类?
我可以单独设置每个属性,但我使用的类非常大,感觉很糟糕。
在此先感谢您的帮助。