在我目前正在处理的页面上,我需要根据角色返回两种不同的类类型。
这是公开的
public class psdata
{
public int ID { get; set; }
public string Address { get; set; }
etc...
}
这是管理层
public class cpsdata
{
public int ID { get; set; }
public string Customer { get; set; }
public string Address { get; set; }
etc...
}
如何创建一个函数来返回制作时所需的类,例如列表。
List<psdata> ld = new List<psdata>();
psdata可以是psdata还是cpsdata?
答案 0 :(得分:3)
您的课程需要共享一个常见的界面或一个常见的基类。以下是实施界面的示例,也可以通过扩展课程
来实现public interface IData { /** common elements **/ void Foo(); }
public class psdata : IData
{
public int ID { get; set; }
public string Address { get; set; }
etc...
public void Foo() {
// psdata specific
}
}
public class cpsdata : IData
{
public int ID { get; set; }
public string Customer { get; set; }
public string Address { get; set; }
etc...
public void Foo() {
// cpsdata specific
}
}
注意: Foo
可以是行为不同的所有内容。
现在您可以创建IData
列表并将其返回。
public List<IData> Elements() {
List<IData> ld = new List<IData>();
ld.Add(new psdata());
ld.Add(new cpsdata());
return ld;
}
如果您想使用元素的某些特定属性/方法,可以取消装箱
1)使用is
关键字,然后对该类型进行强制转换。
foreach(var element in ld) {
if(element is psdata) {
var elementPSData = (psdata) element;
/** do something **/
}
2)使用as
关键字(如果元素is
不是类型,则会使转换返回null。)
var elementData = element as cpsdata;
if(elemntData != null) {
/** do something **/
}
答案 1 :(得分:0)
您可以创建一个抽象基类,从中可以派生cpsdata
和psdata
类,然后可以添加cpsdata
和psdata
类的实例到包含您派生类型的对象的列表。
P.S那个班级命名惯例太可怕了。
答案 2 :(得分:-4)
如果你真的想快速修复
List<Object> ld = new List<Object>();
foreach(Object obj in ld)
{
//check object type and take appropriate action
}
在通用方面显然有很多方法可以解决这个问题,即创建接口或基类以及通用方法,其中T:某个对象,但是,您仍然需要检查其他属性的类型。