`
fastspeeed
  • 浏览: 34258 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

泛型错误 The type parameter 'T' cannot be used with the 'as' operator

    博客分类:
  • c#
 
阅读更多
泛型错误
The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint

如果T是接口
这是错误的 :return System.Activator.CreateInstance(reType) as T;
正确的写法 T t1=(T)System.Activator.CreateInstance(reType) ;


错误的
   public class EventIDDictionary<T> where T : MKProtocol
    {
        private MKHandler defaultHandler;
        private Dictionary<String, Type> productModuleDictionary = new Dictionary<string, Type>();

        private Dictionary<String, Type> ActionDictionary = new Dictionary<string, Type>();
        public void AddDictionary(String eventId, Type type)
        {
            if (type == null)
            {
                throw new ServerInitException("增加AddDictionary,eventId=" + eventId + ",type不能为null");
            }
            if (String.IsNullOrEmpty(eventId))
            {
                throw new ServerInitException("增加AddDictionary,eventId不能为空,type=" + type.FullName);
            }
            if(eventId.Length==12){
                if (ActionDictionary.ContainsKey(eventId))
                {
                    throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + ActionDictionary[eventId].FullName);
                }
                ActionDictionary.Add(eventId, type);
            }
            else if (eventId.Length == 6)
            {
                if (productModuleDictionary.ContainsKey(eventId))
                {
                    throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + productModuleDictionary[eventId].FullName);
                }
                productModuleDictionary.Add(eventId, type);
            }
            else
            {
                throw new ServerInitException("增加AddDictionary,eventId位数不对=" + eventId + "type=" + type.FullName);
            }
           
        }
        public void DeleteDictionary(String eventId)
        {
        
            if (String.IsNullOrEmpty(eventId))
            {
                throw new ServerInitException("删除DeleteDictionary,eventId不能为空");
            }
            if (eventId.Length == 12)
            {
                if (ActionDictionary.ContainsKey(eventId))
                {
                    ActionDictionary.Remove(eventId);
                }
              
            }
            if (eventId.Length == 6)
            {
                if (productModuleDictionary.ContainsKey(eventId))
                {
                    productModuleDictionary.Remove(eventId);
                }
             
            }
        }
        public virtual T GetHandler(MKEntity entity)
        {
            Type reType=null;

            if (entity == null || String.IsNullOrEmpty(entity.EventID))
                return default(T);
            if (entity.EventID.Length != 12)
            {
                return default(T);
            }
            if (ActionDictionary.ContainsKey(entity.EventID))
            {
                reType= ActionDictionary[entity.EventID];
            }
            if (productModuleDictionary.ContainsKey(entity.EventID.Substring(0, 6)))
            {
                reType= productModuleDictionary[entity.EventID.Substring(0, 6)];
            }
           
            return System.Activator.CreateInstance(reType) as T;


        }
    }

这是正确的
  public class EventIDDictionary<T> where T : MKProtocol
    {
        private MKHandler defaultHandler;
        private Dictionary<String, Type> productModuleDictionary = new Dictionary<string, Type>();

        private Dictionary<String, Type> ActionDictionary = new Dictionary<string, Type>();
        public void AddDictionary(String eventId, Type type)
        {
            if (type == null)
            {
                throw new ServerInitException("增加AddDictionary,eventId=" + eventId + ",type不能为null");
            }
            if (String.IsNullOrEmpty(eventId))
            {
                throw new ServerInitException("增加AddDictionary,eventId不能为空,type=" + type.FullName);
            }
            if(eventId.Length==12){
                if (ActionDictionary.ContainsKey(eventId))
                {
                    throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + ActionDictionary[eventId].FullName);
                }
                ActionDictionary.Add(eventId, type);
            }
            else if (eventId.Length == 6)
            {
                if (productModuleDictionary.ContainsKey(eventId))
                {
                    throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + productModuleDictionary[eventId].FullName);
                }
                productModuleDictionary.Add(eventId, type);
            }
            else
            {
                throw new ServerInitException("增加AddDictionary,eventId位数不对=" + eventId + "type=" + type.FullName);
            }
           
        }
        public void DeleteDictionary(String eventId)
        {
        
            if (String.IsNullOrEmpty(eventId))
            {
                throw new ServerInitException("删除DeleteDictionary,eventId不能为空");
            }
            if (eventId.Length == 12)
            {
                if (ActionDictionary.ContainsKey(eventId))
                {
                    ActionDictionary.Remove(eventId);
                }
              
            }
            if (eventId.Length == 6)
            {
                if (productModuleDictionary.ContainsKey(eventId))
                {
                    productModuleDictionary.Remove(eventId);
                }
             
            }
        }
        public virtual T GetHandler(MKEntity entity)
        {
            Type reType=null;

            if (entity == null || String.IsNullOrEmpty(entity.EventID))
                return default(T);
            if (entity.EventID.Length != 12)
            {
                return default(T);
            }
            if (ActionDictionary.ContainsKey(entity.EventID))
            {
                reType= ActionDictionary[entity.EventID];
            }
            if (productModuleDictionary.ContainsKey(entity.EventID.Substring(0, 6)))
            {
                reType= productModuleDictionary[entity.EventID.Substring(0, 6)];
            }
            T t1=(T)System.Activator.CreateInstance(reType) ;
            return t1;


        }
    }
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java泛型的用法及T.class的获取过程解析

    Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类是具有一个或多个类型参数的类。类型参数是在定义类时使用的占位符,实际的类型在创建类的实例时...

    C#重要知识之——泛型列表List例子

    在C#编程中,泛型列表`List&lt;T&gt;`是一个非常重要的数据结构,它为我们提供了动态数组的功能,并且具有类型安全的特性。这篇文章将深入探讨`List&lt;T&gt;`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念...

    Java1.5泛型指南中文版(Java1.5Gene....pdf

    涵盖了泛型的基础知识、泛型类、泛型方法、通配符、擦除和翻译、类型安全、类型参数、实际类型参数、擦除、翻译、转型和 instanceof、数组、Class Literals as Run-time Type Tokens、通配符匹配、泛型化老代码等多...

    泛型dao 泛型dao 泛型dao

    Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...

    Java泛型_Java中的泛型结构_

    - 类型参数(Type Parameter):在创建泛型类或泛型方法时使用的占位符,例如 `&lt;T&gt;`、`&lt;E&gt;` 等。 - 类型参数边界(Type Bounds):可以限制类型参数的类型,如 `class Box&lt;T extends Number&gt;` 指定 `T` 必须是 `...

    java泛型指南 经典

    #### 八、Class Literals as Run-time Type Tokens 使用 `Class` 字面量可以在运行时获取类型的元数据信息。这对于实现泛型方法时非常有用,特别是在需要确定某个类型的实例是否符合某种类型条件时: ```java ...

    泛型java的泛型知识,非常有用

    Java 泛型是一种强大的语言特性,自JDK 5.0引入以来,极大地...理解并熟练运用泛型,能够显著提升Java代码的质量,减少类型转换错误,并提高代码的可维护性。在设计复杂的数据结构或容器类时,泛型是必不可少的工具。

    【Flutter】Dart 泛型 ( 泛型类 泛型方法 特定类型约束的泛型 ).zip

    【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照

    C#泛型集合使用实例

    C#中的泛型接口如`IEnumerable&lt;T&gt;`和泛型类如`List&lt;T&gt;`、`Dictionary&lt;TKey, TValue&gt;`是泛型集合的基础。这些接口和类定义了操作数据的一般方法,而`T`则代表一个未指定的类型参数,可以在实例化时指定具体类型。 2...

    SSH泛型代码实例

    - **Bean容器**:Spring的ApplicationContext接口提供了泛型版本的getBean方法,如`ApplicationContext.getBean(Class&lt;T&gt; requiredType)`,这样可以确保在获取Bean时的类型安全。 - **AOP代理**:Spring支持基于...

    gson解析泛型和将泛型转为json字符串

    Type arrayType = new TypeToken&lt;T[]&gt;(){}.getType(); T[] myArray = gson.fromJson(jsonString, arrayType); ``` 5. **复杂泛型的处理** 如果你正在处理的泛型结构比较复杂,例如嵌套的泛型,那么可能需要创建...

    java 1.5泛型详解

    Java泛型是自Java 1.5版本引入的一项重要特性,极大地提高了代码的类型安全性和重用性。本文将深入探讨Java泛型的概念、优点、使用方式及其在实际开发中的应用。 **一、泛型的基本概念** 泛型是Java语言中的一种...

    C#泛型实例Demo

    在C#中,泛型主要体现在以下几个方面:泛型类、泛型接口、泛型方法、泛型委托以及泛型集合。 1. **泛型类**:泛型类是在声明类时定义一个或多个类型参数。例如,`List&lt;T&gt;` 就是一个典型的泛型类,其中 `T` 是类型...

    泛型封装.rar

    4. **约束**:为了限制泛型的使用,我们可以添加类型约束,如`where T : class`表示`T`必须是引用类型,或者`where T : struct`表示`T`必须是值类型。此外,还可以指定`T`必须实现特定接口或具有特定基类。 5. **...

    C# 泛型 C# 泛型

    - `where T : interfaceType`:T必须实现interfaceType接口。 - `where T : U`:T必须是U的子类型。 6. **泛型集合**:C#的System.Collections.Generic命名空间提供了许多泛型集合,如List&lt;T&gt;、Dictionary&lt;TKey, ...

    C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换

    这段代码展示了如何定义一个泛型类`MyClass&lt;T&gt;`,其中`T`是一个类型参数。`where`子句用于对类型参数添加约束,这里指定了`T`必须继承自`BaseClass`并且实现`ISomeInterface`接口。这样做的好处是可以确保编译器能够...

Global site tag (gtag.js) - Google Analytics