2011-02-25 111 views
18

我使用C#.net 3.5構建應用程序。我一直在.NET 4.0中使用可選參數屬性,沒有任何問題。我也注意到,與3.5有選項(解決方法)以下屬性添加到您的方法,像這樣:雖然我已經添加的屬性的方法C#3.5可選參數和DefaultValue參數

public static void MethodName(string name, [Optional][DefaultValue(null)]string placeHolder) 
    { 

    } 

,如果我嘗試並調用它像這樣:

 MethodName("test"); 

編譯器會抱怨說它正在尋找兩個參數而不是一個。它實際上可以使用C#.net 3.5做到這一點嗎?難道我做錯了什麼?

+0

同樣的事情發生在我們身上。你有什麼解決辦法嗎? – PrateekSaluja 2012-03-13 08:15:04

回答

33

可選參數是C#4.0語言功能,因此您所針對的框架無關緊要,但必須使用VS 2010或更新版本進行編譯。

使用此語法在VS 2010或更新:

public static void MethodName(string name, string placeHolder = null) 
{ 
    // body 
} 

或者這在舊的一個:

public static void MethodName(string name, string placeHolder) 
{ 
    // body 
} 

public static void MethodName(string name) 
{ 
    MethodName(name, null); 
} 
+0

是的,我試圖在VS2010中將框架版本設置爲3.5,但它仍然會引發編譯錯誤。 「參數不匹配」。 – Deano 2011-02-25 14:04:24

+0

我也在尋找一種方法來做到這一點,而不必採用舊的skool方式 - 看起來像我可能必須做的! – Deano 2011-02-25 14:05:01

+0

在項目屬性中,生成選項卡,高級並將語言設置爲C#4.0。即使設置了.NET 3.5框架,這也應該可以工作。 – rotman 2011-02-25 14:32:31

6

Optional屬性一直以來C#1.0提供,並與外部進行互操作時使用代碼,它不會影響你自己代碼中的方法調用。

,因爲在C#3沒有可選參數,你可以使用重載來代替:

public static void MethodName(string name, string placeHolder) { 
    ... 
} 

public static void MethodName(string name) { 
    MethodName(name, null); 
} 

(旁註:有沒有C#3.5版,這是一個框架版本。)

4

取看看下面的StackOverflow線程: C# Optional Parameters in .net 3.5

粘貼所有已經說過的東西沒有用,因爲線程幾乎涵蓋了所有的東西。 祝你好運。

+0

是的,我確實看到了這個問題 - 不幸的是我嘗試在VS2010中將框架版本設置爲3.5,但它仍然會引發編譯錯誤。 「參數不匹配」 – Deano 2011-02-25 14:05:47