2011-08-17 8 views
7

Aşağıdaki kodda:Neden Visual Studio hata ayıklayıcı, genel tür bağımsız değişkenleri içeren ifadeleri düzgün şekilde değerlendirmez?

  private static void Main(string[] args) 
     {    
      var listy = new List<DateTime> { DateTime.Now }; 
      MyMethod(listy); 
     } 

     static void MyMethod<T>(List<T> myList) 
     { 
      // put breakpoint here 
     } 

Hata ayıklayıcısını kırıyorsam, QuickWatch'ı "myList" de açın, görüyorum:

myList 
    [0] 
    Raw View 

"[0]" düğümünü seçtiğimde ve Ekle'yi tıklattığında İzleyin, İzle'ye eklenen ifade:

(new System.Collections.Generic.Mscorlib_CollectionDebugView<System.DateTime>(myList)).Items[0]

Bu ifade doğru görünüyor, ancak saat penceresi şu hatayı gösteriyor:

The best overloaded method match for 'System.Collections.Generic.Mscorlib_CollectionDebugView.Mscorlib_CollectionDebugView(System.Collections.Generic.ICollection)' has some invalid arguments

Bu hata ayıklayıcıda bir hata gibi görünüyor . Bu neden oluyor? Ve herhangi bir yerde belgelenmiş mi?

+0

Bir şekilde myList ile ilgili bir sorun var, bir statik değişken kullanırsanız çalışır. Connect to post.microsoft.com –

+0

Microsoft [Düzeltildi olarak bildirdiğim hata raporunu işaretledim] (https://connect.microsoft.com/VisualStudio/feedback/details/684678/visual-studio-debugger-c-expression-evaluator- -sağlam-ile-bağlı-jenerik-türleri), bu yüzden umarım bu dev11'de olmaz. –

cevap

1

Bu C# 'ın ifadesi değerlendiricinin aşırı yük çözünürlüğü mantığı bir hata gibi görünüyor. Bir jenerik tip kurucu çağırmak ve bir bağlı jenerik geçirme kombinasyonu bir anahtar gibi görünüyor. Bunlardan herhangi birinin kaldırılması sorunu çözüyor gibi görünüyor. Örneğin

İşte azından sorunu

class C<T> { 
    public C(ICollection<T> collection) { 

    } 
} 

static void Example<T>(ICollection<T> collection) { 
} 

daraltmak için yazdığı bir örnek program (bu olsa çalıştığımız tüm vakaları düzeltmek değil) açıkça ICollection<DateTime> için myList döküm bahsettiği ifadesini çağırabileceği hata

  • new C<DateTime>(myList) olmadan çalışır - - aynı mola sen

    • Example(myList) aşağıdaki değerlendirmeler deneyebilirsiniz s başarısız ame hatası

    Bu noktada, Connect numaralı telefondan bir hata bildirmeniz gerektiğini düşünüyorum. Bu kesinlikle bir hata (VB.Net'te benzer kodlar iyi çalışıyor)

  • +0

    Teşekkür ederiz! Https://connect.microsoft.com/VisualStudio/feedback/details/684678/visual-studio-debugger-c-expression-evaluator-doesnt-work-with-bound-generic-types adresinden bir bağlantı bileti açtım. Ben her zaman çözümü kullanarak gideceğim ve en iyisini umuyorum. –

    0

    Bu şekilde görünüyor. Hatayı kopyalayabildim. Mscorlib_CollectionDebugView<T>, ICollection<T> ve List<T> uygulamalarını kabul eden yalnızca bir kurucuya sahiptir. ICollection<T>. Ayrıca, açıkça ICollection<T> çalışmalarına döküm:

    (new System.Collections.Generic.Mscorlib_CollectionDebugView<System.DateTime>((ICollection<DateTime>)myList)).Items[0] 
    
    +0

    Teşekkürler. Bu geçici çözümü de buldum. Ama bunun neden daha fazla endişeleniyorum, bu yüzden bu geçici çözümün her zaman uygulanabilir olup olmadığını anlayabiliyorum (hata ayıklama ile ilgili bir Visual Studio eklentisi yapıyorum, bu yüzden kök nedenini anlamak benim için önemli.) –