вопрос о c # - PullRequest
       46

вопрос о c #

1 голос
/ 09 июля 2011

Извините за глупый вопрос.Я только начал программировать на C #.Я исследую это уже много часов и читаю, что могу здесь.Это, казалось бы, так часто, я просто не понимаю, почему это не работает.Я хочу объявить переменную в родительском методе и изменить значение в дочернем классе.Если это не способ сделать это, как я могу создать методы (даже для циклов или циклов while), которые возвращают полезные данные?

Пример 1:

   static void Main(string[] args)
    {
        int rowID;
        for (int i = 1; i < 500; i++ )
        {
            rowID = i;
        }
        Console.WriteLine(rowID);
    }

Пример 2:

private void SendButtonClicked(object sender, System.EventArgs e)
{            
    // finds the first row that has not been sent
    int rowID = GetMessageRow();
    //then process the row and figure out what stored procedure to run 
    RunStoredProcedure(rowID);
}

public int GetMessageRow()
// finds the first row that has not been sent
{
    int rowID;
      // skipping some code
       while (drGetMessageRow.Read())
        {
         // while loop does not understand the variable and errors  
            rowID = drGetMessageRow.GetInt32(0);
            MessageBox.Show("1: RowID is " + rowID.ToString());
        }
}

Ответы [ 6 ]

2 голосов
/ 09 июля 2011

Используйте ключевое слово return для возврата значения из метода. Это ключевое слово выходит из метода. Пример:

 return rowID;
1 голос
/ 09 июля 2011

Если вы хотите запустить хранимую процедуру для одного rowId, который возвращает метод GetMessageRow, вам необходимо вернуть значение из вашего метода:

public int GetMessageRow()
// finds the first row that has not been sent
{
    int rowID;
      // skipping some code
       while (drGetMessageRow.Read())
        {
         // while loop does not understand the variable and errors  
            rowID = drGetMessageRow.GetInt32(0);
            MessageBox.Show("1: RowID is " + rowID.ToString());
        }

    return rowID;
}

Если вы хотите вызвать хранимую процедуру для каждой строкичем вам нужно вызвать RunStoredProcedure внутри цикла, передавая текущий rowId:

public void ProcessMessageRows()
// finds the first row that has not been sent
{
      // skipping some code
       while (drGetMessageRow.Read())
        {
         // while loop does not understand the variable and errors  
            int rowID = drGetMessageRow.GetInt32(0);
            MessageBox.Show("1: RowID is " + rowID.ToString());
            RunStoredProcedure(rowId);
        }
}
1 голос
/ 09 июля 2011

На измените значение (то есть само значение ) между методами, с которыми вы начинаете попадать на территорию ref - но я предлагаю НЕ делать этого ... Пока.

To вернуть полезное значение просто return it.В частности, одна проблема с циклами заключается в том, что они могут не выполнять итерацию ни разу, поэтому в терминах «определенного присваивания» вам часто нужно присвоить значение по умолчанию вне цикла.

Другой вариант -на throw, если вы не попали в цикл, или использовать методы LINQ, такие как .First() или .Single().

1 голос
/ 09 июля 2011

Ваш метод GetMessageRow должен вернуть rowID.Это то, что позволяет rowID (который является другой переменной) иметь значение, установленное в методе SendButtonClicked.

public int GetMessageRow()
// finds the first row that has not been sent
{
    int rowID;
    // skipping some code
    while (drGetMessageRow.Read())
    {
        // while loop does not understand the variable and errors  
        rowID = drGetMessageRow.GetInt32(0);
        MessageBox.Show("1: RowID is " + rowID.ToString());
    }

    return rowID;
}
1 голос
/ 09 июля 2011

Вам необходимо вернуть значения. Например, после цикла while в GetMessageRow вы должны return rowID

0 голосов
/ 09 июля 2011

Я понял, что могу все так поместить в класс.

class Sproc 
{ 
public static int rowID = 0; 
public int GetMessageRow(); ... 
public void RunStoredProcedure(int rowID)... 
}

.... тогда я могу позвонить следующим образом.

    SProc s;
    s = new SProc();

    // finds the first row that has not been sent
    int rowID = s.GetMessageRow();

    //then process the row and figure out what stored procedure to run - this could be (should be) also in the config.
    s.RunStoredProcedure(rowID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...