Глядя на деревья выражений на C# и читал this article.Expression.New (..) - но у меня уже есть объект
// Add the following directive to your file:
// using System.Linq.Expressions;
public class SampleClass
{
public int AddIntegers(int arg1, int arg2)
{
return arg1 + arg2;
}
}
static public void TestCall()
{
// This expression represents a call to an instance method that has two arguments.
// The first argument is an expression that creates a new object of the specified type.
Expression callExpr = Expression.Call(
Expression.New(typeof(SampleClass)),
typeof(SampleClass).GetMethod("AddIntegers", new Type[] { typeof(int), typeof(int) }),
Expression.Constant(1),
Expression.Constant(2)
);
// Print out the expression.
Console.WriteLine(callExpr.ToString());
// The following statement first creates an expression tree,
// then compiles it, and then executes it.
Console.WriteLine(Expression.Lambda<Func<int>>(callExpr).Compile()());
// This code example produces the following output:
//
// new SampleClass().AddIntegers(1, 2)
// 3
}
Я хочу сделать что-то почти идентичное это, только я не хочу, чтобы создать новый экземпляр SampleClass
- У меня уже есть экземпляр, я просто хочу, чтобы вызвать метод на него.
Код по существу делает это:
new SampleClass().AddIntegers(1, 2)
... используя деревья выражений; однако, я хочу это сделать:
sampleClassInstance.AddIntegers(1, 2)
Это что-то я могу сделать, или я должен просто придерживаться рефлексии для этого?
Конечно, вы можете просто заменить выражение для создания экземпляра с выражением, чтобы использовать существующий экземпляр. Какие проблемы вы делаете? Кроме того, пожалуйста, включите все соответствующие детали * в сам вопрос *. Люди не должны читать ссылку, чтобы понять ваш вопрос. – Servy
Спасибо за ответ Servy. Каков синтаксис для этого? – garryp
Это то же самое, что и синтаксис для создания выражения на основе любого другого значения, которое у вас есть, которое показано прямо в статье, на которую вы ссылались. – Servy