在vb.net中,我从任何数据源创建了2个用于数据绑定gridviews/dropdownlists/etc的速记函数(例如dataReader,iReader或collection等):

Public Shared Sub BindObject(ByVal objDataSource As Object, ByVal objItem As Object)

    objItem.DataSource = objDataSource
    objItem.DataBind()
End Sub

Public Shared Sub BindObject(ByVal objDataSource As Object, ByVal objItem As Object, ByVal sTextField As String, ByVal sValueField As String)

    objItem.DataSource = objDataSource

    If sTextField <> "" Then objItem.DataTextField = sTextField
    If sValueField <> "" Then objItem.DataValueField = sValueField

    objItem.DataBind()
End Sub

我将其转换为C#这样:

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

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

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

        objItem.DataBind();
    }

然而,这显然不起作用,因为数据结合方法无法访问 Objitem, ,除非我明确地将其施加到诸如“ listbox”或“ gridview”等类型等。同样,我要保留灵活性 objdatasource 可以是iReader,偶像等。

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

谢谢。

有帮助吗?

解决方案

您可以使用“ var”匿名类型或输入案例语句以查看传入对象是什么类型。

-编辑-

您是正确的,这里的VAR似乎不可行。请尝试此解决方案:

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

        }

问候,保罗

其他提示

您可以在VB代码中严格关闭选项。 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();
}

但是,再次,您应该真正研究一种方法来保留强大的编译时类型检查。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top