ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 你能限制泛型中的Type类型吗?

2019-06-08 13:01:33  阅读:214  来源: 互联网

标签:c type-conversion generics


我有一个字典,其中键和值都是Type类型,就像这样……

private static Dictionary<Type, Type> myDict;

我要做的是将第二个Type限制为仅继承自FrameworkElement的类型.

注意我不是在讲故事FrameworkElement实例,我试图只存储从FrameworkElement派生的Type类型的对象,使得以下语句为true …

var isTypeStorable = typeof(FrameworkElement).IsAssignableFrom(FooType);

那可以做到吗?

顺便说一句,是的,我知道我可以在添加到字典之前使用上面的内容进行运行时检查(这就是我现在正在做的事情).我想知道语言中是否有任何功能可以让我在编译时限制它.

解决方法:

不,那是不可能的. FrameworkElement.GetType()和FooType在类型系统中没有关系,两者都只是类型.如果要限制泛型,则必须使用运行时检查和异常,通用约束对此没有帮助.

如果您知道在编译时要存储的内容(或者对某些复杂的反射感到满意),您可以将API更改为不使用Type,而是使用泛型:

public void AddTypeForType(Type x, Type y)

可以替换为

public void AddTypeForType<T1, T2>() where T1 : FrameworkElement
{
    myDict.Add(typeof(T1), typeof(T2));
}

然后你可以像这样调用它:

AddTypeForType<FrameworkDerivedClass, MyCustomClass>();

但这更像是API变更,而不是对问题的回答.

标签:c,type-conversion,generics
来源: https://codeday.me/bug/20190608/1198125.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有