Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这里有一个棘手的问题-尝试通过一个循环,只返回与另一个循环相等的值_C#_Loops_If Statement - Fatal编程技术网

C# 这里有一个棘手的问题-尝试通过一个循环,只返回与另一个循环相等的值

C# 这里有一个棘手的问题-尝试通过一个循环,只返回与另一个循环相等的值,c#,loops,if-statement,C#,Loops,If Statement,基本上我这里有个问题 我有一个循环,其中有一个网站列表,我要通过每个网站 我有另一个循环,它只包含一些站点 我只想返回属性t.title==F.title的站点 如果这是真的,我想勾选一个复选框 如果没有,则不要勾选复选框 问题是,它一直在创建比我想要的更多的复选框,我只想要那些勾选了匹配项的复选框——其余的不勾选 foreach (Admin.DTO.SiteMap t in sites) { for each (Admin.DTO

基本上我这里有个问题

  • 我有一个循环,其中有一个网站列表,我要通过每个网站
  • 我有另一个循环,它只包含一些站点
  • 我只想返回属性t.title==F.title的站点
  • 如果这是真的,我想勾选一个复选框
  • 如果没有,则不要勾选复选框
问题是,它一直在创建比我想要的更多的复选框,我只想要那些勾选了匹配项的复选框——其余的不勾选

        foreach (Admin.DTO.SiteMap t in sites)
        {

            for each (Admin.DTO.SmallSites f in smallsites){

            if (t.Title == f.Title)
            {
                myString1.Append(" <input type='checkbox'  checked='yes' value='"     +           t.Title + "'/> ");
                myString1.Append(t.Title);
            }
            else {

                myString1.Append(" <input type='checkbox'  value='" + t.Title +        "'/> ");
                myString1.Append(t.Title);
            }

              } 
        }
foreach(站点中的Admin.DTO.SiteMap t)
{
对于每个(在SmallSites中的Admin.DTO.SmallSites f){
如果(t.Title==f.Title)
{
myString1.Append(“”);
myString1.Append(t.Title);
}
否则{
myString1.Append(“”);
myString1.Append(t.Title);
}
} 
}

如果您不想显示未选中的框,请删除else子句。

Calibre-您的逻辑存在上述缺陷

基本上,每次循环第二个循环时,都会重置每个复选框,因此在前一个循环中设置的内容可能会被取消设置(反之亦然)。如上所述,删除else部分(或在单独的语句中预先初始化值)

