# TypeTraits<T>

> Helper class to avoid paying the cost of runtime type lookups. This is also used to abstract underlying type info in the runtime (e.g. RuntimeTypeHandle vs StaticTypeReg)

## Definition

* **Type:** Class
* **Namespace:** [Unity.Properties](/engine/6000.7/script-reference/unity/properties.md)
* **Assembly:** UnityEngine.PropertiesModule

```csharp
public static class TypeTraits<T>
```

## Static Properties

| Property                                                                                                           | Description                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| [CanBeNull](/engine/6000.7/script-reference/unity/properties/typetraits1/canbenull.md)                             | Gets a value indicating whether `T` can be null. i.e. The type is an object or nullable.                                                  |
| [IsAbstract](/engine/6000.7/script-reference/unity/properties/typetraits1/isabstract.md)                           | Gets a value indicating whether `T` is an abstract type.                                                                                  |
| [IsAbstractOrInterface](/engine/6000.7/script-reference/unity/properties/typetraits1/isabstractorinterface.md)     | Gets a value indicating whether `T` is an abstract or interface type.                                                                     |
| [IsArray](/engine/6000.7/script-reference/unity/properties/typetraits1/isarray.md)                                 | Gets a value indicating whether `T` is an array type.                                                                                     |
| [IsContainer](/engine/6000.7/script-reference/unity/properties/typetraits1/iscontainer.md)                         | Gets a value indicating whether `T` is a property container type.                                                                         |
| [IsEnum](/engine/6000.7/script-reference/unity/properties/typetraits1/isenum.md)                                   | Gets a value indicating whether `T` is an enum type.                                                                                      |
| [IsEnumFlags](/engine/6000.7/script-reference/unity/properties/typetraits1/isenumflags.md)                         | Gets a value indicating whether `T` is an flags enum type.                                                                                |
| [IsInterface](/engine/6000.7/script-reference/unity/properties/typetraits1/isinterface.md)                         | Gets a value indicating whether `T` is an interface type.                                                                                 |
| [IsLazyLoadReference](/engine/6000.7/script-reference/unity/properties/typetraits1/islazyloadreference.md)         | Gets a value indicating whether `T` is a [LazyLoadReference\<T>](/engine/6000.7/script-reference/unityengine/lazyloadreference1.md) type. |
| [IsMultidimensionalArray](/engine/6000.7/script-reference/unity/properties/typetraits1/ismultidimensionalarray.md) | Gets a value indicating whether `T` is a multidimensional array type.                                                                     |
| [IsNullable](/engine/6000.7/script-reference/unity/properties/typetraits1/isnullable.md)                           | Gets a value indicating whether `T` is a nullable type.                                                                                   |
| [IsObject](/engine/6000.7/script-reference/unity/properties/typetraits1/isobject.md)                               | Gets a value indicating whether `T` is [Object](/engine/6000.7/script-reference/unityengine/object.md) type.                              |
| [IsPrimitive](/engine/6000.7/script-reference/unity/properties/typetraits1/isprimitive.md)                         | Gets a value indicating whether `T` is a primitive type.                                                                                  |
| [IsPrimitiveOrString](/engine/6000.7/script-reference/unity/properties/typetraits1/isprimitiveorstring.md)         | Gets a value indicating whether `T` is a primitive or string type.                                                                        |
| [IsString](/engine/6000.7/script-reference/unity/properties/typetraits1/isstring.md)                               | Gets a value indicating whether `T` is string type.                                                                                       |
| [IsUnityObject](/engine/6000.7/script-reference/unity/properties/typetraits1/isunityobject.md)                     | Gets a value indicating whether `T` is a [Object](/engine/6000.7/script-reference/unityengine/object.md) type.                            |
| [IsValueType](/engine/6000.7/script-reference/unity/properties/typetraits1/isvaluetype.md)                         | Gets a value indicating whether `T` is a value type.                                                                                      |
