Переменная не принимает значения в C # - PullRequest
0 голосов
/ 20 декабря 2010

У меня следующая проблема -

rec = new Record(name, age, dob, sex, country );
webservicename.function[] test = new webservicename.function[1];
test[0].name = rec.name;
test[i].age = rec.age;
test[i].dob = dob;
test[i].sex = sex;
test[i].country = country;

Когда я начинаю отладку, она останавливается на первой строке test [0] с сообщением «NullReferenceException is uhandled». При наведении курсора мыши на rec.Account отображается значение из файла csv, из которого я прочитал, однако при наведении курсора на test [0] его значение равно нулю. По какой-то причине массив переменных не принимает значения. Как мне это отсортировать?

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

Попробуйте это:

rec = new Record(name, age, dob, sex, country );
webservicename.singlesummary[] test = new webservicename.singlesummary[1];
webservicename.singlesummary result = new webservicename.singlesummary();
result.account = rec.name;
result.actualy = rec.age;
result.commitment = dob;
result.costCentre = sex;
result.internalCostCentre = country;
test[0] = result;
0 голосов
/ 20 декабря 2010

Сначала вам нужно инициализировать экземпляр:

rec = new Record(name, age, dob, sex, country ); 
webservicename.singlesummary[] test = new webservicename.singlesummary[1]; 
test[0] = new webservicename.singlesummary(); // extra line for your code
test[0].name= rec.name; 
test[0].age = rec.age; 
test[0].dob = dob; 
test[0].sex = sex; 
test[0].country = country; 

Очевидно, что если вам нужен массив и длина которого больше единицы, вы можете заменить все строки, кроме одной и двух выше, внутри for для ...next цикл и индекс для элемента ith.

Я заметил, что вы индексируете в массив с помощью [0] (и создаете массив длиной 1), что мне кажется бессмысленным, выможет также использовать один экземпляр:

rec = new Record(name, age, dob, sex, country ); 
webservicename.singlesummary test = new webservicename.singlesummary(); 
test.name= rec.name; 
test.age = rec.age; 
test.dob = dob; 
test.sex = sex; 
test.country = country; 

Если вы используете массив длины один, потому что служба, которую вы вызываете, принимает только массив / список элементов, вы всегда можете создать ее во времявызов:

wbsvcProxy.MethodCall(new List<singlesummary>() { test });

На мой взгляд, это более читабельно во всем коде, поскольку вы создаете массив / список только при вызове метода и удаляете весь синтаксис [0]. в стиле фанк изостальная часть вашего кода (если ваш метод не требует этого, не берите в голову этот последний бит)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...