//set the value of a parameter
        public static void SetParameterValue(ref RevitLibrary.Parameter p, object value)
        {
            try
            {
                if (value.GetType().Equals(typeof(string)))
                {
                    if (p.SetValueString(value as string))
                    {
                        return;
                    }
                }

                switch (p.StorageType)
                {
                case StorageType.None:
                    break;

                case StorageType.Double:
                    if (value.GetType().Equals(typeof(string)))
                    {
                        p.Set(double.Parse(value as string));
                    }
                    else
                    {
                        p.Set(Convert.ToDouble(value));
                    }
                    break;

                case StorageType.Integer:
                    if (value.GetType().Equals(typeof(string)))
                    {
                        p.Set(int.Parse(value as string));
                    }
                    else
                    {
                        p.Set(Convert.ToInt32(value));
                    }
                    break;

                case StorageType.ElementId:
                    if (value.GetType().Equals(typeof(ElementId)))
                    {
                        p.Set(value as ElementId);
                    }
                    else if (value.GetType().Equals(typeof(string)))
                    {
                        p.Set(new ElementId(int.Parse(value as string)));
                    }
                    else
                    {
                        p.Set(new ElementId(Convert.ToInt32(value)));
                    }
                    break;

                case StorageType.String:
                    p.Set(value.ToString());
                    break;
                }
            }
            catch
            {
                throw new Exception("Invalid Value Input!");
            }
        }
        private void AddValueToRevit(Element element, Fields fields, List <string> validFields)
        {
            string paramName = "";

            try
            {
                foreach (string paramId in validFields)
                {
                    bool   isDouble = false;
                    string strValue = "";
                    double dblValue = 0;

                    if (paramIdMap.ContainsKey(paramId))
                    {
                        paramName = paramIdMap[paramId];
                    }
                    else
                    {
                        continue;
                    }

                    Field field = fields[paramId];
                    if (Convert.IsDBNull(field.Value))
                    {
                        continue;
                    }

                    if (field.Type == 7)
                    {
                        isDouble = true;
                        dblValue = field.Value;
                        if (decimalPlaces.ContainsKey(field.Name))
                        {
                            dblValue = Math.Round(dblValue, decimalPlaces[field.Name]);
                        }
                    }
                    else
                    {
                        isDouble = false; strValue = field.Value;
                    }

                    if (strValue == "NULL" || strValue == string.Empty)
                    {
                        continue;
                    }

#if RELEASE2013 || RELEASE2014
                    Autodesk.Revit.DB.Parameter parameter = element.get_Parameter(paramName);
#elif RELEASE2015 || RELEASE2016 || RELEASE2017 || RELEASE2018
                    Autodesk.Revit.DB.Parameter parameter = element.LookupParameter(paramName);
#endif

                    if (null != parameter && !parameter.IsReadOnly)
                    {
                        switch (parameter.StorageType)
                        {
                        case StorageType.Double:
                            if (isDouble)
                            {
                                parameter.Set(dblValue);
                            }
                            else
                            {
                                parameter.SetValueString(strValue);
                            }
                            //double dblVal = 0;
                            //double.TryParse(value, out dblVal);
                            //parameter.Set(dblVal);
                            break;

                        case StorageType.Integer:
                            int intVal = 0;
                            int.TryParse(strValue, out intVal);
                            parameter.Set(intVal);
                            break;

                        case StorageType.ElementId:
                            //ElementId eId = new ElementId(int.Parse(value));
                            //if (null != eId) { parameter.Set(eId); }
                            break;

                        case StorageType.String:
                            parameter.Set(strValue);
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to Add Value into a FamilyInstance (Parameter Name: " + paramName + ")" + ex.Message, "SynchronizeToRevit Error:", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }