2013-04-26 41 views
1

我已經是發生在一個布爾值的功能,如下圖所示:C#:如何將參數鍵/值傳遞給函數?

public void LoadEndPoints(bool mock) 
{ 

} 

我可以通過LoadEndpoints(真)或LoadEndpoints(假)調用此方法,但是這可能是有點難以理解,因爲你需要知道真假是什麼。有沒有辦法將參數名稱和值傳遞給函數,如LoadEndPoints(mock = true)?

+0

我不明白爲什麼使用「命名參數」將有助於這裏..和有這麼多的答案。 – user2246674 2013-04-26 20:02:02

+0

也許:1)使用離散方法名稱:'LoadEndPoints/LoadMockedEndPoints'或; 2)接受傳遞更多含義的枚舉(或其他類型):'LoadEndPoints(EndpointMode.MockOnly)'或; 3)將配置移動到[class-level]設置:'var epl = new EndPointLoader {Mock = true}; epl.LoadEndPoints()';等等。 – user2246674 2013-04-26 20:02:53

+0

是的,我同意你的代碼應該更具可讀性。 – 2013-04-26 20:04:37

回答

3

是的!

你可以像這樣指定的參數名:

myObject.LoadEndPoints(mock: true); 

進一步閱讀

改進代碼的可讀性是使用另一種方法一個枚舉,像這樣:

public enum LoadOption 
{ 
    Normal, 
    Mock 
} 

public void LoadEndPoints(LoadOption option) 
{ 
    ... 
} 

接着,電話看起來有點像這樣:

myObject.LoadEndPoints(LoadOption.Mock); 
+0

他並沒有問我這個問題,正確的答案是@aquaraga – 2013-04-26 20:05:12

+1

@MustafaEkici OP明確提出知道如何通過指定參數名稱而不僅僅是參數來提高代碼的可讀性。我讀這個問題的方式正是* OP所要求的。也就是說,* aquaraga *的答案也很好。 – 2013-04-26 20:10:05

+0

酷,但這個問題的答案是否。 – 2013-04-26 20:11:23

1

你可以使用一個KeyValuePair:

KeyValuePair kvp = new KeyValuePair(BoolType, BoolValue) 
+0

使用'KeyValuePair'對方法調用會是什麼樣子? – 2013-04-26 20:00:38

+0

其他的答案是好,但LoadEndpoints會採取KeyValuePair,而不是一個bool – Jonesopolis 2013-04-26 20:02:30

+0

這個答案真的太 – 2013-04-26 20:25:16

0

是的,你可以在C#的語法如下做到這一點:

myObject.LoadEndPoints(mock : true); 

而且在VB中:

myObject.LoadEndPoints(mock := true) 
2

您可以使用'命名參數',一個C#4.0功能;因而致電:myObject.LoadEndPoints(mock : true);

如果可讀性的確是你最關心的,你甚至可以公開兩個明確的方法,並在內部重用邏輯 - 類似於:

public void LoadEndPointsWithoutMock() 
    { 
     LoadEndPoints(false); 
    } 
    public void LoadEndPointsByMocking() 
    { 
     LoadEndPoints(true); 
    } 
    private void LoadEndPoints(bool mock) 
    { 

    } 

而且,我不會說LoadEndPointsWithoutMock等都是很好的方法名稱。理想情況下,這些名稱應與該域名有關。

+0

這是正確的答案 – 2013-04-26 20:07:18

+0

讓OP決定 – 2013-04-26 20:15:27