相关疑难解决方法(0)

无法将Base类(数据协定)强制转换为派生类

[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)

这是成功转换的,为什么类似的东西不能在控制器动作中工作呢?

c# oop casting derived-class datacontract

8
推荐指数
2
解决办法
1万
查看次数

将父类强制转换为子类

我有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)

我的代码出了什么问题?有哪些替代方案?

.net c# casting

5
推荐指数
1
解决办法
1万
查看次数

使用几乎相同的类数据填充类

我有两个类,除了一个类需要另一个属性之外,它们应该完全相同。

我没有将所有属性重写两次,而是想从 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)

有什么方法可以使用另一个少一个属性的类来快速填充一个类?

我可以单独设置每个属性,但我使用的类非常大,感觉很糟糕。

在此先感谢您的帮助。

c# asp.net class

4
推荐指数
1
解决办法
75
查看次数

标签 统计

c# ×3

casting ×2

.net ×1

asp.net ×1

class ×1

datacontract ×1

derived-class ×1

oop ×1