2015-03-17 2 views
0

Я пытаюсь использовать отражение для вызова метода на объект, и могут быть задействованы параметры. Код работает отлично, когда параметры не указаны, но возвращает неверные данные при наличии параметров.Метод вызова на объекте возвращает строку параметров - Reflection C#

Вот мой код:

object temp = readerTask.GetType().GetProperty(bsplit[0]).GetValue(readerTask, null); 

if (useParams) 
{ 
    MethodInfo methodInfo = temp.GetType().GetMethod(bsplit[1].Split(new char[] { '(' })[0], new[] { typeof(string) }); 
    string p = bsplit[1].Split(new char[] { '(', ')' })[1]; 
    value = methodInfo.Invoke(temp, new[] { p }); 
} 
else 
{ 
    value = temp.GetType().GetMethod(bsplit[1]).Invoke(temp, null); 
} 

В качестве примера, моя входная строка Date.ToString("MMMM dd, yyyy").

ТЕмп объект имеет правильный объект даты в нем, что я хочу, чтобы отформатировать, но когда я запускаю через код, данные в значение переменной MMMM dd, yyyy

Как я могу получить метод для запуска и использования параметры правильно?

+0

, как это 'Date defined'? –

+0

Вы уверены, что temp является объектом 'DateTime'? –

+2

Это поможет, если вы можете предоставить короткую, но полную * программу, демонстрирующую проблему. –

ответ

2

p не "MMMM dd, yyyy", но "\"MMMM dd, yyyy\"".

Это можно легко проверить с Console.WriteLine(DateTime.Now.ToString("\"MMMM dd, yyyy\""));, который печатает точно "MMMM dd, yyyy"

Вы должны удалить '"' символы:

MethodInfo methodInfo = temp.GetType().GetMethod(bsplit[1].Split(new char[] { '(' })[0], new[] { typeof(string) }); 
string p = bsplit[1].Split(new char[] { '(', ')' })[1]; 
if (p[0] = '"') 
{ 
    p = p.Substring(1, p.Length - 2); 
} 
value = methodInfo.Invoke(temp, new[] { p }); 
+0

Это решило. Я не знал, что кавычки вызывали проблему. Спасибо. – RXC