#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
Не может быть унаследован, следовательно, его члены не могут быть переопределены.
Вам пришлось бы создать свой собственный, как вы предлагаете сами.