首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已编译VB.NET类中的拆分字符串错误

已编译VB.NET类中的拆分字符串错误
EN

Stack Overflow用户
提问于 2010-04-01 17:45:38
回答 2查看 1K关注 0票数 0

我在编译一些VB代码时遇到了一些困难,我编写了一些VB代码,以便根据一组预定义的参数(逗号、分号、冒号等)来拆分字符串。我已经成功地编写了一些代码,这些代码可以加载到定制的VB组件中(我将这些代码放在称为Grasshopper的插件中的VB.NET组件中),一切都很好。例如,假设我的传入字符串是"123,456“。当我将这个字符串输入我编写的VB代码时,我会得到一个新的列表,其中第一个值是"123“,第二个值是"456”。

但是,我一直试图将这段代码编译到它自己的类中,这样我就可以从标准的VB组件中分别在Grasshopper中加载它。当我试图编译这段代码时,它并不是将字符串分割成一个包含两个值的新列表。相反,我收到一条信息,上面写着"System.String []“。你们觉得我的编译代码有什么问题吗?您可以在以下链接中找到我的问题的截图图像:单击以查看图像

这是编译后的类的VB代码:

代码语言:javascript
复制
Public Class SplitString
Inherits GH_Component
Public Sub New()
    MyBase.New("Split String", "Split", "Splits a string based on delimeters", "FireFly", "Serial")
End Sub
Public Overrides ReadOnly Property ComponentGuid() As System.Guid
    Get
        Return New Guid("3205caae-03a8-409d-8778-6b0f8971df52")
    End Get
End Property
Protected Overrides ReadOnly Property Internal_Icon_24x24() As System.Drawing.Bitmap
    Get
        Return My.Resources.icon_splitstring
    End Get
End Property
Protected Overrides Sub RegisterInputParams(ByVal pManager As Grasshopper.Kernel.GH_Component.GH_InputParamManager)
    pManager.Register_StringParam("String", "S", "Incoming string separated by a delimeter like a comma, semi-colon, colon, or forward slash", False)
End Sub
Protected Overrides Sub RegisterOutputParams(ByVal pManager As Grasshopper.Kernel.GH_Component.GH_OutputParamManager)
    pManager.Register_StringParam("Tokenized Output", "O", "Tokenized Output")
End Sub
Protected Overrides Sub SolveInstance(ByVal DA As Grasshopper.Kernel.IGH_DataAccess)
    Dim myString As String
    DA.GetData(0, myString)

    myString = myString.Replace(",", "|")
    myString = myString.Replace(":", "|")
    myString = myString.Replace(";", "|")
    myString = myString.Replace("/", "|")
    myString = myString.Replace(")(", "|")
    myString = myString.Replace("(", String.Empty)
    myString = myString.Replace(")", String.Empty)

    Dim parts As String() = myString.Split("|"c)
    DA.SetData(0, parts)

End Sub

端级

这是我在Grasshopper:中创建的自定义VB代码

代码语言:javascript
复制
Private Sub RunScript(ByVal myString As String, ByRef A As Object)
myString = myString.Replace(",", "|")
myString = myString.Replace(":", "|")
myString = myString.Replace(";", "|")
myString = myString.Replace("/", "|")
myString = myString.Replace(")(", "|")
myString = myString.Replace("(", String.Empty)
myString = myString.Replace(")", String.Empty)

Dim parts As String() = myString.Split("|"c)
A = parts

结束子对象

端级

EN

回答 2

Stack Overflow用户

发布于 2010-04-01 17:51:46

嗯,对蚱蜢一无所知,我只能猜.

如果在字符串数组上调用System.String [],.NET将打印ToString()。所以,我猜你给了Grasshopper一个数组,它想要一个字符串。

所以,再猜一猜,不如我们试试:

代码语言:javascript
复制
Dim parts As String() = myString.Split("|"c) 
For I = 0 to parts.Length -1
    DA.SetData(I, parts[I]) 
票数 1
EN

Stack Overflow用户

发布于 2010-04-02 15:04:43

我试过你建议的代码片段..。但效果不太好。我认为原始代码中的问题是我试图发送一个值列表(即。(部件)到单个输出节点。因此,当我使用DA.SetData(0,parts)时,我要为编译后的组件的第一个输出节点编写一个值列表。但是,我认为问题在于组件不知道部件是一个列表。在前面给出的示例中,如果传入的字符串是“123 456”,那么我的结果拆分列表应该有两个值(123和456)。我不认为我已经宣布了部分是一个清单。你对怎么做有什么想法吗?同样,如果您单击原始电子邮件中的链接(同时使用Internet Explorer).我不知道为什么Firefox不打开它),你应该在Grasshopper插件中看到设置的屏幕截图,这将帮助你了解正在发生的事情。再次感谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2562401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档