Неоднозначность == null
От: Аноним  
Дата: 07.06.08 08:50
Оценка:
При перегрузке операторов == и != на использования с разными типами возникает неоднозначность при сравнении с null.


 public struct SomeStruct
    {
        long _member;
        String _otherMember;
        public SomeStruct(String val)
        {
            _otherMember = val;
            _member = 0;
        }

        public SomeStruct(long val)
        {
            _member = val;
            _otherMember = null;
        }

        #region overwrite
        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
        public override int GetHashCode()
        {
            return base.GetHashCode();
        } 
        #endregion

        #region operators == !=
        public static bool operator ==(SomeStruct left, SomeStruct right)
        {
            return left == right;
        }
        public static bool operator !=(SomeStruct left, SomeStruct right)
        {
            return !(left == right);
        }

        public static bool operator ==(SomeStruct left, String right)
        {
            return left._otherMember == right;
        }
        public static bool operator !=(SomeStruct left, String right)
        {
            return !(left == right);
        }
        public static bool operator ==(SomeStruct left, long right)
        {
            return left._member == right;
        }
        public static bool operator !=(SomeStruct left, long right)
        {
            return !(left == right);
        } 
        #endregion

        #region CAST
        public static implicit operator SomeStruct(string value)
        {
            return new SomeStruct(value);
        }

        public static implicit operator SomeStruct(long value)
        {
            return new SomeStruct(value);
        }
        public static implicit operator long(SomeStruct value)
        {
            return value._member;
        }
        public static implicit operator String(SomeStruct value)
        {
            return value._otherMember;
        }

        #endregion

    };



При использовании

  SomeStruct some = 2;
  bool bnotNull = some == null;

Возникает неоднозначность

Error 1 The call is ambiguous between the following methods or properties: 'TestProject.SomeStruct.operator ==(TestProject.SomeStruct, TestProject.SomeStruct)' and 'TestProject.SomeStruct.operator ==(TestProject.SomeStruct, string)' C:\Projects\TestProject\TestProject\Program.cs 43 29 TestProject


Вопрос по каким принципам происходит поиск оператора сравнения при сравнении с null.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.