c#中的自定义类转换

时间:2014-11-10 23:54:36

标签: c# class generics typeconverter

我坚持转换课程..

我有一个arraylist包含4个不同的类,彼此没有相互关联。

例如当用户选择一个像mylist [i]时,我应该转换它,它是某个类,之后可以使用..我的意思是喜欢

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

所以现在我有了item' s类型。当我创建一个变量时,我的意思是

var newItem = (type)mylist[i]

但是类型不是类,所以我不能转换它。

我不确定我是否清楚..

2 个答案:

答案 0 :(得分:3)

您无法转换为变量 - 您必须明确说明该类型。您需要分别检查每个班级:

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

答案 1 :(得分:3)

您无法在运行时定义要定义的类型。

假设您拥有的类型相似但不相关,则可以

  • 使用dynamic切换到后期绑定。它允许您以编译类型安全为代价调用所需的方法。 “鸭子打字”样本可以在Duck type testing with C# 4 for dynamic objects
  • 中找到
  • 使用反射或表达式动态创建可以使用在运行时定义的类型执行所需操作的方法。