2011-05-12 50 views
3

如在tile中:覆蓋a KeyValuePair上的ToString()結構(System.Collections.Generic)。我想知道是否可以在C# (密封結構)。覆蓋KeyValuePair <>上的ToString()結構

任何人都可以提供一些見解或替代方法嗎?

或者我應該完全忘記壓倒一切的,去以下:

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

回答

5

不能修改現有的類型和struct s不能被繼承。

+0

即使是'MethodRental'類也無濟於事。 – SLaks 2011-05-12 23:08:27

1

A structcan not be inherited,因此不能重寫它的成員。

你將不得不推出自己的,如你建議你自己。

2

這個什麼:

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

也許你可以做的是創建一個擴展方法最好的:

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()方法,所以這可能不會爲你完成任何事情。