C# C涉及代表的代码是如何工作的?

C# C涉及代表的代码是如何工作的?,c#,delegates,unassigned-variable,C#,Delegates,Unassigned Variable,这是我从这里得到的项目中的一些代码的原型,但我很难理解为什么它会这样工作。 这是密码 static void Main(string[] args) { SomeClass sm = new SomeClass(); var assigner = new Dictionary<string, Action<SomeClass, string>> { ["TargetText"] = (

这是我从这里得到的项目中的一些代码的原型,但我很难理解为什么它会这样工作。 这是密码

    static void Main(string[] args)
    {
        SomeClass sm = new SomeClass();
        var assigner = new Dictionary<string, Action<SomeClass, string>>
        {
            ["TargetText"] = (someClass, value) => someClass.Name = value,
        };

        for (int i = 0; i < 10; i++)
        {
            Action<SomeClass, string> propertySetter;
            if (!assigner.TryGetValue("TargetText", out propertySetter))
            {
                continue;
            }
            else
                propertySetter(sm, "Johnny Bravo");
        }
        Console.WriteLine(sm); // output Johnny Bravo ????
    }
}
public class SomeClass
{
    string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public override string ToString()
    {
        return $"{Name}";
    }
}
问题:

propertySetter委托在Main中是未分配的,那么为什么允许使用它呢? 当参数在propertySettersm中传递时,Johnny Bravo;是什么引导它进入分配者词典的? 当它到达字典时,它如何知道要执行哪个lambda表达式,前提是有多个表达式,因为我没有看到像TargetText这样的东西与propertySettersm一起传递,Johnny Bravo; 这些是我现在唯一的问题,如果我想到其他的事情,我会更新这篇文章

propertySetter委托在Main中是未分配的,那么为什么允许使用它呢

因为您将它作为if语句上的out参数传递,这保证它将被初始化为一个值

当参数在propertySettersm中传递时,Johnny Bravo;是什么引导它进入分配者词典的

字典中有一个操作委托,该委托与要查找的键TargetText关联:

assigner.TryGetValue("TargetText", out propertySetter)
因此,该委托被分配给propertySetter,它获取某个类的实例,并将其Name属性设置为给定值。在这一点之后,委托需要的只是类的一个实例和一个值,您正在传入该值:

propertySetter(sm, "Johnny Bravo");

propertySetter已在TryGetValue调用中分配。请为每个线程分配一个问题。缩小您的问题范围是什么引导它进入分配者词典的?-你从转让人那里得到的。它使用TryGetValue执行从字典中提取的lambda表达式对象。