如何访问数组在一个button_click,从不同的button_click?



当我点击"newRound"按钮,程序生成小奥秘牌组,并通过fishyatesshuffle方法洗牌。

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void newRound_Click(object sender, RoutedEventArgs e)
{
var minorArcanaDeck = new string[] {"Ace of Wands","Two of Wands", etc.};
var rng = new Random();
rng.Shuffle(minorArcanaDeck);
}  
}
static class FisherYatesShuffle
{
public static void Shuffle<T>(this Random rng, T[] array)
{
int n = array.Length;
while (n > 1)
{
int k = rng.Next(n--);
T temp = array[n];
array[n] = array[k];
array[k] = temp;
}
}
}

在一个不同的按钮(这也是在部分类),我想访问这个小arcanadeck数组,但我不知道如何。我如何使下面的代码工作,使文本框显示数组的值,当"drawCard"按钮被点击了吗?

private void drawCard_Click(object sender, RoutedEventArgs e)
{
myText.Text = minorArcanaDeck[0];  

}

您需要了解局部变量和类变量(字段/属性)之间的区别

你应该将数组定义为一个字段,这样每个(非静态)方法都可以访问它。

public partial class MainWindow : Window
{
// fields
private string[] _minorArcanaDeck = new string[] {"Ace of Wands","Two of Wands", etc.};
private Random _rng = rand = new Random(Guid.NewGuid().GetHashCode());
public MainWindow()
{
InitializeComponent();
}
private void newRound_Click(object sender, RoutedEventArgs e)
{
_rng.Shuffle(_minorArcanaDeck);
}  

private void drawCard_Click(object sender, RoutedEventArgs e)
{
myText.Text = _minorArcanaDeck[0];  
}
}
static class FisherYatesShuffle
{
public static void Shuffle<T>(this Random rng, T[] array)
{
int n = array.Length;
while (n > 1)
{
int k = rng.Next(n--);
T temp = array[n];
array[n] = array[k];
array[k] = temp;
}
}
}

在我的例子中,我使用_前缀,所以我有一个明确的命名约定。但这不是必需的。通过将随机移出newRound_Click方法并使用随机种子,将生成更好的随机数。(否则你总是有相同的随机序列)

最新更新