[Редактировать] Я забыл добавить статическое ключевое слово и не связал это, потому что я назвал класс Statics
Я создаю клиентское приложение Blazor.
Я пытаюсь создать статический метод, который я хочу вернуть случайное имя из файла.
public class Statics
{
private static List<string> _names;
public Statics()
{
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "[AssemblyName].Stuff.first-names.json";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
_names = JsonSerializer.Deserialize<List<string>>(result);
}
}
public static string GetRandomName()
{
var random = new Random();
return _names[random.Next(_names.Count)];
}
}
Я пытаюсь загрузить файл в статический конструктор, чтобы не загружать файл большечем один раз, и insted сохранить имена в памяти.
Но когда я вызываю метод GetRandomName, я получаю исключение nullrefrence в списке
Это прекрасно работает, если я скопирую код для загрузки файлав метод
public static string GetRandomName()
{
var random = new Random();
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "[AssemblyName].Stuff.first-names.json";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
_names = JsonSerializer.Deserialize<List<string>>(result);
}
return _names[random.Next(_names.Count)];
}
Я также попытался просто заполнить список любой строкой в конструкторе (это тоже не сработало)
public class Statics
{
private static List<string> _names;
public Statics()
{
_names = new List<string>() { "hello", "World", "Something" };
}
public static string GetRandomName()
{
var random = new Random();
return _names[random.Next(_names.Count)];
}
}
Я понимаю концепциюСтатический конструктор в c # as
Когда вы ссылаетесь на поле или свойство в статическом классе с помощью статического конструктора.Вы уверены, что конструктор будет запущен до того, как вы получите доступ к полю или свойству (но вы не можете точно определить, когда).
Проблема в моем коде?Мое понимание?или пиджак моно время выполнения?