これは私がここから得たプロジェクトのコードのプロトタイプですが、なぜそれが動作するのか理解するのには苦労しています。 コードは次のとおりです。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");
で渡されたときに、代入ディクショナリに移動するよう指示するものはありますか?それは辞書に取得しない場合、私は"TargetText"
がそれらであるpropertySetter(sm, "Johnny Bravo");
と一緒に渡されているようなものが表示されないよう、どのようにそれは(複数が提供される)は、ラムダ式実行するために知っているん
'PropertySetter'は' TryGetValue'呼び出しで割り当てられます。 – msitt
スレッドごとに1つの質問をお願いします。あなたの問題を絞り込んでください – Rahul
* "アサイナ辞書に行くための指示は何ですか?" * - あなたはそれを「割り当て者」から得ました。 'TryGetValue'を使って辞書から引っ張ったラムダ式オブジェクトを実行します。 –