Utilizzo dei Generics per un FilteredElementCollector universale

Scenario

Quando scriviamo un componente per le RevitAPI capita spesso di dover selezionare da un documento tutti gli elementi di un certo tipo, o eventualmente un sottoinsieme di questi – senza dover passare per un PickBox.

Utilizzo dei Generics per una soluzione universale

Essendomi trovato in moltissimi casi ad affrontare la selezione di elementi di un certo tipo non conosciuto, ho scritto una piccola classe che consente di selezionare tutti le istanze di un certo tipo rapidamente. La classe fornisce accesso ad un solo metodo statico.

	public static class ElementsOfType<T> where T : Element
	{
		public static List<T> GetElements(Document doc, BuiltInCategory category) 
		{
			FilteredElementCollector collector = new FilteredElementCollector(doc);
			ElementCategoryFilter filter = new ElementCategoryFilter(category);
			IList<Element> elements = collector.WherePasses(filter).ToElements();
			List<T> passes = new List<T>();
			foreach (Element element in elements)
			{
				if (element is T)
				{
					passes.Add(element as T);
				}
			}
			return passes;
		}
	}

Questo è proprio uno di quei casi in cui è utilissimo ottimizzare il codice tramite Generics 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *