返回var的C#方法

RBr*_*tas 3 c# var return

我喜欢从我的方法返回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
    //{
    //}
}
Run Code Online (Sandbox Code Playgroud)

cap*_*sac 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;
}
Run Code Online (Sandbox Code Playgroud)

如果vColumnName变量不包含任何数据或者发生任何异常,则该方法将返回null.


Yai*_*vet 8

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

var不是一个类型,而是一个C#关键字,用于缩短和使代码更具可读性(一个隐式类型的局部变量) - 更深入地阅读这里.所以,不要担心回var-在你的方法签名使用一个真正的类型,只是想:int,string等等.

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

public string[] m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
Run Code Online (Sandbox Code Playgroud)

至于try-catch-finally块,它不适合你,因为vColumnNametry范围(代码块)中声明 - 例如,你可以在方法范围中声明它更高.

顺便说一下,你只是在实现DataTable,而不是先填充它,数据来自哪里?:

DataTable iDataTable = new DataTable();
Run Code Online (Sandbox Code Playgroud)

您还要先清除它var_List而不先填写它:

var_List.Clear();
Run Code Online (Sandbox Code Playgroud)

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

GetVarMethod
Run Code Online (Sandbox Code Playgroud)


Dou*_*las 6

您返回的对象的类型始终是string[].您可以在不影响其功能的情况下更改方法的返回类型:

public string[] m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
Run Code Online (Sandbox Code Playgroud)

这仍然允许您var在调用方法时使用:

var result = m_DEMO_Return_var_method("schema", "table");
Run Code Online (Sandbox Code Playgroud)

编辑:您的catch块未编译,因为您试图返回一个vColumnName未在其范围内声明的变量.您可以通过返回null或清空来解决此问题string[].

catch
{
    return null;
    // return new string[0];   // (alternative)
}
Run Code Online (Sandbox Code Playgroud)