c# выполняют строку как код

Используйте ImageIO.read() вместо этого:

BufferedImage img = ImageIO.read(url);

5
задан tsilb 2 October 2009 в 20:06
поделиться

5 ответов

Вы можете выполнить метод по имени через Reflection. Вам необходимо знать тип, а также имя метода (которое может быть типом текущего объекта, методом другого объекта или статическим типом). Похоже, вам нужно что-то вроде:

public void amethod(string functionName) 
{
    Type type = typeof(AVeryLargeWebServiceWithLotsOfMethodsToCall);
    MethodInfo method = type.GetMethod(functionName, BindingFlags.Public | BindingFlags.Static);
    method.Invoke(null,null); // Static methods, with no parameters
}

Изменить в ответ на комментарий:

Похоже, вы действительно хотите получить результат от этого метода. Если это так, учитывая, что это все еще статический метод службы (что я предполагаю, учитывая то, что вы написали), вы можете это сделать. MethodInfo.Invoke вернет возвращаемое значение метода как объект напрямую, поэтому, если, например, вы возвращали строку, вы могли бы сделать:

public string amethod(string functionName) 
{
    Type type = typeof(AVeryLargeWebServiceWithLotsOfMethodsToCall);
    MethodInfo method = type.GetMethod(functionName, BindingFlags.Public | BindingFlags.Static);
    object result = method.Invoke(null,null); // Static methods, with no parameters
    if (result == null)
        return string.Empty;
    return result.ToString();
    // Could also be return (int)result;, if it was an integer (boxed to an object), etc.
}
7
ответ дан 18 December 2019 в 07:55
поделиться

Выполнение строки, как если бы это был код, возможно в C #, но это непросто. Это' s также считается плохой практикой и небезопасным (вам, вероятно, следует избегать его и в динамических языках).

Вместо этого сделайте что-нибудь вроде этого:

public void amethod(Action actionParam)
{
    actionParam();
}

Теперь в вашем случае вы хотите вызвать веб-службу. Поскольку в конечном итоге это сводится к xml, у вас есть пара вариантов:

  • Обойти встроенную систему для вызова веб-сервисов и создать свой собственный веб-запрос с правильным именем в нужном месте в xml.
  • Создать делегатов для передачи каждого из методов в службе, возможно, через отражение.
5
ответ дан 18 December 2019 в 07:55
поделиться

Вы говорите, что AVeryLargeWebServiceWithLotsOfMethodsToCall является экземпляром объекта, для которого вы хотите вызвать метод с именем functionName ? Если да:

MethodInfo method = AVeryLargeWebServiceWithLotsOfMethodsToCall.GetType().GetMethod(functionName);
method.Invoke(AVeryLargerWebServiceWithLotsOfMethodsToCall, null);

Или AVeryLargeWebServiceWithLotsOfMethodsToCall тип, для которого вы хотите вызвать статический метод с именем functionName ? Если так:

MethodInfo method = typeof(AVeryLargeWebServiceWithLotsOfMethodsToCall).GetMethod(functionName);
method.Invoke(null, null);
4
ответ дан 18 December 2019 в 07:55
поделиться

Почему бы вам просто не использовать .NET Remoting? Он создан именно для этого.

Совершенно другим решением было бы использование класса CSharpCodeCompiler.

1
ответ дан 18 December 2019 в 07:55
поделиться

Это можно сделать с помощью отражения. Тем не менее, я считаю, что для этого вам нужна ссылка на объект.

Пример из здесь

Type t = this.GetType();
MethodInfo method = t.GetMethod("showMessage");
method.Invoke(this, null);

В качестве альтернативы вы можете использовать Action или другой делегат для передачи ссылки на функцию, которую вы хотите вызвать.

public void amethod(Action function)
{
    function();
}
3
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: