这是我从这里获得的项目中一些代码的原型,但我很难理解为什么它会以这种方式工作。这是代码。
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()
那么为什么允许使用它?- 当参数在
propertySetter(sm, "Johnny Bravo");
什么指示它转到分配器字典中传递时? - 当它确实进入字典时,它如何知道要执行哪个 lambda 表达式(假设有多个),因为我看不到像
"TargetText"
与propertySetter(sm, "Johnny Bravo");
这些是我现在对此唯一的问题,如果我想到其他任何问题,我会更新这篇文章。