【问题标题】:setting value to the instance of primitive types将值设置为原始类型的实例
【发布时间】:2010-06-17 13:15:52
【问题描述】:

我有一个执行某些操作的函数,即从数据库中获取一些数据。 它采用的泛型始终是原始类型,即 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>();

是否有某种方法可以将对象类型转换为任何始终为原始的泛型类型?

【问题讨论】:

  • 错误是什么?您最终试图将其转换为可能无法实现的 int
  • FetchData 返回什么类型?
  • 确实——这可能是Convert.ChangeType的工作
  • FetchData 返回我将在 T 中提供的类型。例如,如果 FetchData 返回类型 varchar2,那么我将调用函数为:string result=PerformOperation();

标签: c# types instance primitive


【解决方案1】:

既然你已经有类型 T,为什么不需要把它装进 Object 中。

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 的异常。
  • 如果 FetchData() 在运行时返回一个 string 并且类型 T 是 int,你肯定会得到错误。您还应该使您的 FetchData() 通用并像这样调用T result = FetchData&lt;T&gt;();
  • 我发现了错误。实际上它不能转换从数据库中获取的十进制类型。所以 Convert.ChangeType(result,typeof(T));在运行时将来自数据库的数据转换为所需的类型。非常感谢您的青睐:)
猜你喜欢
  • 2012-07-14
  • 2011-06-29
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多