将设置值设置为原始类型的实例
我有一个执行某些操作的函数,即从数据库中提取一些数据。 它需要的泛型是基本类型,例如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>();
有铸造的对象类型的任何泛型类型这始终是原始的一些方法?
当你已经有类型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.
}
这就是我正在做的,但它抛出了特定的Cast Not Allowed的异常。 – 2010-06-17 05:43:52
如果FetchData()在运行时返回一个“字符串”并且类型T是“int”,那么肯定会得到该错误。你也应该使你的FetchData()泛型并且像这样调用'T result = FetchData
我发现了这个错误。实际上它不能转换从数据库中获取的十进制类型。所以Convert.ChangeType(result,typeof(T));在运行时将来自数据库的数据转换为所需的类型。 非常感谢您的支持:) – 2010-06-17 06:04:17
什么是错误?你最终试图将其转换为一个不可能的int – 2010-06-17 05:05:51
FetchData返回什么类型? – SWeko 2010-06-17 05:21:02
事实上 - 这可能是'Convert.ChangeType'的一个工作。 – 2010-06-17 05:34:07