Hi,
I am working on a macro for 2015+ that will move families to the appropriate workset. The routine builds but i am unable to get it to build.

Code:
public void Shared_LEVELWS()
		{
		   Document doc = this.ActiveUIDocument.Document;
		 	if(doc.IsWorkshared==false)
			{
		 		TaskDialog.Show("Worksets", "Document is not workshared");
		   	}
		 	if(doc.IsWorkshared==true)
		 	{
		 	//Select the shared grid workset
		   IList<Workset> worksetList = new FilteredWorksetCollector(doc).OfKind(WorksetKind.UserWorkset).ToWorksets();
		   int sharedGridWorksetId=0;
		 
		   foreach (Workset workset in worksetList) 
		   {
		      if (workset.Name.Contains("Shared Levels and Grids"))
		      	{
		         sharedGridWorksetId = workset.Id.IntegerValue;
	   			}
		   }
		   //Reference planes
		   List<Element> elements = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_CLines).ToElements().ToList();
			//Grids
		   List<Element> grids = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Grids).ToElements().ToList();
		   //Scope box
		   List<Element> scopeBoxes = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_VolumeOfInterest).ToElements().ToList();
		   //Level
		   List<Element> levels = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).ToElements().ToList();
		
		   elements.AddRange(grids);
		   elements.AddRange(scopeBoxes);
		   elements.AddRange(levels);
		 if (elements == null)
			return;
		 
		   using (Transaction tx = new Transaction(doc,"Change Workset"))
		   {
		   	tx.Start();

		      foreach (Element e in elements) 
		      {
		    
		      	Parameter wsparam =e.get_Parameter(BuiltInParameter.ELEM_PARTITION_PARAM);
				
		         //set workset to Shared Levels and Grids
		         wsparam.Set(sharedGridWorksetId);
		      }
		      tx.Commit();
		   }
		 	}
		}
Any help would be greatly appreciated.