Хороший способ вызывать в действии - PullRequest
2 голосов
/ 10 января 2011

Как я могу вызвать элементы, чтобы TestAction выписала "s.Hello"? Сейчас я ничего не делаю, он перепрыгивает через строку "action = s ..".

Или это другой способ сделать это? Поскольку я не хочу возвращать код, я использую Action вместо Func

Я только начал работать с Action.

public class Items
{
    public string Hello { get; set; }
}

public class TestClass
{
    public void TestAction(Action<Items> action)
    {
        action = s => Console.WriteLine(s.Hello);
    }

    public TestClass()
    {
        TestAction(b => b.Hello = "Hello world!");
    }
}

1 Ответ

6 голосов
/ 10 января 2011

Давайте углубимся в ваш код, начиная с нижней части трассировки стека.

  1. TestAction(b => b.Hello = "Hello world!");

Вы предоставляете лямбду, которая присваивает b.Hello как «Hello World».

  1. action = s => Console.WriteLine(s.Hello);

Вы назначаете тому же делегату новую лямбду.

Вы на самом деле ничего с ними не делаете - вы просто генерируете делегата. Для выполнения этого делегата вам необходим аргумент класса Items. Что вы действительно хотите - это вызвать действие с таким аргументом.

public class TestClass
{
    public void TestAction(Action<Items> action)
    {
        Items i = new Item() { Hello = "Hello World");
        action(i);
    }

    public TestClass()
    {
        TestAction(b => Console.WriteLine(b.Hello));
    }
}
...