Эллипсис лямбда-функции (подчеркивание в C #) эквивалентен в VB.NET - PullRequest
0 голосов
/ 18 октября 2018

У меня есть следующая лямбда-функция в C #, которую я хочу перенести в VB.NET:

    private static void CreateAndVisualizeSensitiveFilteredFixationsStream()
    {
        _fixationDataStream = _host.Streams.CreateFixationDataStream();
        _fixationDataStream
            .Begin((x, y, _) =>
                {
                    Console.WriteLine("\n" +
                                      "Fixation started at X: {0}, Y: {1}", x, y);
                    _fixationBeginTime = DateTime.Now;
                })
            .Data((x, y, _) =>
                {
                    Console.WriteLine("During fixation, currently at: X: {0}, Y: {1}", x, y);
                })
            .End((x, y, _) =>
                {
                    Console.WriteLine("Fixation ended at X: {0}, Y: {1}", x, y);
                    if (_fixationBeginTime != default(DateTime))
                    {
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine("Fixation duration: {0}", DateTime.Now - _fixationBeginTime);
                        Console.ForegroundColor = _defaultForegroundColor;
                    }
                });
    }

Как видно, третий аргумент ".Begin (x, y, _)"многоточие.

VB.NET не примет это подчеркивание.Что было бы эквивалентно в VB.NET?

Вот моя попытка преобразования, я не уверен, правильно ли я это сделал, но подчеркивание, скорее всего, будет неправильным в VB.NET, яУгадай.Спасибо вам.

    Private Shared Sub CreateAndVisualizeSensitiveFilteredFixationsStream()
        _fixationDataStream = _host.Streams.CreateFixationDataStream()
        _fixationDataStream.Begin(Function(x, y, _)
                                      Console.WriteLine(Constants.vbLf & "Fixation started at X: {0}, Y: {1}", x, y)
                                      _fixationBeginTime = DateTime.Now
               ).Data(Function(x, y, _ )
                    Console.WriteLine("During fixation, currently at: X: {0}, Y: {1}", x, y)
               ).End(Function(x, y, _)
                    Console.WriteLine("Fixation ended at X: {0}, Y: {1}", x, y)
                                      If _fixationBeginTime IsNot Nothing Then
                                          Console.ForegroundColor = ConsoleColor.Cyan
                                          Console.WriteLine("Fixation duration: {0}", DateTime.Now.Subtract(_fixationBeginTime))
                                          Console.ForegroundColor = _defaultForegroundColor
                                      End If
                                  End Function
               )
    End Sub

Это функция Begin:

public class FixationDataStream : DataStreamBase<FixationDataBehavior, FixationData>
{
    public FixationDataStream(FixationDataBehavior fixationDataBehavior, Action hasSubscribersChanged, bool enabled);

    public FixationDataStream Begin(Action<double, double, double> action);
    public FixationDataStream Data(Action<double, double, double> action);
    public FixationDataStream End(Action<double, double, double> action);
}

1 Ответ

0 голосов
/ 18 октября 2018

Эти лямбды должны быть «суб» лямбдами.Кроме того, вы не закрываете большинство из них (с помощью «End Sub»).Кроме того, вы не можете использовать подчеркивание в качестве имени переменной в VB:

    Private Shared Sub CreateAndVisualizeSensitiveFilteredFixationsStream()
        _fixationDataStream = _host.Streams.CreateFixationDataStream()
        _fixationDataStream.Begin(Sub(x, y, underscore)
                    Console.WriteLine(vbLf & "Fixation started at X: {0}, Y: {1}", x, y)
                    _fixationBeginTime = Date.Now
        End Sub).Data(Sub(x, y, underscore)
                    Console.WriteLine("During fixation, currently at: X: {0}, Y: {1}", x, y)
        End Sub).End(Sub(x, y, underscore)
                    Console.WriteLine("Fixation ended at X: {0}, Y: {1}", x, y)
                    If _fixationBeginTime <> Date.MinValue Then
                        Console.ForegroundColor = ConsoleColor.Cyan
                        Console.WriteLine("Fixation duration: {0}", Date.Now - _fixationBeginTime)
                        Console.ForegroundColor = _defaultForegroundColor
                    End If
        End Sub)
    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...