C#方法返回变量
本文关键字:变量 返回 方法 | 更新日期: 2023-09-27 18:21:31
我喜欢从我的方法返回var。我设法使用了动态,但后来我的try-catch终于不起作用了。你能改进我返回var的方法吗?我不需要使用动态,我正在寻找返回var.的最佳方法
事先非常感谢。符文
public dynamic m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
{
var var_List = new List<string>();
//try
//{
DataTable iDataTable = new DataTable();
var_List.Clear();
foreach (DataRow iDataRow in iDataTable.Rows)
{
var_List.Add(iDataRow["COLUMN_NAME"].ToString());
}
var vColumnName = var_List.ToArray();
return vColumnName;
//}
//catch (Exception im_Exception)
//{
// return vColumnName;
//}
//finally
//{
//}
}
您可以如下更新代码。
public dynamic m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
{
var var_List = new List<string>();
var vColumnName = var_List.ToArray();
try
{
DataTable iDataTable = new DataTable();
var_List.Clear();
foreach (DataRow iDataRow in iDataTable.Rows)
{
var_List.Add(iDataRow["COLUMN_NAME"].ToString());
}
vColumnName = var_List.ToArray();
return vColumnName;
}
catch (Exception im_Exception)
{
return null;
}
finally
{
}
return vColumnName;
}
如果vColumnName变量不包含任何数据或将发生任何异常,则该方法将返回null。
你能改进我返回var的方法吗?我不需要使用动态,我正在寻找返回var.的最佳方法
var
不是一个类型,而是一个C#关键字,用于缩短代码并使其更具可读性(一个隐式类型的局部变量)-请更深入地阅读此处。所以忘记返回var
-在方法签名中使用真实类型,就像:int
、string
等。
现在看起来,您返回的是string
数组,所以将返回类型更改为string[]
,看起来:
public string[] m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
至于try-catch-finally
块,它对您不起作用,因为vColumnName
是在try
作用域(代码块)中声明的——您总是可以在更高的位置声明它,例如在方法作用域中。
顺便说一句,你只是在初始化DataTable,但不是先填充它,数据应该从哪里来?:
DataTable iDataTable = new DataTable();
您也在清除var_List
而不首先填充它:
var_List.Clear();
此外,您最好为方法名称使用另一个名称,因为c#中接受的方法命名约定是Pascal情况:
GetVarMethod
返回的对象类型始终为string[]
。您可以在不影响其功能的情况下更改方法的返回类型:
public string[] m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
这仍然允许您在调用方法时使用var
:
var result = m_DEMO_Return_var_method("schema", "table");
编辑:您的catch
块没有编译,因为您试图返回一个未在其范围内声明的变量vColumnName
。您可以通过返回null
或空的string[]
来修复此问题。
catch
{
return null;
// return new string[0]; // (alternative)
}
Var既不能用作方法返回值,也不能用作方法参数。由于您要退货,您可以将退货类型设为IEnumerable:
public IEnumerable<T> m_DEMO_Return_var_method<T>(string vpSchemaName, string vpTableName)
{
.......
.......
return vColumnName as IEnumerable<T>;
}
只需将方法的返回类型更改为object,就可以返回使用var关键字声明的任何内容,无论它是什么类型。
虽然这不能直接回答您的"返回var"问题,但它确实解决了您的问题,上面也有类似的答案,但我经常使用一种方法来处理您的确切代码:
public string[] demo(string vpSchemaName, string vpTableName)
{
List<string> string_List = new List<string>();
DataTable iDataTable = new DataTable();
foreach (DataRow iDataRow in iDataTable.Rows)
{
string_List.Add(iDataRow["COLUMN_NAME"].ToString());
}
return string_List.ToArray();
}