locked
Unable to cast Base class (data contract) to derived class RRS feed

  • Question

  • User-758219241 posted
    [DataContract] 
    public
    class SearchCriteria
    {

    [
    DataMember]
    public string CountryID { get; set; }
    }
    [DataContract]
    public class CitySearchCriteria: SearchCriteria
    {

    [
    DataMember]
    public string CityID { get; set; }
    }

    I am creating an instance of SearchCriteria in my MVC controller action, and trying to convert it into CitySearchCriteria.

    SearchCriteria searchCriteria = new SearchCriteria(); 
    searchCriteria
    .CountryID = "1";
    CitySearchCriteria citySearchCriteria = searchCriteria as CitySearchCriteria;

    The "citySearchCriteria" object after the above statement is showing NULL value. I was expecting it to show both properties, CountryID and CityID with CountryID populated, and CityID blank... but it is setting the object to NULL.

    What could be the solution here? Has DataContract to do anything with this?

    Monday, May 6, 2013 1:59 AM

Answers

  • User1124521738 posted

    doing the cast you were doing

    SearchCriteria searchCriteria = new SearchCriteria(); 
    searchCriteria.CountryID = "1";
    CitySearchCriteria citySearchCriteria = searchCriteria as CitySearchCriteria;

    This is invalid as CitySearchCriteria : SearchCriteria not SearchCriteria : CitySearchCriteria

    This properly uses inheritance

    CitySearchCriteria citySearchCriteria = new CitySearchCriteria(); 
    citySearchCriteria.CountryID = "1";
    SearchCriteria searchCriteria = citySearchCriteria as SearchCriteria;



    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Monday, May 6, 2013 4:11 PM

All replies

  • User-488622176 posted

    Logic if you do this:

    searchCriteria = new SearchCriteria(); 

    You should do

    searchCriteria = new CitySearchCriteria(); 
    Monday, May 6, 2013 3:50 PM
  • User1124521738 posted

    doing the cast you were doing

    SearchCriteria searchCriteria = new SearchCriteria(); 
    searchCriteria.CountryID = "1";
    CitySearchCriteria citySearchCriteria = searchCriteria as CitySearchCriteria;

    This is invalid as CitySearchCriteria : SearchCriteria not SearchCriteria : CitySearchCriteria

    This properly uses inheritance

    CitySearchCriteria citySearchCriteria = new CitySearchCriteria(); 
    citySearchCriteria.CountryID = "1";
    SearchCriteria searchCriteria = citySearchCriteria as SearchCriteria;



    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Monday, May 6, 2013 4:11 PM