Chcę, aby pojedyncza klasa generyczna mogła akceptować typy referencyjne lub wartościowe i wykonywać tylko działanie oparte na teście równości. rozważyć następujące kwestie:Ogólne ograniczenia: Czy mogę przetestować równość generycznego, który może być typem odniesienia lub wartością?
public class Property<TProp>
where TProp : struct, IEquatable<TProp>
{
public TProp Value;
public void SetValue(ObservableObject owner, TProp value)
{
if (!Value.Equals(value)) // cannot use != on struct constrained TProp
{
// ... set the property
}
}
}
public class ByRefProperty<TProp>
where TProp : class // Dont want to require IEquatable<> on reference type TProp
{
public TProp Value;
public void SetValue(ObservableObject owner, TProp value)
{
if (Value != value)
{
// ... set the property
}
}
}
mam użyć generycznych ograniczenia i dwie klasy, aby móc przetestować typ wartości równości vs równości typu odniesienia. Czy jest jakiś sposób obejścia tego, że skończę z jedną klasą?
Nie chcę szczególnie rozwiązania, które obejmuje typy wartości bokserskich, użycie odbicia lub generowanie IL w czasie wykonywania. Czy istnieje proste rozwiązanie, którego tu nie mam?
Czy użyje to dowolnej niestandardowej logiki równającej zdefiniowanej w implementacji 'IEquatable'? –
@Justin, tak to robi, jeśli typ go implementuje. –
@Jon - Dowiedz się czegoś nowego każdego dnia ... jeszcze raz. –