5

我喜欢从我的方法中返回 var 。我设法使用动态,但后来我的 try-catch-finally 不起作用。你能改进我返回 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
    //{
    //}
}
4

6 回答 6

11

您可以按如下方式更新您的代码。

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。

于 2013-07-06T12:55:39.947 回答
8

你能改进我返回 var 的方法吗?我不需要使用动态,我正在寻找返回 var 的最佳方法。

var不是类型,而是 C# 关键字,用于缩短代码并使代码更具可读性(隐式类型的局部变量) - 请在此处更深入地阅读它。所以忘记返回var- 在你的方法签名中使用一个真实的类型,就像:intstring

现在看起来,您正在返回string数组,所以将返回类型更改为string[],看:

public string[] m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)

至于try-catch-finally块,它对你不起作用,因为vColumnNametry作用域(代码块)中声明的——你总是可以将它声明得更高,例如在方法作用域中。

顺便说一句,您只是在实例化 DataTable 但没有先填充它,数据应该从哪里来?:

DataTable iDataTable = new DataTable();

您还可以在var_List不先填充的情况下清除它:

var_List.Clear();

此外,您最好使用另一个名称作为方法名称,因为 c# 中公认的方法命名约定是 Pascal 大小写:

GetVarMethod
于 2013-07-06T12:52:36.587 回答
6

您要返回的对象的类型始终是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)
}
于 2013-07-06T12:51:08.127 回答
2

Var 不能用作方法返回值,也不能用作方法参数。由于您要返回一个集合,您可以使您的返回类型为 IEnumerable:

public IEnumerable<T> m_DEMO_Return_var_method<T>(string vpSchemaName, string vpTableName)
{
     .......

     .......

     return vColumnName as IEnumerable<T>;
}
于 2013-07-06T13:25:46.190 回答
0

尽管这不能直接回答您的“返回 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();
    }
于 2015-02-04T17:29:40.100 回答
0

只需将方法的返回类型更改为对象,您就可以返回使用 var 关键字声明的任何内容,无论它碰巧是什么类型。

于 2013-07-06T12:52:42.837 回答