Применение различных типов параметров - PullRequest
0 голосов
/ 26 марта 2011

Доброе утро, день или ночь,

При реализации, например, ICollection<KeyValuePair<TKey, TValue>> или IDictionary<TKey, TValue>, есть ли способ заставить TKey и TValue быть разными типами?Я знаю, что могу создать исключение в конструкторах всякий раз, когда typeof(TKey) == typeof(TValue), но это не кажется ни самым элегантным, ни самым правильным решением ...

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 26 марта 2011

Я сомневаюсь, что есть что-то лучше.В .net вы ограничены небольшим набором встроенных ограничений, и это не входит в их число.

2 голосов
/ 26 марта 2011

Вы можете сделать условие явным с помощью Кодовых контрактов , сохраняя проверку в конструкторе.

public class MyDictionary : IDictionary<TKey, TValue>
{
    public MyDictionary()
    {
        Contract.Requires(typeof(TKey) != typeof(TValue));
    }
}
...