2015-10-21 6 views
0

Я написал метод, который выполняет JavaScript и возвращает значение. Возвращаемое значение может быть буквально любым. Теперь я хотел бы хотя бы сократить количество повторяющихся кодов, написав общую перегрузку.Как передать объект типа Object объекту типа T?

что-то вроде:

public T ExecuteJavascriptWithReturnValue<T>(string js) 
{ 
object obj = ExecuteJavascriptWithReturnValue(js); --the original method returns an object 
if (typeof(T) == typeof(int) || typeof(T) == typeof(double) ||typeof(T) == typeof(string)) 
     return (T)(obj); 
} 
else 
{ 
    throw new Exception("For objects other than int, float, double, or string, please use the non generic version."); 
} 

Я получаю следующее сообщение об ошибке: specified cast is not valid. Единственный раз, когда этот код работает, когда возвращаемый объект имеет тип string.

Спасибо за помощь.

EDIT

public object ExecuteJavascriptWithReturnValue(string js) 
{ 
    IJavaScriptExecutor jse = driver as IJavaScriptExecutor; 
    object result = jse.ExecuteScript(js); 
    return result; 
} 

Этот метод может вернуть litteraly что угодно, например, коллекции, строки, числа и т.д. Вот метаданные:

...object ExecuteScript(string script, params object[] args); 

и сценарий может быть что-то например:

string js = "return $('#calculateValueStep > span.k-widget.k-numerictextbox > span >" 
      + " input.k-formatted-value.k-input').val();"; 

Я использую этот метод часто. Итак, мне нужен общий метод для тех времен, когда я ожидаю объект типа, например int, double и son.

+0

Вы видели [это] (http://stackoverflow.com/questions/899629/cast-object-to-t)? –

+3

Ну, если это дает вам эту ошибку, предположительно, объект не относится к типу, к которому вы пытаетесь его применить. Я предлагаю вам log 'obj.GetType()', чтобы узнать, что это на самом деле ... (Это не помогает, мы понятия не имеем, как работает ваш метод ExecuteJavascriptWithReturnValue. Вполне возможно, что он моделирует все числа как ' double' values ​​...) –

+0

Как вы называете этот метод? –

ответ

2

Может попробовать это:

return (T)Convert.ChangeType(obj, typeof(T)); 
+2

Не забудьте бросить его на T –

+0

Добавляем '(T)' вперёд, как предложил М. М. Казем Ахмары. – Richard77

+0

Хорошо, я отредактировал свой ответ, чтобы быть полностью работающим решением. – Festyk

Смежные вопросы