2010-06-17 2 views
1

У меня есть функция, которая выполняет некоторую операцию, то есть извлекает некоторые данные из базы данных. Обычно это примитивный тип: i, 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, который может оказаться невозможным –

+0

Какой тип возвращает FetchData? – SWeko

+0

Действительно - это может быть задание для 'Convert.ChangeType' –

ответ

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. 
} 
+0

Это именно то, что я делаю, но оно бросает исключение, которое конкретное Cast Not Allowed. –

+0

Если FetchData() возвращает 'string', а тип T является' int' во время выполнения, вы обязательно получите ошибку. Вы также должны сделать свой общий профиль FetchData() и вызвать его так: T result = FetchData (); ' –

+0

Я нашел ошибку. На самом деле он не может преобразовать десятичный тип, который извлекается из базы данных. Итак, Convert.ChangeType (результат, typeof (T)); закрыл данные, поступающие из базы данных в требуемый тип во время выполнения. Большое спасибо за услугу :) –