Menu Docs
Página inicial do Docs
/ /
Tipos de dados suportados

Conjuntos - .NET SDK

Novidades na versão 10.2.0.

Um conjunto de Realm , como o C# HashSet<>, é uma implementação de ICollection <> e IEnumerable <>. Ele suporta valores de qualquer tipo de Realm , exceto coleções. Para definir um conjunto, utilize uma ISet<TValue> propriedade somente para iniciar, onde TValue é qualquer um dos tipos suportados.

Excluir um objeto do reconhecimento de data center o removerá de todos os conjuntos em que ele estava presente. Portanto, um conjunto de objetos nunca conterá objetos nulos. No entanto, conjuntos de tipos primitivos podem conter valores nulos. Se você não quiser permitir valores nulos em um conjunto, use tipos não anuláveis na declaração do conjunto (por exemplo, use ISet<double> em vez de ISet<double?>). Se você estiver usando a definição do tipo de esquema mais antigo (suas classes derivam da classe base do RealmObject ) ou você não tiver a anulabilidade habilitada, você precisará usar o atributo [Required] se o conjunto contiver tipos de referência anuláveis, como string ou byte[].

Importante

Não suportado com a sincronização

Os domínios somente locais oferecem suporte a collections de valores anuláveis (opcional), mas o Sync não.

O seguinte código mostra exemplos de tipos de conjunto:

public partial class Inventory : IRealmObject
{
// A Set can contain any Realm-supported type, including
// objects that inherit from RealmObject
public ISet<Plant> PlantSet { get; }
public ISet<double> DoubleSet { get; }
// Nullable types are supported in local-only
// Realms, but not with Sync
public ISet<int?> NullableIntsSet { get; }
public ISet<string> RequiredStrings { get; }
}

O código a seguir mostra como criar, gravar e ler a partir de Conjuntos.

var inventory = new Inventory();
inventory.PlantSet.Add(new Plant() { Name = "Prickly Pear" });
inventory.DoubleSet.Add(123.45);
realm.Write(() =>
{
realm.Add<Inventory>(inventory);
});
// convert the Plant Set to an IQueryable and apply a filter
var pricklyPear = inventory.PlantSet.AsRealmQueryable()
.Where(p => p.Name == "Prickly Pear");
// Alternatively, apply a filter directly on the Plant Set
var pricklyPearPlants = inventory.PlantSet
.Filter("Name == 'Prickly Pear'");
// Find all Inventory items that have at least one value in their
// DoubleSet that is larger than 5
var moreThan100 = realm.All<Inventory>()
.Filter("DoubleSet.@values > 100");

Você pode usar o evento INotifyCollectionChanged.CollectionChanged em um conjunto para observar as alterações no conjunto, e o evento INotifyPropertyChanged.PropertyChanged para observar as alterações em propriedades específicas do conjunto.

No seguinte exemplo de código, temos uma classe com uma propriedade ISet<string> denominada StringSet. Criamos manipuladores de eventos para os eventos CollectionChanged e PropertyChanged:

var stringSet = container.StringSet.AsRealmCollection();
stringSet.CollectionChanged += (sender, e) =>
{
Console.WriteLine($"Set {sender} changed: {e.Action}");
};
stringSet.PropertyChanged += (sender, e) =>
{
Console.WriteLine($"Property changed on {sender}: {e.PropertyName}");
};

Voltar

Dicionários

Nesta página