Переопределение toString() в структуре KeyValuePair

#c#

#c#

Вопрос:

Как в тайле: переопределение toString() в структуре KeyValuePair<> (System.Коллекции.Общий).Мне интересно, можно ли это вообще сделать на C # (закрытые структуры).

Может ли кто-нибудь дать некоторое представление или альтернативные подходы?

Или я должен просто забыть переопределение и перейти к следующему:

 class MyKeyValuePair
{
    public KeyValuePair<T> Pair { get; set; }
    public MyKeyValuePair(KeyValuePair<T> pair)
    {
        this.Pair = pair;
    }
    public override ToString()
    {
        ...
    }
}
  

Ответ №1:

Нет.

Вы не можете изменять существующие типы, и struct они не могут быть унаследованы.

Комментарии:

1. Даже MethodRental класс здесь не поможет.

Ответ №2:

Как насчет этого:

 static class KeyValueHelper
{
   public static string ToMyString<K, V>(this KeyValuePair<K, V> pair) { ... }
}
  

Ответ №3:

Вероятно, лучшее, что вы можете сделать, это создать метод расширения:

 static class KeyValuePairMethods
{

    public static String ToCustomString<TK, TV>(this KeyValuePair<TK, TV> kvp)
    {
        return String.Format("{0}: {1}", kvp.Key, kvp.Value);
    }
}
  

Которое может быть вызвано как:

 new KeyValuePair<string, int>("Hello", 12).ToCustomString();
  

Конечно, внешний код по-прежнему будет использовать метод toString (), так что это, вероятно, ничего не даст для вас.

Ответ №4:

struct Не может быть унаследован, следовательно, его члены не могут быть переопределены.

Вам пришлось бы создать свой собственный, как вы предлагаете сами.