2013-12-08 36 views
0
一個參數

我已經從一個相對複雜的代碼,下面摘錄我下面Func <T,U,double>等。在構造

IDictionary<string, double> startingProbabilitiesDict = GetNewIDictionaryStringDouble(); 
IDictionary<string, double> transitionProbabilitiesDict = GetNewIDictionaryStringDouble(); 
IDictionary<string, double> emissionProbabilitiesDict = GetNewIDictionaryStringDouble(); 
... 
var fbv = new SomeClass<string, string> 
    (startingProbabilities: (s => startingProbabilitiesDict[s]), 
    transitionProbabilities: ((sOut, sIn) => transitionProbabilitiesDict[sOut][sIn]), 
    emissionProbabilities: ((s, o) => emissionProbabilitiesDict[s][o])); 

其中SomeClass默認構造函數是

public class SomeClass<O, S> : IObserver<Tuple<O, IEnumerable<S>>> 
{  
    ... 
    public SomeClass(
     Func<S, double> startingProbabilities, 
     Func<S, S, double> transitionProbabilities, 
     Func<S, O, double> emissionProbabilities) 
    { 
     Contract.Requires(startingProbabilities != null); 
     Contract.Requires(transitionProbabilities != null); 
     Contract.Requires(emissionProbabilities != null); 

     StartingProbabilities = startingProbabilities; 
     TransitionProbabilities = transitionProbabilities; 
     EmissionProbabilities = emissionProbabilities; 
    } 
    ... 
} 

我很困惑在這個符號:

startingProbabilities: (s => startingProbabilitiesDict[s]) 

看起來好像認爲startingProbabilities:指定的是fisrt參數構造函數,但是爲什麼冒號是必要的,這個記號稱爲什麼?

回答

5

它被稱爲Named parameter

名稱是可選的,如果你把帶有可選參數的使用也變得更有趣(簡體/啞下面的例子):

[Test] 
public void NamedAndUnnamedTest() 
{ 
    Assert.AreEqual("Only value1 was supplied", DummyMethod(value1: 1)); 
    Assert.AreEqual("Only value1 was supplied", DummyMethod(1)); 
    Assert.AreEqual("Only value2 was supplied", DummyMethod(value2: 1)); 
    Assert.AreEqual("Both arguments were supplied", DummyMethod(1, 2)); 
} 

private string DummyMethod(int value1 = 0, int value2 = 0) 
{ 
    if (value1 != 0 && value2 != 0) 
     return "Both arguments were supplied"; 
    if (value1 == 0) 
     return "Only value2 was supplied"; 
    return "Only value1 was supplied"; 
} 
+0

打我給它幾秒鐘就可以得到upvote! – acfrancis

相關問題