Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用泛型类_C#_Generics - Fatal编程技术网

C# 调用泛型类

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) {

我有通用的类名car,car接受的数据类型“class Type”。我从数据库中得到的类名是string,因此我将string转换为class type,然后将该类传递给泛型type class,但我总是得到错误“ 错误“'o'是一个变量,但与类型一样使用”。 我如何通过门类到汽车通用类

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