Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Func<;T、 U,双>;作为构造函数中的参数_C# - Fatal编程技术网

C# Func<;T、 U,双>;作为构造函数中的参数

C# Func<;T、 U,双>;作为构造函数中的参数,c#,C#,我从下面一段相对复杂的代码中摘录了以下内容 IDictionary<string, double> startingProbabilitiesDict = GetNewIDictionaryStringDouble(); IDictionary<string, double> transitionProbabilitiesDict = GetNewIDictionaryStringDouble(); IDictionary<string, double> em

我从下面一段相对复杂的代码中摘录了以下内容

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]));
我对这个符号感到困惑:

startingProbabilities: (s => startingProbabilitiesDict[s])
似乎认为
开始概率:
正在指定构造函数的第一个参数,但是为什么需要冒号,这个符号叫什么?

它被称为

名称是可选的,如果您将用法与可选参数结合使用,它会变得更有趣(下面的简化/哑示例):

它被称为

名称是可选的,如果您将用法与可选参数结合使用,它会变得更有趣(下面的简化/哑示例):

startingProbabilities: (s => startingProbabilitiesDict[s])
[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";
}