foreach语句不能对'object'类型的变量进行操作

这个问题在这里已经有了答案:

  • 如何将数据源投射到列表<T>? 4个答案

  • 如果你不知道对象的确切类型,但是你确定无论它是什么,它都会有GetEnumerator (比如说,因为它是一个集合或者你自己的一个实现了IEnumerable的对象),你可以停止编译器通过转换为dynamic来发布错误,如下所示:

    foreach (var item in (dynamic)(ddlOther.DataSource)) {
        ...
    }
    

    这里的交易是,如果事实证明ddlOther.DataSource没有GetEnumerator ,你将在运行时得到一个错误,而不是编译时错误。


    修改您的代码以检查IEnumerable接口。 它有更多的感受,更正你想要的。

    public void DataSource(object source, object select, string Value = "UId", string Text = "Text")
    {
        ddlThis.DataSource = source;
        ddlThis.DataTextField = Text;
        ddlThis.DataValueField = Value;
        ddlThis.DataBind();
    
        ddlThisHidden.DataSource = source;
        ddlThisHidden.DataTextField = Text;
        ddlThisHidden.DataValueField = Value;
        ddlThisHidden.DataBind();
    
        if (select != null)
        {
            ddlOther.DataSource = select;
            ddlOther.DataTextField = Text;
            ddlOther.DataValueField = Value;
            ddlOther.DataBind();
    
            if (select is IEnumerable) //check if the object is a list of objects
                foreach (var item in (IEnumerable)ddlOther.DataSource)
                    ddlThis.Items.Remove(item);
            else //try to remove the single object
                ddlThis.Items.Remove(select)
        }
    }
    
    链接地址: http://www.djcxy.com/p/53763.html

    上一篇: foreach statement cannot operate on variables of type 'object'

    下一篇: What is the best pattern to use LINQ to C#