C#:对象到字符串数组。 [*] 到 [] 错误(了解 VB.NET 和 C# 会有所帮助)

标签 c# vb.net arrays object combobox

我被分配到将一个 VB.NET 项目转换为 C#,但我被卡住了。我正在使用一个名为 RsiOPCAuto 的类,但我认为我不必深入了解它的工作原理。让我们继续处理我的问题。

所以基本上我所做的是使用这段代码从我的类中获取一个对象:

public partial class FrmPartialMain : Form
{
    RsiOPCAuto.OPCServer oOpcServer;
    public FrmPartialMain()
    {
        InitializeComponent();
        object RsiOPCAuto;
        object oOPCList;

        oOpcServer = new RsiOPCAuto.OPCServer();
        oOPCList = oOpcServer.GetOPCServers();

到目前为止,还不错。通过添加 watch ,我可以看到 oOPCList 现在具有值 {string[1..4]}。

现在我想把这四个字符串放到一个组合框中。我用一个简单的 for 循环来做到这一点:

for (int i = 0; i <= oOPCList.Length; i++)
{
    cboServer.Items.Add(oOPCList[i]);
}

编辑:从头开始,将其更改为更好的 foreach 循环。

即使此对象现在用作字符串数组,但 oOPCList.Length 和 (oOPCList[i]) 都会出错:

.长度: 错误 1“object”不包含“Length”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Length”(是否缺少 using 指令或程序集引用?)

oOPCList[i]: 错误 2 无法将带 [] 的索引应用于“对象”类型的表达式

我敢打赌这是最简单的事情,但我就是看不到它,非常感谢您的帮助,如果您还有其他需要知道的,请务必询问 :-)

附言。可能值得一提的是,我尝试了一些不同的方法将对象转换为字符串数组,但我不断收到错误消息,告诉我无法将 system.string[*] 转换为 system.string[]。

这是我正在转换的 VB.NET 代码:

Friend Class frmPartialMain
    Inherits System.Windows.Forms.Form
        Dim oOpcServer As RsiOPCAuto.OPCServer
        Private Sub frmPartialMain_Load(ByVal eventSender As System.Object, ByVal eventArgs As  System.EventArgs) Handles MyBase.Load
            Dim RsiOPCAuto As Object
            Dim oOPCList() As Object
            Dim i As Integer

            oOpcServer = New RsiOPCAuto.OPCServer
            oOPCList = oOpcServer.GetOPCServers
            For i = LBound(oOPCList) To UBound(oOPCList)
                cboServer.Items.Add(oOPCList(i))
            Next i

最佳答案

你需要转换GetOPCServers的返回值到object首先,然后到 Array ,因为此方法返回 dynamic类型。您不能直接转换为 string[]因为 C# 不支持不基于 0 的强类型数组。施法后需要调用Cast<string>获得一个强类型的可枚举对象,您可以对其进行迭代:

IEnumerable<string> oOPCList;

oOpcServer = new RsiOPCAuto.OPCServer();
oOPCList = ((Array)(object)oOpcServer.GetOPCServers()).Cast<string>();

此外,您最好使用 foreach循环,因为它更具可读性:

foreach(var item in oOPCList)
    cboServer.Items.Add(item);

怪投先到object , 然后到 Array , 然后到 IEnumerable<string>通过Cast<string>由于以下原因需要:

GetOPCServers返回 dynamic类型。尝试以任何方式访问该动态实例 - 即使通过调用 GetType触发 InvalidCastException .因此,首先需要转换为object。所以它不再是动态类型。之后,我们可以将其转换为 Array。 ,这是 C# 中处理非零基数组的唯一受支持方式。但是Array不是强类型的,所以我们将调用附加到 Cast<string>获得强类型枚举。

关于C#:对象到字符串数组。 [*] 到 [] 错误(了解 VB.NET 和 C# 会有所帮助),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940013/

相关文章:

c# - 使用 ScheduledTasks 类删除计划作业

c# - 我可以信任 Azure Blob RetryPolicy 吗?为什么我在fiddler中找不到这些重试请求

c# - 递归枚举图

c# - SQL Server 查询 : get the sum conditionally

php - swig-php 包装器使用指针,c 代码是一个数组

java - 条件为恰好使用 m 个硬币的硬币找零问题

c# - WPF 绑定(bind)设计时 "Property Expected"错误

vb.net - 检查循环检查哪个复选框

asp.net - 更改用户控件中标签文本的最佳方法是什么?

PHP 遍历 li 列表并为每个项目将值放入数组