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
    //{
    //}
}

C#方法返回变量

您可以如下更新代码。

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-在方法签名中使用真实类型,就像:intstring等。

现在看起来,您返回的是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();
    }