Отображение общих параметров комментариев XML в Intellisence для статического метода

У меня возникли проблемы с получением общих параметров для двух приведенных ниже методов для отображения типов в Intellisence.

Для IEnumerable<T> я просто хочу, чтобы он отображался как double.

Снимок экрана Intellisence для метода IEnumerable ‹T›

Что касается перегрузки IDictionary<TKey,TValue>, я хочу, чтобы она отображала KeyValuePair<int,string>, но, конечно, без жесткого кодирования типов.

Снимок экрана Intellisence для KeyValuePair‹ TKey, TValue ›Method

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Common.FluentValidation
{
    public static partial class Validate
    {
        /// <summary>
        /// Compares two dictionaries are null or contain equal sets of items.
        /// Returns true if both instances are null or contain equal sets of <see cref="T:System.Collections.Generic.KeyValuePair'1{TKey}{TValue}"></see> items; otherwise, false.
        /// </summary>
        /// <typeparam name="TKey">The type of the key.</typeparam>
        /// <typeparam name="TValue">The type of the value.</typeparam>
        /// <param name="A">The first instance to compare</param>
        /// <param name="B">The second instance to compare</param>
        /// <returns>true if both instances are null or contain equal sets of <see cref="T:System.Collections.Generic.KeyValuePair'1{TKey}{TValue}"></see> items; otherwise, false.</returns>
        public static bool AreBothNullOrEqualSets<TKey, TValue>(IDictionary<TKey, TValue> A, IDictionary<TKey, TValue> B)
        {
            // XOR for null
            if ((A == null) ^ (B == null))
                return false;

            // Compare each value in set
            if (A != null)
                if (!A.OrderBy(x => x.Key).SequenceEqual(B.OrderBy(x => x.Key)))
                    return false;

            return true;
        }

        /// <summary>
        /// Compares two sequences are null or contain equal sets of items.
        /// Returns true if both instances are null or contain equal sets of <see cref="T:Common.FluentValidation.AreBothNullOrEqualSets`1"/> items; otherwise, false.
        /// </summary>
        /// ///  for more information.
        /// <typeparam name="T">The type of the enumerable.</typeparam>
        /// <param name="A">The first instance to compare</param>
        /// <param name="B">The second instance to compare</param>
        /// <returns>true if both instances are null or contain equal sets of <see cref="T:Common.FluentValidation.AreBothNullOrEqualSets`1"/> items; otherwise, false.</returns>
        public static bool AreBothNullOrEqualSets<T>(IEnumerable<T> A, IEnumerable<T> B)
        {
            // XOR for null
            if ((A == null) ^ (B == null))
                return false;

            // Compare each value in set
            if (A != null)
                if (!A.SequenceEqual(B))
                    return false;

            return true;
        }
    }
}

Я поискал и нашел несколько подсказок, но безуспешно пытался несколько вещей. Лучшее, что я могу получить, - это просто отобразить букву "T" на всплывающей подсказке Intellisence, что оставляет желать лучшего ...

ИЗМЕНИТЬ:

Microsoft делает это с параметрами типа уровня класса ... но не с конструктором ... Возможно ли это для методов / конструкторов? (в идеале я хочу показать типы, встроенные в мои комментарии, но то, как это показано на изображении ниже, также вполне приемлемо)

Microsoft может это сделать


person HodlDwon    schedule 01.05.2014    source источник
comment
Вы когда-нибудь догадывались об этом?   -  person Zachary Dow    schedule 10.08.2015


Ответы (1)


Хотя это очень старый вопрос, сегодня я обнаружил, что борюсь с той же проблемой - и я с сожалением должен сказать, что не похоже, что есть настоящее решение.

использование <see cref="Dictionary{int, string}"> вызовет следующее предупреждение (по крайней мере, в VS 2017):

CS1584 XML-комментарий имеет синтаксически неверный атрибут cref 'Dictionary {int, string}'

При наведении курсора на зеленую волнистую линию VS покажет всплывающую подсказку (среди прочего):

Объявление параметра типа должно быть идентификатором, а не типом. См. Также ошибку CS0081.

Единственное решение, которое я придумал, - это просто добавить пару абзацев, определяющих типы TKey и TValue:

/// <summary>
/// Gets a <see cref="Dictionary{TKey, TValue}"/> that maps ints to strings.
/// <para>
/// TKey is <see cref="int"/>.
/// </para>
/// <para>
/// TValue is <see cref="string"/>.
/// </para>
/// </summary>
public Dictionary<int, string> Map {get;}

Intellisence покажет это так:

Gets a Dictionary<TKey, TValue> that maps ints to strings.
TKey is int.
TValue is string.

person Zohar Peled    schedule 21.04.2020
comment
Я полагаю, это лучше, чем ничего, но на самом деле это не объясняет, почему он не может проанализировать то, что было изначально. Раздражающий выбор Microsoft здесь. Но что, черт возьми, мы знаем? - person ruffin; 24.07.2020