這是我從這裏得到的項目中的一些代碼的原型,但我很努力地理解爲什麼它按照它的方式工作。 這是代碼。C#代表如何使用代表工作?
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表達式(提供有多個),因爲我沒有看到一起傳遞與
propertySetter(sm, "Johnny Bravo");
這些都是像"TargetText"
只有我現在有關於此的問題,如果我想到其他內容,我會更新這篇文章。
'屬性設置器'在'TryGetValue'調用中分配。 – msitt
每個線程的一個問題請。縮小你的問題 – Rahul
*「什麼指示它去分配器字典?」* - 你從'assigner'得到它。它使用'TryGetValue'執行從字典中提取的lambda表達式對象。 –