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

RealmInteger - .NET SDK

O Realm oferece RealmInteger como um tipo inteiro especial que você pode usar como contador lógico. RealmInteger<T> expõe uma API adicional que pode Express a intenção com mais clareza e gerar melhores etapas de resolução de conflitos ao usar os Realms sincronizados. O argumento de tipo <T> pode ser do tipo byte, short, int ou long. O exemplo seguinte mostra como utilizar uma propriedade RealmInteger que mapeia para um int:

public partial class MyRealmClass : IRealmObject
{
[PrimaryKey]
public int _id { get; set; }
public RealmInteger<int> Counter { get; set; }
}

Tradicionalmente, você implementaria um contador lendo um valor, incrementando-o e, em seguida, definindo-o (myObject.Counter += 1). Isso não funciona bem em uma situação assíncrona, como quando dois clientes estão offline. Considere o seguinte cenário:

  • O Objeto de Realm tem uma propriedade counter do tipo int. Atualmente, está definido para um valor de 10.

  • Os clientes 1 e 2 leem a propriedade counter (10) e cada um incrementa o valor em 1.

  • Quando cada cliente recupera a conectividade e mescla suas alterações, eles esperam um valor de 11 e não há conflito. No entanto, o valor do contador deve ser 12!

No entanto, ao usar um RealmInteger, você pode chamar os métodos Increment() e Decrement() e, para redefinir o contador, defina-o como 0, da mesma forma que faria com um int:

var myObject = realm.Find<MyRealmClass>(id);
// myObject.Counter == 0
realm.Write(() =>
{
// Increment the value of the RealmInteger
myObject.Counter.Increment(); // 1
myObject.Counter.Increment(5); // 6
// Decrement the value of the RealmInteger
// Note the use of Increment with a negative number
myObject.Counter.Decrement(); // 5
myObject.Counter.Increment(-3); // 2
// Reset the RealmInteger
myObject.Counter = 0;
// RealmInteger<T> is implicitly convertable to T:
int bar = myObject.Counter;
});

Importante

Ao redefinir um RealmInteger, você pode encontrar o problema de mesclagem offline descrito acima.

Um RealmInteger é apoiado pelo tipo integer tradicional, portanto, não é necessária nenhuma migração de esquema ao alterar um tipo de propriedade de T para RealmInteger<T>.

Voltar

RealmValue

Nesta página