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表达式对象。