【问题标题】:Filtering items before adding to an array in c#在c#中添加到数组之前过滤项目
【发布时间】:2013-09-05 08:09:27
【问题描述】:

在深入完成一个小脚本任务后,我刚刚开始掌握一些 c#。

我正在尝试修改一些在网页上构建下拉框的代码,使其仅包含四个项目的列表,我不确定实现此目的所需的语法,但希望你们能帮助。

        using (CoreBusinessLayerProxy proxy = CoreBusinessLayerProxy.CreateCoreBusinessLayerProxy(BusinessLayerExceptionHandler))
        {
            eventTypesTable = proxy.GetEventTypesTable();
        }
        eventTypes.Items.Add(new ListItem(Resources.CoreWebContent.WEBCODE_VB0_201, "All events"));
        EventTypes.Add("All events", 0);
        foreach (DataRow r in eventTypesTable.Rows)
        {
            eventTypes.Items.Add(r["Name"].ToString());
            try
            {
                EventTypes.Add(r["Name"].ToString(), Int32.Parse(r["EventType"].ToString()));
            }
            catch { }
        }

我正在尝试修改上述内容,以便不是从eventTypeTable.Rows 添加所有DataRow,而是仅添加一组四个硬编码值,我怀疑我需要在@987654324 期间传递这些值@ 但我终其一生都无法在循环中思考应该在何处或何时执行此操作。

(处理未注释代码的乐趣)

谢谢!

【问题讨论】:

  • 所以eventTypesTable DataTableeventTypesDropDownList(?) 而EventTypes 是...什么?顺便说一句,永远不要这样做catch { }.
  • "它只添加了一组四个硬编码值" 但我认为这是需要的,因为 "所以它包含一个只有四个项目的列表"。抱歉,这个问题不太清楚。
  • 如果不清楚,我很抱歉,我自己正在考虑这一切。我将尝试下面的解决方案,看看是否可行,否则我会尽力澄清

标签: c# arrays loops filter


【解决方案1】:

这是基于名称字段的基本方法。如果名称不是“allow1”、“allow2”、“allow3”或“allow4”之一,那么它将continue。这将移动到 foreach 循环中的下一次迭代,而不执行当前语句块的其余部分。

    foreach (DataRow r in eventTypesTable.Rows)
    {
        string name = r["Name"].ToString();         
        if ( name != "allow1" && name != "allow2" && name != "allow3" && name != "allow4" )
            continue;

        eventTypes.Items.Add(r["Name"].ToString());
        try
        {
            EventTypes.Add(r["Name"].ToString(), Int32.Parse(r["EventType"].ToString()));
        }
        catch { }
    }

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 2018-03-29
    • 2011-11-16
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多