c#中的自定义类转换

本文关键字:转换 自定义 | 更新日期: 2023-09-27 18:29:52

我一直在转换类。。

我有一个数组列表,它包含4个不同的类,它们彼此不相关。

例如,当用户选择一个类似mylist[i]的类时,我应该转换它,它是特定的类,之后可以使用。。我是说像

var type = mylist[i].GetType();

所以现在我有了项目的类型。当我创建一个像这样的变量时

var newItem = (type)mylist[i]

但是type不是一个类,所以我不能转换它。

我不确定我是否清楚。。

c#中的自定义类转换

您不能cat到运行时定义的类型。

假设你有相似的类型,但没有关联,你可以

  • 使用dynamic切换到后期绑定。它将允许您以编译类型安全为代价调用所需的方法。"Duck typeing"示例可以在使用C#4对动态对象进行Duck类型测试中找到
  • 动态地创建方法,这些方法将对运行时通过反射或表达式定义的类型执行您想要的操作

不能强制转换为变量,必须显式声明类型。您需要分别检查每个类别:

if(mylist[i] is FirstType)
{
    //do something
}
else if (mylist[i] is SecondType)
{
    //do something
}
//etc

一个可能更好的选择是使用List<T>创建4个单独的列表,并分别保存每种类型:

var firstList = new List<FirstType>();
var secondList = new List<SecondType>();
//etc

或者,如果可能的话,如果数据足够相似,创建一个基类并使用List<T>

public class MyBase
{
    public int Id { get; set; }
}
public class FirstType : MyBase
{
}
public class SecondType : MyBase
{
}
var list = new List<MyBase>();
list.Add(new FirstType());
list.Add(new SecondType());

正如注释中所提到的,您也可以使用分部类来实现这一点。它们允许您在2个或多个文件中定义一个类。例如,请参阅您发布的Profile类是如何定义为public partial class Profile : ProfileBase的?您可以创建自己的文件,并使用其他接口实现重新定义它。例如:

public interface IMyInterface
{
    public int Id { get; set; }
}
public partial class Profile : IMyInterface
{
    public int Id { get; set; }
}

这是关于分部类的一个很好的概述:http://msdn.microsoft.com/en-us/library/wa80x488.aspx