На данный вопрос уже ответили:
Недавно начал кодить на c# и наткнулся на одно "магическое" исключение System.NullReferenceException: "В экземпляре объекта не задана ссылка на объект."
Пытался найти в гугле о ссылках и вроде нашёл, но так ничего не понял.
Надеюсь вы мне поможете разобраться с этой чёрной магией
Вот код (обновлено):
using System;
using System.Collections.Generic;
namespace ConsoleTest
{
class Program
{
public static string[] add;
static void Main(string[] args)
{
while (true)
{
Console.Write("> ");
var str = Console.ReadLine();
Console.WriteLine();
var arg = str.Split(' ');
if (arg[0] == "set")
{
add[Int32.Parse(arg[1])] = arg[2];
Console.WriteLine("Added {0} => {1}", arg[1], arg[2]);
}
else if (arg[0] == "get")
{
Console.WriteLine("Returned {0} => {1}", arg[1], add[Int32.Parse(arg[1])]);
}
}
}
}
}
(Слишком много правок XD)
Выдаёт ошибку на строке add[Int32.Parse(arg[1])] = arg[2];
После запуска я пишу add 5 test
потом Enter и вылезает ошибка.
По замыслу должно сделаться это (естественно ошибка не была в планах): add[5] = "test";
Строкой add[Int32.Parse(arg[1])] = arg[2];
я пытаюсь добавить в массив add
значение arg[2]
с индексом arg[1]
(+ преобразование строки в число).
Массив arg
это полученная строка через Console.ReadLine()
и разбитая с помощью .Split(' ')
Массив add
объявлен: public static string[] add;
Я путался добавлять пустые элементы так:
whlie(add[Int32.Parse(arg[1])] == null) { add.Add(""); }
но это не помогло.
Я не знаю конечного кол-ва мест для содержимого, т.к. это id сессии, номер которой может быть непредсказуемым.
Сегодня я вам всем изрядно напряг мозги, я благодарю вас за терпение.
Спасибо всем за советы, но до решения я дошёл сам
public static void _add(int key, string val) {
if (key >= add.Length) { Array.Resize(ref add, key + 1); }
add[key] = val;
foreach (var item in add)
{
Console.WriteLine(item);
}
}
Я добавил эту функцию и когда надо записать что-то в массив add
я писал _add(index, value)
и всё стало хорошо.
Теперь главное чтобы mono
смог скомпилировать сие чудо (mcs
на linux)
else if (arg[0] == "add" && arg.Count() >= 2)
{
switch (arg[1])
{
case ("test"):
add = new string[] { "test_val" };
//add[0] = "test_val";
Console.WriteLine("Added test_key => test_val");
break;
default:
//здесь не понятно что ты хочешь сделать?
if (arg.Count() >= 3 && Int32.Parse(arg[1])>=0)
{
var a = Int32.Parse(arg[1]);
add = new string[a + 1];
add[Int32.Parse(arg[1])] = arg[2];
Console.WriteLine("Added {0} => {1}", arg[1], arg[2]);
}arg[2]);
break;
}
}
else if (arg[0] == "get" && arg.Count() >= 2)
{
Console.WriteLine("Returned {0} => {1}", arg[1], add[Int32.Parse(arg[1])]);
}
Доброй ночиВопрос такой: нужно отключить ContextMenu, если кликнули не на ListItem
Нужно нарисовать или вставить программным способом и чтобы можно было ее растягиватьИли же вставить как строки
Какой программный компонент Visual Studio оптимально подходит для вывода текстовых данных, изображений? Целесообразно ли использовать для этого...