Я хочу изменить какой-либо текст в режиме обратного вызова, но меня смутил следующий код:
List<Item> items = new List<Item>();
Item item = new Item();
item.Value = "CCC";
item.ReturnText = () => { return item.Value + "BBB"; };
items.Add(item);
item = new Item();
item.Value = "DDD";
items.Add(item);
// expected:
// Value: CCC, Text: CCCBBB
// Value: DDD, Text: AAA
// BUT ACTUALLY THE OUTPUT IS
// Value: CCC, Text: DDDBBB
// Value: DDD, Text: AAA
foreach (var i in items)
{
Console.WriteLine(i.ToString());
}
public class Item
{
public Item()
{
ReturnText = null;
}
public string Value { get; set; }
public string Text
{
get
{
if (ReturnText != null) return ReturnText();
return "AAA";
}
set { }
}
public delegate string ReturnTextCallback();
public ReturnTextCallback ReturnText;
public override string ToString()
{
return "Value: " + Value + ", Text: " + Text;
}
}
мой английский плохой, поэтому я хочу, чтобы код мог показать, что я хочу сделать, и, пожалуйста, кто-нибудь может объяснить мне, почему это произошло? спасибо всем