<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Метод Intersect в плагине C# не работает. Подскажите, почему? - АВТОМАТИЗАЦИЯ				            </title>
            <link>https://forum.bim2b.ru/api/metod-intersect-v-plagine-c-ne-rabotaet-podskazhite-pochemu/</link>
            <description></description>
            <language>ru-RU</language>
            <lastBuildDate>Tue, 07 Apr 2026 13:19:43 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>Ответ на: Метод Intersect в плагине C# не работает. Подскажите, почему?</title>
                        <link>https://forum.bim2b.ru/api/metod-intersect-v-plagine-c-ne-rabotaet-podskazhite-pochemu/#post-1592</link>
                        <pubDate>Fri, 08 Sep 2023 07:22:23 +0000</pubDate>
                        <description><![CDATA[Вобщем, оказалось, что &quot;Intersect для корректной работы требуется чтобы в типе были переопределены методы Equals, GetHashCode. Класс Element этого не делает. Значит, нужно создать класс реал...]]></description>
                        <content:encoded><![CDATA[<p><span>Вобщем, оказалось, что "Intersect для корректной работы требуется чтобы в типе были переопределены методы Equals, GetHashCode. Класс Element этого не делает. Значит, нужно создать класс реализующий IEqualityComparer&lt;Element&gt; и передать его в метод Intersect".</span></p>
<p>Сделал, как подсказали, и заработало! </p>
<pre contenteditable="false">using Autodesk.Revit.DB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ME.Functions
{
public class ElementEqualityComparer : IEqualityComparer&lt;Element&gt;
{
public bool Equals(Element x, Element y)
{
if (ReferenceEquals(x, y))
return true;
if (x is null || y is null)
return false;
return x.Id == y.Id;
}

public int GetHashCode(Element obj)
{
return obj.Id.GetHashCode();
}
}
}
...

rebars = rebarAlls.Intersect(selects, new ElementEqualityComparer()).ToList()</pre>
<p> </p>]]></content:encoded>
						                            <category domain="https://forum.bim2b.ru/api/">АВТОМАТИЗАЦИЯ</category>                        <dc:creator>Alexandr</dc:creator>
                        <guid isPermaLink="true">https://forum.bim2b.ru/api/metod-intersect-v-plagine-c-ne-rabotaet-podskazhite-pochemu/#post-1592</guid>
                    </item>
				                    <item>
                        <title>Метод Intersect в плагине C# не работает. Подскажите, почему?</title>
                        <link>https://forum.bim2b.ru/api/metod-intersect-v-plagine-c-ne-rabotaet-podskazhite-pochemu/#post-1589</link>
                        <pubDate>Mon, 04 Sep 2023 16:17:25 +0000</pubDate>
                        <description><![CDATA[Вобщем, в &quot;selects&quot; - текущий выбор юзера. В &quot;rebarAlls&quot; - коллекция арматурных стержней, отфильтрованных по определенным параметрам. Обе коллекции содержат элементы, проверил по id - пересе...]]></description>
                        <content:encoded><![CDATA[<p>Вобщем, в "selects" - текущий выбор юзера. В "rebarAlls" - коллекция арматурных стержней, отфильтрованных по определенным параметрам. Обе коллекции содержат элементы, проверил по id - пересекающиеся элементы есть. Отчего жеж итоговое rebars.count у меня всегда получается ноль? : ) </p>
<pre contenteditable="false">UIDocument uidoc = cmdData.Application.ActiveUIDocument;
IList&lt;Element&gt; selects = uidoc.Selection.GetElementIds().Select(x =&gt; doc.GetElement(x)).ToList();
IList&lt;Element&gt; rebarAlls = GetRebarElements(doc);
string str1="";
foreach (Element element in selects)
{
ElementId id = element.Id;
str1 = str1 + id.ToString() + "\n";
}
str1 = str1 + "\n" + "\n";
foreach (Element element in rebarAlls)
{
ElementId id = element.Id;
str1 = str1 + id.ToString() + "\n";
}
rebars = selects.Intersect(rebarAlls).ToList();
TaskDialog.Show("RebarSketch", str1);</pre>]]></content:encoded>
						                            <category domain="https://forum.bim2b.ru/api/">АВТОМАТИЗАЦИЯ</category>                        <dc:creator>Alexandr</dc:creator>
                        <guid isPermaLink="true">https://forum.bim2b.ru/api/metod-intersect-v-plagine-c-ne-rabotaet-podskazhite-pochemu/#post-1589</guid>
                    </item>
							        </channel>
        </rss>
		