Tôi có phương pháp mở rộng C# này sẽ mở rộng bất kỳ từ điển nào có giá trị Giá trị là IList. Khi tôi viết mã tương đương trong VB.Net Tôi nhận được lỗi biên dịch sau:C# để VB.Net: Tại sao điều này không biên dịch khi chuyển đổi sang VB?
"Extension method 'Add' has some type constraints that can never be satisfied".
Tôi tìm thấy điều này thực sự khó hiểu như cùng khó khăn loại thể được thỏa mãn trong C#.
Vì vậy, câu hỏi của tôi là: Tại sao điều này không hoạt động trong VB? Có cách nào để làm cho những hạn chế loại tương tự làm việc trong VB? Tôi đã sai khi chuyển đổi mã? Tôi hy vọng ai đó có thể làm sáng tỏ điều này vì tôi đã gãi đầu vào cái này một lúc. :)
(Trong trường hợp bạn tò mò phương pháp mở rộng được thiết kế để làm cho nó đơn giản để thêm nhiều giá trị vào một cuốn từ điển dưới một đơn chủ chốt (như nhiều đơn đặt hàng dưới một khách hàng). Nhưng điều này là không quan trọng, tôi tôi chỉ quan tâm đến hành vi khó hiểu mà tôi đang quan sát trong VB).
Dưới đây là C# Phiên bản hoạt động:
/// <summary>
/// Adds the specified value to the multi value dictionary.
/// </summary>
/// <param name="key">The key of the element to add.</param>
/// <param name="value">The value of the element to add. The value can be null for reference types.</param>
public static void Add<KeyType, ListType, ValueType>(this Dictionary<KeyType, ListType> thisDictionary,
KeyType key, ValueType value)
where ListType : IList<ValueType>, new()
{
//if the dictionary doesn't contain the key, make a new list under the key
if (!thisDictionary.ContainsKey(key))
{
thisDictionary.Add(key, new ListType());
}
//add the value to the list at the key index
thisDictionary[key].Add(value);
}
Dưới đây là phiên bản VB mà không biên dịch:
''' <summary>
''' Adds the specified value to the multi value dictionary.
''' </summary>
''' <param name="key">The key of the element to add.</param>
''' <param name="value">The value of the element to add. The value can be null for reference types.</param>
<System.Runtime.CompilerServices.Extension()> _
Public Sub Add(Of KeyType, ListType As {IList(Of ValueType), New}, ValueType) _
(ByVal thisDictionary As Dictionary(Of KeyType, ListType), ByVal key As KeyType, ByVal value As ValueType)
'if the dictionary doesn't contain the key, make a new list under the key
If Not thisDictionary.ContainsKey(key) Then
thisDictionary.Add(key, New ListType())
End If
'add the value to the list at the key index
thisDictionary(key).Add(value)
End Sub
Lỗi mà nó cung cấp là gì? –
"Phương pháp mở rộng 'Thêm' có một số ràng buộc loại không bao giờ có thể thỏa mãn". –