Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Doing a CompareTo is giving an error Object must be of type int32
- public interface IData
- {
- bool EqualsTo(IData otherData);
- }
- public class IntegerData : IData
- {
- int _data;
- public IntegerData(int data)
- {
- _data = data;
- }
- public bool EqualsTo(IData otherData)
- {
- if(_data.CompareTo(otherData) == 0)
- return true;
- return false;
- }
- }
- if(_data.CompareTo(otherData) == 0)
- Object must of type int32
- IData FirstData = new IntegerData(5);
- IData FirstData = new SecondData(5);
- bool result = FirstData.Value.EqualsTo(SecondData.Value);
- 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); }
- }
- // 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(); }
- }
- if(_data.CompareTo(((IntegerData)otherData)._data) == 0)
- public interface IData<T>
- {
- bool EqualsTo(IData<T> otherData);
- }
- public class MyData<T> : IData<T>
- {
- private T _data;
- public MyData(T data)
- {
- _data = data;
- }
- public bool EqualsTo(IData<T> otherData)
- {
- if (_data is IComparable
- && otherData is MyData<T>
- && ((IComparable)_data).CompareTo(((MyData<T>)otherData)._data) == 0)
- {
- return true;
- }
- return false;
- }
- }
- static void Main(string[] args)
- {
- MyData<int> myInts1 = new MyData<int>(5);
- MyData<int> myInts2 = new MyData<int>(5);
- MyData<int> myInts3 = new MyData<int>(10);
- MyData<string> myString1 = new MyData<string>("Hello");
- MyData<string> myString2 = new MyData<string>("Hello");
- MyData<string> myString3 = new MyData<string>("World");
- if (myInts1.EqualsTo(myInts2)) Console.WriteLine("Yay");
- if (!myInts1.EqualsTo(myInts3)) Console.WriteLine("Nay");
- if (myString1.EqualsTo(myString2)) Console.WriteLine("Yay");
- if (!myString1.EqualsTo(myString3)) Console.WriteLine("Nay");
- }
- public interface IData<T>
- {
- bool EqualsTo(IData otherData);
- T GetData();
- }
- public class IntegerData : IData<int>
- {
- int _data;
- public int GetData(){
- return _data;
- }
- public IntegerData(int data)
- {
- _data = data;
- }
- public bool EqualsTo(IData otherData)
- {
- if(_data.CompareTo(otherData.GetData()) == 0)
- return true;
- return false;
- }
- }
Add Comment
Please, Sign In to add comment