[编辑]-更新示例:

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication2
{
    internal class Site
    {
        public string Title { get; set; }
        public string OtherStuff { get; set; }
        // don't know your site sturcture but this might help
    }
    class Program
    {
        static void Main(string[] args)
        {
            var siteMap =
                new List<Site>
                  {
                      new Site {OtherStuff = "bla1", Title = "Title 1"},
                      new Site {OtherStuff = "bla2", Title = "Title 2"},
                      new Site {OtherStuff = "bla3", Title = "Title 3"},
                      new Site {OtherStuff = "bla4", Title = "Title 4"},
                      new Site {OtherStuff = "bla5", Title = "Title 5"}
                  };
            var smallSites =
                new List<Site>
                  {
                      new Site {OtherStuff = "bla1", Title = "Title 1"},
                      new Site {OtherStuff = "bla2", Title = "Another title 2"},
                      new Site {OtherStuff = "bla3", Title = "Another title 3"},
                      new Site {OtherStuff = "bla4", Title = "Title 4"},
                      new Site {OtherStuff = "bla5", Title = "Another title 5"}
                  };

            // group all the matching titles to be checkboxed
            var query = (siteMap.Select(sm => 
                new {
                      sm.Title,
                      SmallSites = smallSites.Where(ss => ss.Title == sm.Title)
                  }));

            // get any items that don't match
            IEnumerable<Site> query2 =
                smallSites.Where(ss => !(siteMap.Select(sm => sm.Title))
                                           .Contains(ss.Title));

            string myString1 = "";
            // this is our checkbox items, do those 1st
            foreach (var item in query)
            {
                if (item.SmallSites.Any())
                {
                    foreach (var smallSite in item.SmallSites)
                    {
                        myString1 += string.Format("<input type='checkbox'  checked='yes' value='{0}'", smallSite.Title) + Environment.NewLine;
                    }
                }
            }

            // now throw down our non-checked items
            foreach (var smallSite in query2)
            {
                myString1 += string.Format("<input type='checkbox' value='{0}'", smallSite.Title) + Environment.NewLine;
            }
            Console.Write(myString1);
            Console.Read();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
命名空间控制台应用程序2
{
内部类站点
{
公共字符串标题{get;set;}
公共字符串OtherStuff{get;set;}
//不知道你的网站结构,但这可能会有所帮助
}
班级计划
{
静态void Main(字符串[]参数)
{
var站点地图=
新名单
{
新站点{OtherStuff=“bla1”,Title=“Title 1”},
新站点{OtherStuff=“bla2”,Title=“Title 2”},
新站点{OtherStuff=“bla3”,Title=“Title 3”},
新站点{OtherStuff=“bla4”,Title=“Title 4”},
新站点{OtherStuff=“bla5”,Title=“Title 5”}
};
var小型站点=
新名单
{
新站点{OtherStuff=“bla1”,Title=“Title 1”},
新站点{OtherStuff=“bla2”,Title=“另一个Title 2”},
新站点{OtherStuff=“bla3”,Title=“另一个Title 3”},
新站点{OtherStuff=“bla4”,Title=“Title 4”},
新站点{OtherStuff=“bla5”,Title=“另一个Title 5”}
};
//将要选中的所有匹配标题分组
var query=(siteMap.Select(sm=>
新的{
sm.头衔,
SmallSites=SmallSites.Where(ss=>ss.Title==sm.Title)
}));
//获取任何不匹配的项目
IEnumerable查询2=
smallSites.Where(ss=>!(siteMap.Select(sm=>sm.Title))
.包含(ss.标题));
字符串myString1=“”;
//这是我们的复选框项目,先做这些
foreach(查询中的var项)
{
if(item.SmallSites.Any())
{
foreach(项目中的变量smallSite.SmallSites)
{

myString1+=string.Format(“这两个循环将创建sites*smallsites复选框。选中其中一个复选框后,许多复选框将不在其余复选框中被选中。

这是你需要的吗

foreach (Admin.DTO.SiteMap t in sites)
    {
        flg = false;
        for each (Admin.DTO.SmallSites f in smallsites)
            if (t.Title == f.Title) flg = true;
        if (flg)
        {
            myString1.Append(" <input type='checkbox'  checked='yes' value='"     +           t.Title + "'/> ");
            myString1.Append(t.Title);
        }
        else {

            myString1.Append(" <input type='checkbox'  value='" + t.Title +        "'/> ");
            myString1.Append(t.Title);
        }
    }
foreach(站点中的Admin.DTO.SiteMap t)
{
flg=假;
对于每个(在SmallSites中的Admin.DTO.SmallSites f)
如果(t.Title==f.Title)flg=true;
如果(flg)
{
myString1.Append(“”);
myString1.Append(t.Title);
}
否则{
myString1.Append(“”);
myString1.Append(t.Title);
}
}

您的代码将打印出
小型站点的内容
n次-其中n是
站点
中的项目数。每次打印出
小型站点
,它可能会选中其中一个框


我猜您希望保持外部循环不变,但只需检查站点是否包含在
smallsites
中。pinichi的响应将产生正确的输出,但可能效率很低。如果不知道
SiteMap
smallsites
的结构,我无法提出更好的方法。

Iant显示未选中框虽然我想同时显示选中框和未选中框,但这取决于if语句是否相等,我将如何预先初始化这些值?c-我已经用一个快速示例更新了我的答案,说明了如何解决这个问题