在 if-else 语句中初始化泛型对象

Initialize an generic object in if-else statement

提问人:Aloner0509 提问时间:10/30/2023 最后编辑:Ken WhiteAloner0509 更新时间:10/30/2023 访问量:54

问:

我需要创建一个类型取决于用户选择的通用对象。我从单选按钮中得到它。这是我想象中的一个想法:

        Class<null> object;

        if (radioInteger.Checked == true)
        {
            object = new Class<int>();
        }
        if (radioFloat.Checked == true)
        {
            object list = new Class<float>();
        }
        if (radioString.Checked == true)
        {
            object list = new Class<String>();
        }

        //do smth with object

如何使用 C# 做到这一点?

我试图将类型放在变量中,然后将其放在<>之间,但编译器说我放置变量而不是类型。

C# IF-statement 泛型 类型

评论

0赞 Loocid 10/30/2023
我不确定你在问什么。你已经提供了一个示例,说明如何在 C# 中做你想做的事,不是吗?
2赞 Jeremy Lakeman 10/30/2023
您需要引入一个通用的基本类型或接口,所有类型或接口都可以分配给该类型或接口。例如 .Class<T>abstract class Class{} ... class Class<T>:Class{}
0赞 gunr2171 10/30/2023
类到底是什么,泛型参数在其中有什么作用?Class
0赞 Etienne de Martel 10/30/2023
我会给出一个非通用接口或超类,然后从那里工作。另一种选择是使用反射,这很痛苦。Class<T>

答:

0赞 Dave Cousineau 10/30/2023 #1

如果在编译时不知道类型,则必须使用类型 object/instance 而不是类型 argument/generic 来构造对象。查看 的非泛型重载。Activator.CreateInstance

请注意,最好在编译时就知道类型,因为这样,例如,您可以将其限制为具有默认构造函数的类型。否则,使用非泛型调用时,如果没有合适的构造函数来调用,则可能会出现异常。不过,这完全取决于您的特定设计。Activator.CreateInstance