首页 > 解决方案 > 尝试通过在c#中的函数中传递单个值来返回多个值

问题描述

我正在尝试从传递参数并将其存储在变量中的函数返回多个值ZDO_S

在变量ZDO_S中,我试图存储两个值,我将通过传递从数据库中获取的单个值 'row["TVM_LS_NO"].ToString()' 函数获得两个值

var ZDO_S = getDo(row["TVM_LS_NO"].ToString());

这是方法:

private static (string TVD_LS_NO, string TVD_INV_NO) getDo(string DoNo)
{           
    try
    {
        using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["Oracle_To_Sql.Properties.Settings.Setting"].ToString()))
        {
            string query = "select SUBSTR(TVD_DO_ITEM_NO,'1','10') from T_VEHICLE_DTL1  where TVD_LS_NO=:TVD_LS_NO";
            OracleCommand myCommand = new OracleCommand(query, con);
            DataTable dt = new DataTable();
            OracleDataAdapter da = new OracleDataAdapter(myCommand);
            da.SelectCommand = new OracleCommand(query, con);                    
            da.Fill(dt);                    

            foreach (DataRow row in dt.Rows)
            {
                string TVD_LS_NO = row["TVD_LS_NO"].ToString();
                string TVD_INV_NO = row["TVD_INV_NO"].ToString();                        
            }

            return (TVD_LS_NO, TVD_INV_NO);
        }
    }
    catch (Exception ex)
    {
        throw;
    }

}

应返回预期值并将其存储在 ZDO_S 变量中。

  1. 实际出现错误“无法将 void 分配给隐式类型变量”

    var ZDO_S=getDo(row["TVM_LS_NO"].ToString());
    
  2. 标识符预计在

    private static (string TVD_LS_NO, string TVD_INV_NO) getDo(string DoNo)
    
  3. 由于 'Pr​​ogram.getDo(String) 返回 void ,return 关键字必须后跟对象表达式

    return (TVD_LS_NO, TVD_INV_NO);
    

标签: c#

解决方案


我对 C# 不是很熟悉,但是如果你想在一个 return 语句中返回多个值,唯一的方法通常是一个数组或一个对象。在您的情况下,数组将是最简单的。

  • 返回类型定义看起来不像是数组返回类型,试试

private static string[] getDo() {...

  • return 语句本身看起来不像数组,请尝试将值作为数组返回

  • 您在 foreach 循环内定义变量,这通常会使它们在循环外无法访问。尝试在循环外定义变量并在循环中使用它们。

我不知道这是否是有效的 C#,但类似这样:

private static String[] getDo(string DoNo)
    {           
        try
        {
            using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["Oracle_To_Sql.Properties.Settings.Setting"].ToString()))
            {
                String[] toReturn = new String[2];
                string TVD_LS_NO, TVD_INV_NO;
                string query = "select SUBSTR(TVD_DO_ITEM_NO,'1','10') from T_VEHICLE_DTL1  where TVD_LS_NO=:TVD_LS_NO";
                OracleCommand myCommand = new OracleCommand(query, con);
                DataTable dt = new DataTable();
                OracleDataAdapter da = new OracleDataAdapter(myCommand);
                da.SelectCommand = new OracleCommand(query, con);                    
                da.Fill(dt);                    
                foreach (DataRow row in dt.Rows)
                {
                    TVD_LS_NO = row["TVD_LS_NO"].ToString();
                    TVD_INV_NO = row["TVD_INV_NO"].ToString();                        
                }
                toReturn[0] = TVD_LS_NO;
                toReturn[1] = TVD_INV_NO;
                return toReturn;
            }
        }
        catch (Exception ex)
        {

            throw;
        }

    }

不确定这是否是最好的答案,但我希望它能将您推向正确的方向。


推荐阅读