2013-07-17 113 views
1

我怎樣才能使擴展方法對於System.IO.Path類我的意思是我需要的東西象下面這樣:我可以爲System.IO.Path類制定擴展方法嗎?

Path.GetExtension(sFilePath) 

我要讓方法:

Path.GetMimeType(sFilePath) 

擴展方法:

public static string GetMIMEType(this Path sPath,string sFilePath) 
{ 
     string sExtension = Path.GetExtension(sFilePath).ToLowerInvariant(); 

     if (sExtension.Length > 0 && dicMIMETypes.ContainsKey(sExtension.Remove(0, 1))) 
     { 
      return dicMIMETypes[sExtension.Remove(0, 1)]; 
     } 
     return "unknown/unknown"; 
} 

但是當編譯上面的代碼方法時得到錯誤('System.IO.Path':靜態類型不能用作參數)。

感謝所有,

+1

不可能 - 但這個答案有一個可能適合您的需求的鍛鍊。 http://stackoverflow.com/questions/249222/can-i-add-extension-methods-to-an-existing-static-class –

+3

你可以告訴你做錯了,你從來沒有真正使用* sPath *參數在你的代碼中。你也沒有辦法找出如何使用它。所以對擴展方法沒有意義,它沒有擴展任何東西。 –

回答

1

Path是靜態的,因此,你不能爲它創建的擴展方法。擴展方法需要一個對象的實例。

1

此功能目前不可用。您可以將擴展方法僅添加到實例而不添加到類本身(靜態)。

已向微軟提供的功能請求Static extension methods in C# 4.0 該功能尚未實施,他們可能會考慮將來也可能不會。

+0

請注意,「不會修復」並不一定意味着「永遠不會修復」。這只是意味着微軟現在已經認定時間不對了。我已經看到「不會修復」的情況,因爲它最終被修復/更改,所以它不是「從不」。我不一定同意這種結案方式,但它可能會減少他們的噪音,我還有其他產品的開放案例,他們每週都會得到奇怪的「我也想要這個」,或者所以,弄亂我的郵箱。在這個系統中,我們只能想象開發者郵箱的樣子。 –

+0

謝謝@ LasseV.Karlsen,我沒有意識到這一點。將編輯我的答案 –

相關問題