返回var的C#方法

返回var的C#方法,c#,return,var,C#,Return,Var,我喜欢从我的方法返回var。 我设法使用dynamic,但我的try-catch最终不起作用。 你能改进我返回var的方法吗? 我不需要使用动态,我正在寻找返回var的最佳方法 事先非常感谢你。 符文 公共动态m_DEMO_Return_var_方法(字符串vpSchemaName,字符串vpTableName) { var var_List=新列表(); //试一试 //{ DataTable iDataTable=新DataTable(); var_List.Clear(); foreach

我喜欢从我的方法返回var。 我设法使用dynamic,但我的try-catch最终不起作用。 你能改进我返回var的方法吗? 我不需要使用动态,我正在寻找返回var的最佳方法

事先非常感谢你。 符文

公共动态m_DEMO_Return_var_方法(字符串vpSchemaName,字符串vpTableName)
{
var var_List=新列表();
//试一试
//{
DataTable iDataTable=新DataTable();
var_List.Clear();
foreach(iDataTable.Rows中的DataRow iDataRow)
{
var_List.Add(iDataRow[“COLUMN_NAME”].ToString());
}
var vColumnName=var_List.ToArray();
返回vColumnName;
//}
//捕获(异常imu异常)
//{
//返回vColumnName;
//}
//最后
//{
//}
}

返回的对象类型始终是
字符串[]
。您可以更改方法的返回类型,而不影响其功能:

public string[] m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
这仍然允许您在调用方法时使用
var

var result = m_DEMO_Return_var_method("schema", "table");
Edit:您的
catch
块未编译,因为您试图返回未在其范围内声明的变量
vColumnName
。您可以通过返回
null
或空的
字符串[]
来修复此问题

catch
{
    return null;
    // return new string[0];   // (alternative)
}
你能改进我返回var的方法吗?我不需要使用 动态的,我正在寻找返回var的最佳方法

var
不是一个类型,而是一个C#关键字,用于缩短代码并使代码更具可读性(一个隐式类型的局部变量)——请更深入地了解它。因此,忘记返回
var
——在方法签名中使用实数类型,就像:
int
string

现在看起来,您正在返回
string
array,因此将返回类型更改为
string[]
,请看:

public string[] m_DEMO_Return_var_method(string vpSchemaName, string vpTableName)
至于
try catch finally
块,它对您不起作用,因为
vColumnName
是在
try
范围(代码块)中声明的-您可以始终在方法范围(例如)中声明更高的值

顺便说一句,您只是实例化DataTable,而不是首先填充它,数据应该来自哪里

DataTable iDataTable = new DataTable();
您也在清除
var\u列表
,而不先填充它:

var_List.Clear();
此外,您最好使用另一个名称作为方法名称,因为c#中的公认约定是方法命名的Pascal case:

GetVarMethod

只需将方法的返回类型更改为object,您就可以返回使用var关键字声明的任何内容,不管它是什么类型。

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

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;
}
公共动态m_DEMO_Return_var_方法(字符串vpSchemaName,字符串vpTableName)
{
var var_List=新列表();
var vColumnName=var_List.ToArray();
尝试
{
DataTable iDataTable=新DataTable();
var_List.Clear();
foreach(iDataTable.Rows中的DataRow iDataRow)
{
var_List.Add(iDataRow[“COLUMN_NAME”].ToString());
}
vColumnName=var_List.ToArray();
返回vColumnName;
}
捕获(异常imu异常)
{
返回null;
}
最后
{
}
返回vColumnName;
}

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

Var既不能用作方法返回值,也不能用作方法参数。由于您返回的是集合,因此可以将返回类型设为IEnumerable:

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

     .......

     return vColumnName as IEnumerable<T>;
}
public IEnumerable m_DEMO_Return_var_方法(字符串vpSchemaName,字符串vpTableName)
{
.......
.......
将vColumnName返回为IEnumerable;
}

虽然这并不能直接回答您关于“返回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();
    }
publicstring[]演示(stringvpschemaname,stringvptablename)
{
列表字符串_List=新列表();
DataTable iDataTable=新DataTable();
foreach(iDataTable.Rows中的DataRow iDataRow)
{
string_List.Add(iDataRow[“COLUMN_NAME”].ToString());
}
返回字符串_List.ToArray();
}

您不能返回var。它是什么类型的…?为什么需要返回var?为什么不返回一个数组?还是使用泛型?我认为不可能返回var。编译代码时,var是键入的。返回var会让人困惑。您可能会从描述使用此方法的具体操作中获益。实际上,您总是返回一个
字符串[]
,根据您的最后一行,不清楚您为什么不能将其用作返回类型。请看我的回答:很好!!!我需要一个字符串数组,但我不知道数组的大小,所以我选择了var List;但最终导致退货问题…谢谢!你太棒了@RBrattas,您不需要返回
dynamic
来返回未知大小的数组。每次弹出
dynamic
,您都会将的方法解析等放到运行时,这会导致更令人困惑的失败。最好让您的方法只返回
string[]
甚至
IEnumerable
List
。这让我越来越沮丧,因为typescript添加了越来越多类似性质的智能功能。实现这一点显然很复杂(比如跨程序集问题),但函数没有理由不能将其匿名类型作为“var”返回,并将定义传递给调用它的任何函数。该类型可能是匿名的,但它在CLR中作为实类型存在!编译器可以从那里找到答案。某些限制是可以的-如果这仅限于类的内部,我就可以了。我真的希望有一天我们能得到这个。但是。。。现在C#7中有了元组,它允许您就地创建静态类型的“类型”,这些类型可以从方法返回
     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();
    }