c# - 填充数组一次并稍后引用
问题描述
我有一个应用程序,它从加载到数组中的文本文件中选择一个随机单词,
我目前这样做:
.xaml:
<Label x:Name="GameWords" Text="Press 'Generate a Word' to get started" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
<Button x:Name="GenerateWord" Text="Generate a Word" Clicked="GetWord" />
xml.cs:
async void GetWord(object sender, EventArgs e)
{
var WordsList = new List<string>();
using (var stream = await FileSystem.OpenAppPackageFileAsync("txtWords.txt"))
using (var reader = new StreamReader(stream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
WordsList.Add(line);
}
}
string[] allWords = WordsList.ToArray();
var random = new Random();
int randNum = random.Next(1, 267751); /*Max lines in txtWords.txt */
string newWord = allWords[randNum];
GameWords.Text = newWord;
}
如您所见,每次按下按钮都会将整个文件 txtWords.txt(267751 个单词)加载到一个名为 allWords 的数组中。
理想情况下,我想要做的是加载一次数组,可能是在应用程序加载时,然后在 GetWord 函数中引用它。如果我将加载数组的代码部分移到函数之外,我似乎无法在 GetWord 中引用该数组?
构建我的代码以实现这一目标的最佳方法是什么?
解决方案
您的问题是关于您不共享的代码,除了提供您共享的代码的替代实现之外,很难做任何事情......
下面的代码是对您共享的代码的最小更改,以使其按您所说的那样运行。请注意,它不是线程安全的。
private static List<string> WordsList;
async void GetWord(object sender, EventArgs e)
{
if (WordsList == null) {
WordsList = new List<string>();
using (var stream = await FileSystem.OpenAppPackageFileAsync("txtWords.txt"))
using (var reader = new StreamReader(stream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
WordsList.Add(line);
}
}
}
string[] allWords = WordsList.ToArray();
var random = new Random();
int randNum = random.Next(1, 267751); /*Max lines in txtWords.txt */
string newWord = allWords[randNum];
GameWords.Text = newWord;
}
推荐阅读
- azure-web-app-service - Live SDK 应用程序 - 无法完成请求?
- python - 创建包含来自另一个列表的元素的大小为“n”的随机列表
- javascript - 如何将具有特定 ID 的数据传递给后端路由参数?
- javascript - 这个闭包在哪里泄漏内存?
- python - Pylint 或其他可以处理 functools.partial 的 linter
- multipartform-data - Quarkus + resteasy-multipart
- python - Creating multiple tcp socket handlers from one class in Python
- puppeteer - Page.createIsolatedWorld grantUniveralAccess 标志不授予通用访问权限
- powershell - 在cmd中搜索和替换名称
- html - 需要将数据从网站传输到 googlesheets