2010-06-17 83 views
1

我有一个执行某些操作的函数,即从数据库中提取一些数据。 它需要的泛型是基本类型,例如int,char,bool,string等。我可以很容易地创建它的实例。但我无法将我从数据库中提取的值设置为此实例。将设置值设置为原始类型的实例

public T PerformOperation<T>() 
{  
    object instance = (T)Activator.CreateInstance(typeof(T)); 

    object result=FetchData(); 

    instance = (T)result; //It gives error on this statement 
} 

该功能被称为:

int result = PerformOperation<int>(); 

有铸造的对象类型的任何泛型类型这始终是原始的一些方法?

+0

什么是错误?你最终试图将其转换为一个不可能的int – 2010-06-17 05:05:51

+0

FetchData返回什么类型? – SWeko 2010-06-17 05:21:02

+0

事实上 - 这可能是'Convert.ChangeType'的一个工作。 – 2010-06-17 05:34:07

回答

1

当你已经有类型T时,为什么把它变成不必要的对象。

public T PerformOperation<T>() 
{  
    T instance = (T)Activator.CreateInstance(typeof(T)); // why do you need this ? 

    T result = FetchData(); 

    //instance = (T)result; 
    return result; 
} 

或者可能是这种方式,如果您必须使用Object

public T PerformOperation<T>() 
{  
    //object instance = (T)Activator.CreateInstance(typeof(T));  
    //object result=FetchData(); 

    return (T)FetchData(); // If I could get you correctly. 
} 
+0

这就是我正在做的,但它抛出了特定的Cast Not Allowed的异常。 – 2010-06-17 05:43:52

+0

如果FetchData()在运行时返回一个“字符串”并且类型T是“int”,那么肯定会得到该错误。你也应该使你的FetchData()泛型并且像这样调用'T result = FetchData ();' – 2010-06-17 05:54:03

+0

我发现了这个错误。实际上它不能转换从数据库中获取的十进制类型。所以Convert.ChangeType(result,typeof(T));在运行时将来自数据库的数据转换为所需的类型。 非常感谢您的支持:) – 2010-06-17 06:04:17