c# - 允许在 typeof 表达式中引用未绑定(bind)类型的效用是什么?

标签 c# generics

给定

        int foo = 1;
        Type unboundType = typeof(List<>);
        Type w = unboundType.MakeGenericType(typeof(int));

        if (w == typeof(List<int>))
        {
            Console.WriteLine("Yes its a List<int>");

            try
            {
                ((List<int>)(object)w).Add(foo);
            }
            catch(InvalidCastException)
            {
                Console.WriteLine("No you can't cast Type");
            }
        }   

我可以验证该类型确实与构造类型匹配,并根据所述构造类型执行操作。但是,我无法使用 as 或显式强制转换将 Type 强制转换为它的 class。是否有允许开发人员创建未绑定(bind)类型的 Type 的实际目的,或者此功能的存在是否只是为了以某种方式支持该语言?

最佳答案

并不是所有的事情都可以在编译时完成。有时,尤其是在库代码中,您需要接受所提供的内容。在只给定一个 object 或一个 Type 并且需要进行一些巧妙处理的情况下,未绑定(bind)类型会非常有用;例如:

object obj = NoIdeaWhatThisReturns();
IList list = (IList)Activator.CreateInstance(
                 typeof(List<>).MakeGenericType(obj.GetType()));
list.Add(obj);

基本上;使用大量反射或元编程的场景可能会发现自己在某些时候使用未绑定(bind)类型。

关于c# - 允许在 typeof 表达式中引用未绑定(bind)类型的效用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14653729/

相关文章:

c# - 将 Delphi 指针和 stream.Read 转换为 C#

c# - 如何将字符串类型的对象动态转换为 T 类型的对象

c# - 'is' 运算符不能应用于静态类型的操作数

c# - 将 Json 代码转换为 C#(数字作为键)

c# - 使用 ASPNETCORE_ENVIRONMENT 覆盖 Azure 上的 appsettings.json

java - 从实现中捕获通用类型

c# - 从平面文件加载数据的通用实体

java - 泛型和类型安全 : checking dynamic binding of arguments

java - 泛型类可以是方法/返回类型吗?

c# - c# 中的 keydown 由于某种原因不起作用