2012-03-14 2 views
0

Я использую Asp.net/C# ,, я объявлен integerarray следующим public int[] recno; Как я не знаю точный размер array ,, однако внутри function я узнать его размер на основе числа customer_id's в table.Here является functionC проблема доступа # массив

public void GetRecordNo() 
     { 
      recid = from id in dt.cust_masters 
        select id; 
      recno = new int[recid.Count()]; 

      for (int i = 0; i < recid.Count(); i++) 
      { 
       recno[i] = Convert.ToInt32(recid.ElementAt(i).customer_id); 
      } 

     } 

Когда я пытаюсь вызвать функцию ShowRecord(int index) которая принимает id клиента следующим образом

ShowRecord(recno[0]) 

Это дает мне ошибку

Object reference not set to an instance of an object. 

Кто-нибудь может указать мне, где я буду неправильно. Благодаря

+0

Уверены ли вы, что ваш запрос возвращает оценку эс? – Maheep

+0

попробуйте использовать «from cust in dt.cust_masters select cust.id;» – Maheep

+0

@Maheep это возвращает значение, потому что, когда я вызываю функцию ShowRecord() внутри этой функции, она хорошо работает .. – freebird

ответ

3

Вы можете упростить код:

recid = from id in dt.cust_masters 
      select id.customer_id; 

//recno = new int[recid.Count()]; 
recno = recid.ToArray(); 
// remove for-loop 

И найти/предотвратить вашу нулевую проблему реф:

void ShowRecord(int index) 
{ 
    if (index < 0 || index >= recno.Length) 
     throw new InvalidArgumentException("index"); 

    var id = recno[index]; 
    ... 
} 
+0

,,,,, но это позволит мне получить доступ к значениям recno вне этой функции. – freebird

+0

Это зависит от того, как 'public' /' private' вы делаете 'recno []'. Не по этому методу. Но каков реальный вопрос? –

+0

,, я сделал это общедоступным, мой вопрос в том, что мне нужны значения массива, которые будут переданы как параметры функции ShowRecord(). – freebird

3

Почему вы просто использовать:

public void GetRecordNo() 
{ 
    var recno=(
     from id in dt.cust_masters 
     select id.customer_id 
    ).ToArray(); 
} 
+0

тогда как я могу передать id своей функции – freebird

1

Первый проверьте, какой объект имеет значение null, установив точку останова и зависая над параметром recno ShowRecord(recno[0]). Это нулевое значение? Если да, убедитесь, что ваш метод GetRecordNo() фактически вызывается перед вызовом ShowRecord.

Или использовать для доступа Recno:

public int[] RecNo { 
    get { 
     if (recno == null) { GetRecNo(); } 
     return recno; 
    } 
} 

, а затем использовать его как

ShowRecord(RecNo[0]) 
+0

,, я вызываю GetRecordNo() при загрузке и вызове ShowRecord одним нажатием кнопки, как вы думаете, это может быть проблемой. – freebird

+0

вопрос был именно тем, что вы указали ,,, когда я назвал GetRecordNo(), а затем ShowRecord() ,, он работал нормально ,,, так что я должен снова называть его снова ... Спасибо – freebird

+1

@freebird Возможно, вы получают доступ к локальной переменной, а не к вашему публичному полю? Я редактировал свой пост, может быть, это помогает. – Botz3000

0

Я думаю, ShowRecord(int index) содержит параметр, который включает в себя индекс Int, но когда вы вызываете функцию, вы используя ShowRecord(recno[0]), что вы имеете в виду recno запись на index 0 .......

Смежные вопросы