Not all Revit objects expose their data as typed C# properties. Many elements — especially those that descend from FamilyInstance (doors, windows, furniture) — store their values in the generic parameter collection accessed through element.get_Parameter(BuiltInParameter). The return type is always Parameter; use HasValue before reading to avoid null-reference errors, then extract the value with AsDouble(), AsString(), or AsElementId() depending on the parameter's storage type.
Common BuiltInParameter Examples
The examples below cover rooms, doors, and windows. All numeric values from Revit are in internal units (feet for lengths, square feet for areas). Use UnitUtils.ConvertFromInternalUnits to convert them to display units.
csharp
// --- Rooms ---
// Area (stored internally in square feet)
Parameter areaParam = element.get_Parameter(BuiltInParameter.ROOM_AREA);
double area = areaParam.HasValue ? areaParam.AsDouble() : 0;
// Perimeter
Parameter perimParam = element.get_Parameter(BuiltInParameter.ROOM_PERIMETER);
double perimeter = perimParam.HasValue ? perimParam.AsDouble() : 0;
// Phase — returns an ElementId; resolve it to a Phase object
Parameter phaseParam = room.get_Parameter(BuiltInParameter.ROOM_PHASE);
ElementId phaseId = phaseParam.HasValue ? phaseParam.AsElementId() : null;
Phase phase = phaseId != null ? document.GetElement(phaseId) as Phase : null;
// Number
Parameter numberParam = element.get_Parameter(BuiltInParameter.ROOM_NUMBER);
string roomNumber = numberParam.HasValue ? numberParam.AsString() : string.Empty;
// Occupancy
Parameter occupancyParam = element.get_Parameter(BuiltInParameter.ROOM_OCCUPANCY);
string occupancy = occupancyParam.HasValue ? occupancyParam.AsString() : string.Empty;
// Location (XYZ — not a BuiltInParameter; use room.Location directly)
LocationPoint locationPoint = room.Location as LocationPoint;
XYZ location = locationPoint?.Point;
// Name
// Note: room.Name also exists but includes the room number appended.
Parameter nameParam = element.get_Parameter(BuiltInParameter.ROOM_NAME);
string roomName = nameParam.HasValue ? nameParam.AsString() : string.Empty;
// Department
Parameter deptParam = element.get_Parameter(BuiltInParameter.ROOM_DEPARTMENT);
string department = deptParam.HasValue ? deptParam.AsString() : string.Empty;
// --- Doors ---
Parameter doorHeightParam = element.get_Parameter(BuiltInParameter.DOOR_HEIGHT);
double doorHeight = doorHeightParam.HasValue ? doorHeightParam.AsDouble() : 0;
Parameter doorWidthParam = element.get_Parameter(BuiltInParameter.DOOR_WIDTH);
double doorWidth = doorWidthParam.HasValue ? doorWidthParam.AsDouble() : 0;
Parameter doorMarkParam = element.get_Parameter(BuiltInParameter.DOOR_NUMBER);
string doorMark = doorMarkParam.HasValue ? doorMarkParam.AsString() : string.Empty;
// --- Windows ---
Parameter windowHeightParam = element.get_Parameter(BuiltInParameter.WINDOW_HEIGHT);
double windowHeight = windowHeightParam.HasValue ? windowHeightParam.AsDouble() : 0;
Parameter windowWidthParam = element.get_Parameter(BuiltInParameter.WINDOW_WIDTH);
double windowWidth = windowWidthParam.HasValue ? windowWidthParam.AsDouble() : 0;
// Windows share the same DOOR_NUMBER enum value as doors for the mark
Parameter windowMarkParam = element.get_Parameter(BuiltInParameter.DOOR_NUMBER);
string windowMark = windowMarkParam.HasValue ? windowMarkParam.AsString() : string.Empty;
// --- Any FamilyInstance ---
Parameter commentParam = element.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS);
string comment = commentParam.HasValue ? commentParam.AsString() : string.Empty;