C# 调用泛型类
我有通用的类名car,car接受的数据类型“class Type”。我从数据库中得到的类名是string,因此我将string转换为class type,然后将该类传递给泛型type class,但我总是得到错误“ 错误“'o'是一个变量,但与类型一样使用”。 我如何通过门类到汽车通用类C# 调用泛型类,c#,generics,C#,Generics,我有通用的类名car,car接受的数据类型“class Type”。我从数据库中得到的类名是string,因此我将string转换为class type,然后将该类传递给泛型type class,但我总是得到错误“ 错误“'o'是一个变量,但与类型一样使用”。 我如何通过门类到汽车通用类 namespace ConsoleApplication2 { class Program { static void Main(string[] args) {
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string nameOfClass = "ConsoleApplication2.Door";
Door o = (Door)System.Activator.CreateInstance(Type.GetType(nameOfClass));
Console.WriteLine("Type: {0}\nValue: {1}\nHashCode: {2}\n",
o.GetType().FullName, o.ToString(), o.GetHashCode());
Console.ReadLine();
//error in O
Car<o> l = new Car<o>();
}
}
class Car<T> where T : class
{
public void carName(T name)
{}
}
class Door
{}
}
命名空间控制台应用程序2
{
班级计划
{
静态void Main(字符串[]参数)
{
类的字符串名称=“控制台应用程序2.Door”;
Door o=(Door)System.Activator.CreateInstance(Type.GetType(nameOfClass));
WriteLine(“类型:{0}\n值:{1}\n哈希代码:{2}\n”,
o、 GetType().FullName、o.ToString()、o.GetHashCode());
Console.ReadLine();
//O中的错误
汽车l=新车();
}
}
班车,T:班车
{
公共无效卡尔纳姆(T名称)
{}
}
班级门
{}
}
泛型适用于可以使用任何类型对象的类。例如,列表
可以包含任何类型的对象,无论是汽车
还是其他什么。另一方面,汽车总是有多个门。这表明汽车
类应该有多个门
成员字段,或者可能是一个列表
,这样它可以有一个不确定数量的门。为什么汽车是通用的?为什么要使用Activator创建实例?如果需要,您的设计有问题。您必须执行汽车
,或者如果在运行前不知道类型,则必须创建Car
带反射的类。我想你应该重新考虑你的设计,尽可能避免反射。我认为你误解了泛型的好处。有些车有门,而其他车没有门吗?如果你真的有很好的理由创建一辆只有在运行时才知道XXX的车,那么肯定可以(使用Type.MakeGenericType()
),但正如其他人所建议的,它确实倾向于表明您滥用了泛型类型的用途。所问的问题是许多“从字符串创建泛型”(create Generic from string)()中的一个重复。注意:正如评论中指出的,您很可能应该寻找不同的内容(除非Car
与刚拥有的示例完全不相关)。感谢您的回复,但我给出了一个示例,并询问了我在传递Door-to-Car类时遇到的错误。@mohammadtofi如果您想将Door对象传递给Car
构造函数,那么您需要执行Car c=new Car(o)
。请注意,此代码中没有尖括号。
。当我尝试它时,它会给出错误:“使用泛型类型‘Car’需要1个类型参数“这让我们回到我最初的评论:您使用的泛型不正确。Car根本不需要泛型类型。将class-Car where T:class
更改为class-Car
。