将此c#代码翻译为VB.NET
本文关键字:VB NET 翻译 代码 将此 | 更新日期: 2023-09-27 18:05:52
我试着翻译下面的c#代码
public static class ObjectSetExtensions
{
public static void AddObjects<T>(this ObjectSet<T> objectSet, IEnumerable<T> objects)
{
foreach (var item in objects)
{
objectSet.AddObject(item);
}
}
}
VB。净:
Module ObjectSetExtensions
<System.Runtime.CompilerServices.Extension()>
Public Sub AddObjects(Of T)(ByVal objectSet As ObjectSet(Of T), ByVal objects As IEnumerable(Of T))
For Each item In objects
objectSet.AddObject(item)
Next
End Sub
End Module
但是我得到一个错误说:
类型参数'T'不满足类型参数'TEntity'的'Class'约束。
我错过了什么?
c#版本也无法编译,原因相同。应该是:
public static void AddObjects<T>(this ObjectSet<T> objectSet,
IEnumerable<T> objects)
where T : class // Note this bit
{
foreach (var item in objects)
{
objectSet.AddObject(item);
}
}
, VB版本为:
<Extension> _
Public Sub AddObjects(Of T As Class)(ByVal objectSet As ObjectSet(Of T), _
ByVal objects As IEnumerable(Of T))
Dim local As T
For Each local In objects
objectSet.AddObject(local)
Next
End Sub
注意,在VB版本中,约束是类型参数声明的一部分。有关详细信息,请参见MSDN。
听起来你好像错过了一个约束:
C#:
where T : class
VB:
(Of T as class)
你的翻译没有问题。这是最接近的VB。. NET等价的c#代码。
基于编译错误,虽然类型ObjectSet
期望泛型类型参数被约束为class
。最初的c#示例没有这个,但是如果它有并且从VB的问题中省略了。. NET等价如下。
Public Sub AddObjects(Of T As Class)(ByVal objectSet As ObjectSet(Of T) ...
另一个到VB的转换。净:
Public NotInheritable Class ObjectSetExtensions
Private Sub New()
End Sub
<System.Runtime.CompilerServices.Extension> _
Public Shared Sub AddObjects(Of T)(objectSet As ObjectSet(Of T), objects As IEnumerable(Of T))
For Each item As var In objects
objectSet.AddObject(item)
Next
End Sub
End Class