我坚持转换课程..
我有一个arraylist包含4个不同的类,彼此没有相互关联。
例如当用户选择一个像mylist [i]时,我应该转换它,它是某个类,之后可以使用..我的意思是喜欢
var type = mylist[i].GetType();
所以现在我有了item' s类型。当我创建一个变量时,我的意思是
var newItem = (type)mylist[i]
但是类型不是类,所以我不能转换它。
我不确定我是否清楚..
答案 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