C# 3.0 VB.NET到C#:在对象上使用数据绑定方法

C# 3.0 VB.NET到C#:在对象上使用数据绑定方法,c#-3.0,anonymous-methods,vb.net-to-c#,C# 3.0,Anonymous Methods,Vb.net To C#,在VB.NET中,我从任何数据源(如DataReader或IReader或collection等)为数据绑定GridView/DropDownList/etc创建了2个速记函数: 但是这显然不起作用,因为数据绑定方法不能被objItem访问,除非我明确地将其转换为“ListBox”或“Gridview”等类型。同样,我希望保留objDataSource可以是IReader、iCollection等的灵活性 是否可以使用匿名方法或类似方法在C#中复制VB.NET方法 谢谢。您可以使用“var”匿名

在VB.NET中,我从任何数据源(如DataReader或IReader或collection等)为数据绑定GridView/DropDownList/etc创建了2个速记函数:

但是这显然不起作用,因为数据绑定方法不能被objItem访问,除非我明确地将其转换为“ListBox”或“Gridview”等类型。同样,我希望保留objDataSource可以是IReader、iCollection等的灵活性

是否可以使用匿名方法或类似方法在C#中复制VB.NET方法

谢谢。

您可以使用“var”匿名类型或输入case语句来查看传入对象的类型

-编辑-

您是对的,var在这里似乎不可行。请尝试此解决方案:

public void BindObject(object objDataSource, object objItem)
        {
            (objItem as BaseDataBoundControl).DataSource = objDataSource;
            (objItem as BaseDataBoundControl).DataBind();    

        }
问候,, Paul

您可以使用“var”匿名类型或输入case语句来查看传入对象的类型

-编辑-

您是对的,var在这里似乎不可行。请尝试此解决方案:

public void BindObject(object objDataSource, object objItem)
        {
            (objItem as BaseDataBoundControl).DataSource = objDataSource;
            (objItem as BaseDataBoundControl).DataBind();    

        }
问候,,
Paul

在VB代码中,您已经关闭了选项Strict。Tsk Tsk-这不是最好的选择

要在C#中获得类似效果,可以执行以下操作:

public static void BindObject(object objDataSource, dynamic objItem)
{
    objItem.DataSource = objDataSource;
    objItem.DataBind();
}

public static void BindObject(object objDataSource, dynamic objItem, string sTextField, string sValueField)
{
    objItem.DataSource = objDataSource;

    if (!string.IsNullOrEmpty(sTextField))
        objItem.DataTextField = sTextField;
    if (!string.IsNullOrEmpty(sValueField))
        objItem.DataValueField = sValueField;

    objItem.DataBind();
}

但同样,您应该寻找一种方法来实现这一点,即保留强大的编译时类型检查。

您已经在VB代码中禁用了Option Strict。Tsk Tsk-这不是最好的选择

要在C#中获得类似效果,可以执行以下操作:

public static void BindObject(object objDataSource, dynamic objItem)
{
    objItem.DataSource = objDataSource;
    objItem.DataBind();
}

public static void BindObject(object objDataSource, dynamic objItem, string sTextField, string sValueField)
{
    objItem.DataSource = objDataSource;

    if (!string.IsNullOrEmpty(sTextField))
        objItem.DataTextField = sTextField;
    if (!string.IsNullOrEmpty(sValueField))
        objItem.DataValueField = sValueField;

    objItem.DataBind();
}

但同样,您应该寻找一种方法来实现这一点,以保留强大的编译时类型检查。

您能提供一个在上述函数中使用“var”匿名类型的示例吗?我尝试将它添加到函数头中,但它不起作用,也不起作用:var test=objDataSource;test.DataSource=…@Peter-是的,我也无法让var工作。请参阅已编辑的解决方案能否提供在上述函数中使用“var”匿名类型的示例?我尝试将它添加到函数头中,但它不起作用,也不起作用:var test=objDataSource;test.DataSource=…@Peter-是的,我也无法让var工作。请参阅编辑后的解决方案我可能只是决定添加一个VB类库,尽管为了一个函数我可能只是决定添加一个VB类库,尽管为了一个完美的函数我似乎有点过度,但是,唉,我只使用asp.NET3.5,并且被网站运行的服务器限制这样做,这将是完美的,但是唉,我只使用asp.NET3.5,并且被网站运行的服务器限制这样做