0

クラスAに関数があります:

public int RecordSummary()
        {
            int result = 0;
            int recordsAffected = 0;

            SqlCommand cmd = new SqlCommand("spIATRecordSummary", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            var returnParameter = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int);
            returnParameter.Direction = ParameterDirection.ReturnValue;

            try
            {
                conn.Open();
                recordsAffected = cmd.ExecuteNonQuery();
                result = Convert.ToInt32(returnParameter.Value);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message.ToString());
            }
            finally
            {
                conn.Close();
            }
            -- I want to return these two: 
            return result;
            return recordsAffected;
        }

この関数から 2 つの値を取得し、それを 2 つの異なる変数に返したいと考えています。

他のクラスから、2 つの変数を設定するにはどうすればよいでしょうか?

クラス B:

int RESULT = RecordSummary();
int RECORDS_AFFECTED = RecordSummary();

タプルを読み込んで out パラメーターを使用してきましたが、呼び出し元が実際にデータを取得する方法がわかりません。何か助けはありますか?

4

1 に答える 1

1

パラメータ使用する方法は次のとおりです。out

int GetRecordSummary(out int recordsAffected)
{
    // If necessary - basically this variable *must* be definitely
    // assigned by the time you return; your code currently just
    // catches exceptions thrown by the block that would assign
    // a value :(
    recordsAffected = -1;
    ...
    // Code as before
    ...
    return result;
}

次に、次のように呼び出します。

int recordsAffected;
int result = GetRecordSummary(out recordsAffected);

詳細については、MSDN のドキュメントをout参照してください。

代替案:

  • 2 つの値をカプセル化する独自の型を作成し、その型の値を返します。
  • Tuple<int, int>.NET 4 以降を使用している場合はa を返します。

    ... in the method ...
    return Tuple.Of(result, recordsAffected);
    
    ... in the caller ...
    var results = GetRecordSummary();
    int result = results.Item1;
    int recordsAffected = results.Item2;
    
于 2012-09-03T06:18:18.393 に答える