0
我真的不知道該如何解釋這一點,但我已經嘗試了一些事情,他們不工作的時候。基本上我想要一個項目的行動,行動有點像項目功能。這是我的代碼,它不是先進的。C#設置操作等於拉姆達但有拉姆達保持可變覆蓋
class Item
{
private int itemCount;
private Action itemUsage;
string name;
//Item.Item()
public Item(string _name, Action _itemUsage, int _itemCount)
{
name = _name;
itemUsage = _itemUsage;
itemCount = _itemCount;
//laterInvokes itemUsage
}
//Item.UseItem
public void UseItem()
{
//TYPE:ACTION, is set in constructor
this.itemUsage();
}
}
而且。
class Program
{
//Program.Main(string[] args)
public static void Main(string[] args)
{
Item[] items = new Item[11];
//for every item in items;
for (int i = 0; i < items.Length; i++)
{
//How do i save 'a's lambda with out it coming back here?
Action a =() => Console.WriteLine("Used Item " + i);
items[i] = new Item("Item " + i, a, 1);
}
items[0].UseItem();
items[3].UseItem();
items[4].UseItem();
items[7].UseItem();
//Expect result;
//"Used Item 0"
//"Used Item 2"
//"Used Item 3"
//"Used Item 7"
//Actual Result
//"Used Item 5"
//"Used Item 5"
//"Used Item 5"
//"Used Item 5"
Console.ReadLine();
}
}
問題,因爲我可以看到它是我變量不保存在lambda中。
Action a =() => Console.WriteLine("Used Item " + i);
所以每當我叫項[X] .UseItem()它可以追溯到裏面的for循環操作的聲明和「使用」的我有現在是5
什麼?再一次呢? –
好的...我想我現在得到了你...嘗試下面的''var temporaryInt = i;行動=()=> Console.WriteLine( 「二手物品」 + temporaryInt);「'' –
謝謝你這只是那些時刻之一 –