Я постараюсь быть максимально простым:
Это то, что вы делаете:
if ( <intValue>.CompareTo(<IData object>) == 0 )
{ (...) }
Это то, что вам нужно:
if ( <intValue>.CompareTo(<int value>) == 0 )
{ (...) }
Теперь вот как вы можете это сделать (очень упрощенно):
public bool EqualsTo(IData otherData)
{
if(_data.CompareTo(otherData._data) == 0)
return true;
return false;
}
Это еще один способ добиться того же (который я бы использовал для вашегосценарий):
public interface IData : IEquatable<IData> { }
public class IntegerData : IData
{
// The value will be private for this example
// Could be public int Value { get; private set; }
private int Value { get; set; }
// Constructor
public IntegerData(int value) { Value = value; }
// Implements Equals (from IEquatable - IData)
public bool Equals(IData other)
{ return Value.Equals(other.Value); }
}
И это еще одно решение для той же задачи:
- Помните, что это большее решение длянесколько маленькая проблема.Это может привести к большим классам и большим проблемам, поэтому используйте его, только если вам это нужно.Будь простымДержись просто.Не вдавайтесь во что-то слишком сложное, потому что вам придется поддерживать этот код с течением времени ...
- Также имейте в виду, что я использовал метод GetHashCode по умолчанию.Иногда этого достаточно, но имейте в виду, что вам может потребоваться создать / использовать собственный алгоритм хеширования в зависимости от ваших потребностей.
- Наконец, подумайте, что это всего лишь пример.Я создал интерфейс на основе ответа Гейба, но добавил метод только для самого хэша.Возможно, вы захотите удалить или улучшить.Учитывайте ваши потребности.
// An interface that is based on IEquatable for better compatibility but also
// enables you to create a diferent EqualsTo method...
public interface IData<T> : IEquatable<T>
{
T GetData();
int GetDataHash();
bool EqualsTo(IData<T> other);
}
// One class (string)
public class StringData : IData<string>
{
private string Value { get; set; }
public StringData(string value) { Value = value; }
public string GetData() { return Value; }
public int GetDataHash() { return GetData().GetHashCode(); }
// From IEquatable
public bool Equals(string other)
{ return Value.Equals(other); }
// From IData (customized to compare the hash from raw value)
public bool EqualsTo(IData<string> other)
{ return GetDataHash() == other.GetDataHash(); }
}
// Another class (int)
public class IntData : IData<int>
{
private int Value { get; set; }
public IntData(int value) { Value = value; }
public int GetData() { return Value; }
public int GetDataHash() { return GetData().GetHashCode(); }
// Again from IEquatable
public bool Equals(int other)
{ return Value == other; }
// Again from IData (customized to compare just the hash code)
public bool EqualsTo(IData<int> other)
{ return GetDataHash() == other.GetDataHash(); }
}