【发布时间】:2019-06-21 21:24:31
【问题描述】:
我正在尝试从传递参数并将其存储在变量ZDO_S的函数中返回多个值
在变量 ZDO_S 中,我试图存储两个值,我将通过传递单个值 'row["TVM_LS_NO"].ToString()' 来获得,这是在 'getdo' 函数中从数据库获取的
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 变量中。
-
实际出现错误“无法将 void 分配给隐式类型变量”在
var ZDO_S=getDo(row["TVM_LS_NO"].ToString()); -
IDentifier 预计在
private static (string TVD_LS_NO, string TVD_INV_NO) getDo(string DoNo) -
因为 'Program.getDo(String) 返回 void ,所以返回关键字后面必须跟一个对象表达式
return (TVD_LS_NO, TVD_INV_NO);
【问题讨论】:
-
方法签名的语法看起来是正确的,您确定您使用的是 C#7 或更高版本吗?
-
您的变量
TVD_LS_NO和TVD_INV_NO在foreach块中定义,因此在您执行return时不可见。 -
顺便说一句,我强烈建议您开始遵循 .NET 命名约定,并避免您在此处获得的冗余 try/catch-then-throw 块。
-
如果不是 C#7,则不能使用此语法。像这样的元组是在 C#7 中添加的,因此您必须回退到 old tupels。它们的定义是这样的
Tupel<string, string>。它们的缺点是只有名为“Item1”和“Item2”的属性而不是您想要的名称,但以相同的方式工作。 -
我认为,如果任何方法需要返回多个值,为它定义一个类/结构会使代码更具可读性(除了
tryParse和out关键字这样的情况,这不是很对我也很有吸引力)。
标签: c#