[英]Lambda function ellipsis (underscore in C#) equivalent in VB.NET
我在 C# 中有以下 lambda 函數,我想將其遷移到 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
這是開始函數:
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);
}
這些 lambda 應該是“Sub” lambda。 此外,您沒有關閉其中的大部分(使用“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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.