Давайте углубимся в ваш код, начиная с нижней части трассировки стека.
TestAction(b => b.Hello = "Hello world!");
Вы предоставляете лямбду, которая присваивает b.Hello
как «Hello World».
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));
}
}