# MetadataCollection

> Holds the metadata items attached to a single localization target.

## Definition

* **Type:** Class
* **Namespace:** [Unity.Localization](/engine/6000.7/script-reference/unity/localization.md)
* **Assembly:** UnityEngine.LocalizationRuntimeModule

```csharp
public class MetadataCollection
```

## Remarks

A collection is present on entries, shared keys, tables, and the shared data, so authors can attach comments and custom properties (for example excluding an entry from export). Items are stored by reference, so any [IMetadata](/engine/6000.7/script-reference/unity/localization/imetadata.md) implementation keeps its own serialized fields. Query items by type with [MetadataCollection.GetMetadata](/engine/6000.7/script-reference/unity/localization/metadatacollection/getmetadata.md), [MetadataCollection.GetMetadatas](/engine/6000.7/script-reference/unity/localization/metadatacollection/getmetadatas.md), and [MetadataCollection.Contains](/engine/6000.7/script-reference/unity/localization/metadatacollection/contains.md), and change the contents with [MetadataCollection.AddMetadata](/engine/6000.7/script-reference/unity/localization/metadatacollection/addmetadata.md) and [MetadataCollection.RemoveMetadata](/engine/6000.7/script-reference/unity/localization/metadatacollection/removemetadata.md).

Additional Resources: [IMetadata](/engine/6000.7/script-reference/unity/localization/imetadata.md), [Comment](/engine/6000.7/script-reference/unity/localization/comment.md), [ExcludeEntryFromEditorExport](/engine/6000.7/script-reference/unity/localization/excludeentryfromeditorexport.md), [SharedTableData](/engine/6000.7/script-reference/unity/localization/sharedtabledata.md)

Add a comment to a collection, then read it back by type.

## Examples

```csharp
using Unity.Localization;
using UnityEngine;

namespace Unity.Localization.Samples
{
    public class MetadataCollectionOverviewExample
    {
        public void Run()
        {
            var metadata = new MetadataCollection();
            metadata.AddMetadata(new Comment { CommentText = "Shown on the main menu." });

            if (metadata.Contains<Comment>())
                Debug.Log(metadata.GetMetadata<Comment>().CommentText);
        }
    }
}
```

## Properties

| Property                                                                                    | Description                            |
| ------------------------------------------------------------------------------------------- | -------------------------------------- |
| [Entries](/engine/6000.7/script-reference/unity/localization/metadatacollection/entries.md) | The metadata items in this collection. |
| [HasData](/engine/6000.7/script-reference/unity/localization/metadatacollection/hasdata.md) | Whether any metadata is present.       |

## Methods

| Method                                                                                                    | Description                                                  |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| [AddMetadata](/engine/6000.7/script-reference/unity/localization/metadatacollection/addmetadata.md)       | Adds a metadata item to the collection.                      |
| [Contains](/engine/6000.7/script-reference/unity/localization/metadatacollection/contains.md)             | Checks whether a metadata item of the given type is present. |
| [GetMetadata](/engine/6000.7/script-reference/unity/localization/metadatacollection/getmetadata.md)       | Returns the first metadata item of the given type.           |
| [GetMetadatas](/engine/6000.7/script-reference/unity/localization/metadatacollection/getmetadatas.md)     | Enumerates every metadata item of the given type.            |
| [RemoveMetadata](/engine/6000.7/script-reference/unity/localization/metadatacollection/removemetadata.md) | Removes a specific metadata item from the collection.        |
