VB.Net 到 C# 的转换错误
VB.Net to C# conversion errors
我正在处理一个 SSIS 作业,它在 VB.Net 中有一个脚本任务。我们的组织指令是在漫长的 运行 中转向 C#。对于我正在开发的新 SSIS 作业,我使用了在线 VB.Net 到 C# 转换器并将其用于脚本任务。读取变量的 VB.Net 语句在 C# 中具有类似的语法,但会抛出一条错误消息。下面是 VB.Net 和等效的 C# 代码。
VB.Net 语句:
Dim strEnvironment As String = Dts.Variables.Item("g_Environment").Value.ToString()
C# 语句:
String strEnvironment = Dts.Variables.Item("g_Environment").Value.ToString()
如您所见,在变量中存储值的语句在 VB.Net 和 C# 中是相同的。但是,当我在 SSIS 作业的脚本任务中使用此代码时,C# 代码会标记以下错误消息。
'Variables' does not contain a definition of 'Item' and no accessible extension method 'Item' accepting a first argument of type 'Variables' could be found (Are you missing a using directive or an assembly reference?).
我的导入语句如下:
Using System;
Using System.IO;
Using System.text;
Using Sytsem.Collections;
Using System.Data;
Using Microsoft.Visualbasic;
Using Microsoft.SqlServer.Dts.Runtime;
我对 SSIS/VB.Net 和 C# 完全陌生。有人可以帮忙吗?
我认为您使用的转换器无法确定 Item 似乎是默认值 属性,而不是方法(函数,在 vb 术语中),或者它不理解如何将其翻译成 C#
VB 方法和集合(数组)( )
Dim array = "a,b".Split(",") 'method, args are surrounded in ()
Dim a = array(0) 'indexer also is surrounded in ()
C# 有 ( )
用于方法,[ ]
用于通过某些索引器访问可索引集合:
var array = "a,b".Split(","); 'method, surrounded by ()
var a = array[0]; 'indexer, surrounded by []
对于表示集合的 classes,可能会在 VB 中提供索引 属性 - 属性(任何名称)标有 Default
即在未指定其他 属性 名称时访问的 属性。在 C# 中,等价的 属性 总是被称为 this
并且您无法选择名称,也不会在索引项目时指定它
你的VB:
Dim strEnvironment As String = Dts.Variables.Item("g_Environment").Value.ToString()
也可能是:
Dim strEnvironment As String = Dts.Variables("g_Environment").Value.ToString()
但是因为它是索引,所以你在 C# 中使用 []
:
String strEnvironment = Dts.Variables["g_Environment"].Value.ToString();
顺便说一下,现代 Visual Studio 可以帮助您处理道具与方法:
..方法是黄色的,属性是白色的,局部变量是浅青色的..(但是智能感知中没有任何显示“这东西是可索引的”)
如果你写 .Something(...)
并且看到它是白色的,那么 Something 是一个 属性,而不是一个方法
此外,class 名称是绿色的,暗淡的东西未使用,3 个点表示有可能改进的建议
Item
是 VB 中的索引器。 VB 中 Item(x)
的直接等价物是 C# 中的 [x]
。
我有点惊讶转换器不会意识到这一点(或者它会被混淆,例如调用一个省略了空参数列表的函数)。
另请参阅此问题以获取有关索引器的更多信息:Create Indexer in VB.NET which can be used from C#
我正在处理一个 SSIS 作业,它在 VB.Net 中有一个脚本任务。我们的组织指令是在漫长的 运行 中转向 C#。对于我正在开发的新 SSIS 作业,我使用了在线 VB.Net 到 C# 转换器并将其用于脚本任务。读取变量的 VB.Net 语句在 C# 中具有类似的语法,但会抛出一条错误消息。下面是 VB.Net 和等效的 C# 代码。
VB.Net 语句:
Dim strEnvironment As String = Dts.Variables.Item("g_Environment").Value.ToString()
C# 语句:
String strEnvironment = Dts.Variables.Item("g_Environment").Value.ToString()
如您所见,在变量中存储值的语句在 VB.Net 和 C# 中是相同的。但是,当我在 SSIS 作业的脚本任务中使用此代码时,C# 代码会标记以下错误消息。
'Variables' does not contain a definition of 'Item' and no accessible extension method 'Item' accepting a first argument of type 'Variables' could be found (Are you missing a using directive or an assembly reference?).
我的导入语句如下:
Using System;
Using System.IO;
Using System.text;
Using Sytsem.Collections;
Using System.Data;
Using Microsoft.Visualbasic;
Using Microsoft.SqlServer.Dts.Runtime;
我对 SSIS/VB.Net 和 C# 完全陌生。有人可以帮忙吗?
我认为您使用的转换器无法确定 Item 似乎是默认值 属性,而不是方法(函数,在 vb 术语中),或者它不理解如何将其翻译成 C#
VB 方法和集合(数组)( )
Dim array = "a,b".Split(",") 'method, args are surrounded in ()
Dim a = array(0) 'indexer also is surrounded in ()
C# 有 ( )
用于方法,[ ]
用于通过某些索引器访问可索引集合:
var array = "a,b".Split(","); 'method, surrounded by ()
var a = array[0]; 'indexer, surrounded by []
对于表示集合的 classes,可能会在 VB 中提供索引 属性 - 属性(任何名称)标有 Default
即在未指定其他 属性 名称时访问的 属性。在 C# 中,等价的 属性 总是被称为 this
并且您无法选择名称,也不会在索引项目时指定它
你的VB:
Dim strEnvironment As String = Dts.Variables.Item("g_Environment").Value.ToString()
也可能是:
Dim strEnvironment As String = Dts.Variables("g_Environment").Value.ToString()
但是因为它是索引,所以你在 C# 中使用 []
:
String strEnvironment = Dts.Variables["g_Environment"].Value.ToString();
顺便说一下,现代 Visual Studio 可以帮助您处理道具与方法:
..方法是黄色的,属性是白色的,局部变量是浅青色的..(但是智能感知中没有任何显示“这东西是可索引的”)
如果你写 .Something(...)
并且看到它是白色的,那么 Something 是一个 属性,而不是一个方法
此外,class 名称是绿色的,暗淡的东西未使用,3 个点表示有可能改进的建议
Item
是 VB 中的索引器。 VB 中 Item(x)
的直接等价物是 C# 中的 [x]
。
我有点惊讶转换器不会意识到这一点(或者它会被混淆,例如调用一个省略了空参数列表的函数)。
另请参阅此问题以获取有关索引器的更多信息:Create Indexer in VB.NET which can be used from C#