2016-08-02 32 views
5

Aşağıdaki kod, VS2015.2'de derler, ancak VS2015.3'e yükseltildikten sonra error CS0019: Operator '==' cannot be applied to operands of type 'Registration<Something>' and 'Something' ile başarısız olur.örtük dönüştürme, eşitlik operatörü ve nullables kombinasyonu, Visual Studio 2015.2'den 2015.3'e güncelleştirildikten sonra derlenemiyor.

public class Class1 
    { 
     public Class1() 
     { 
      var a = new Registration<Something>(); 
      var x = a == Something.Bad; // this line fails in VS2015.3 
     } 
    } 

    public struct Registration<T> where T:struct 
    { 
     public static implicit operator T?(Registration<T> registration) 
     { 
      return null; 
     } 
    } 

    public enum Something 
    { 
     Good, 
     Bad 
    } 
ben bunun neden böyle 3. Birisi bana söyleyebilir güncelleme için değişmek böyle bir değişiklik, hakkında herhangi bir haber bulamıyorum

? Ve doğru davranış hangisidir?

DÜZENLEME: Kapalı dönüşüm, eşitlik operatörü ve nullables ... ve enumların birleşimi. Bu sadece T bir enum olduğunda başarısız gibi görünüyor.

+1

'a == (Something?) Bir şey olarak izliyoruz.Bad 'işe yarıyor gibi görünüyor, bunun neden değiştiğini bilmiyorum .... ve R # tabiki bu gereksiz dökümden şikayet ediyor ... –

+0

Evet, bir yayınla çalışır. Ve aslında sol tarafta da açık bir dönüşümle çalışıyor. – asgerhallas

cevap