返回var的C#方法

时间:2013-07-06 12:48:57

标签: c# return var

我喜欢从我的方法中返回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
    //{
    //}
}

6 个答案:

答案 0 :(得分:9)

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

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。

答案 1 :(得分:8)

  

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

var不是类型,而是C#关键字,用于缩短代码并使代码更具可读性(隐式类型化的局部变量) - 更深入地阅读here。所以忘记返回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

答案 2 :(得分: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)
}

答案 3 :(得分:1)

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

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

     .......

     return vColumnName as IEnumerable<T>;
}

答案 4 :(得分:0)

只需将方法的返回类型更改为object,就可以返回使用var关键字声明的任何类型。

答案 5 :(得分: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();
    }