为什么传递变量失败,错误值类型为'string'不能转换为'string()'? [英] Why does passing variables fails with error value type 'string' cannot be converted into 'string()'?

查看:104
本文介绍了为什么传递变量失败,错误值类型为'string'不能转换为'string()'?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用VB为某些C#代码创建自动测试. 示例:对于表Orchestra,我有1条记录,记录了组织1123,其中用户xxx的值为externalId = null,名称为Charm White.因此,我的测试将是检查期望的externalId是否为null以及该用户的名称是否为白色.

I'm trying to create an automated test for some C# code using VB. Example: For the table Orchestra, i have 1 record for the organisation 1123, whereby user xxx has value for externalId = null and name is Charm White. So my test would be to check if expected externalId is null and the name is charm white for that user.

但是,在VB代码中声明值类型为string [] externalIds的变量时,会出现错误:

However, when declaring variables of value type string[] externalIds in VB code, it gives error :

类型为'String'的值不能转换为'string()'

value of type 'String' cannot be converted to 'string()'

这是要测试的C#代码:

Here's the C# code to be tested:

  public string[] GetNamesFromExternalIds(string organisationId, string[] externalIds)
    {
        string externalIdsString = null;
        foreach (string externalId in externalIds)
        {
            if (externalIdsString != null)
            {
                externalIdsString += ",";
            }
            externalIdsString += "'" + externalId + "'";
        }

        DbParameterCollection parameters = new DbParameterCollection();
        parameters.Add(new DbParameter("@OrganisationId",SqlDbType.NVarChar, 
        organisationId));

        string sql = string.Format(@"SELECT ExternalId, Name FROM Orchestra 
        WHERE ExternalId IN ({0}) AND OrganisationId = @OrganisationId",
        externalIdsString);

        ListObject list = new ListObject(_Accessor);
        list.Read(sql, parameters);

        List<string> names = new List<string>();
        foreach (string externalId in externalIds)
        {
            foreach (DataRow dataRow in list.Table.Rows)
            {
                if (dataRow["ExternalId"].ToString() == externalId)
                {
                    names.Add(dataRow["Name"].ToString());
                    break;
                }
            }
            names.Add(null);
        }

        return names.ToArray();
    }


这就是我要尝试的VB:


Here's what I'm trying into VB:

<TestClass()> Public Class UT_GetNamesFromExternalIds
    <TestMethod()> Public Sub GetNamesFromExternalIds()

        Dim organisationId As String = "1123"

        Dim externalIds() As String ={0}
        Dim user as string = "XXX"
        Dim names As String = String.Empty

        Dim ExpNames As String = "Charm White"
        Dim ExpexternalIds As String = Nothing

        Dim DataServer As New DataServer()
        Dim Accessor = DataServer.GetAccessor()
        Dim _StandardHeader = New StandardHeader
        Dim _AuditProvider = New Audit.AuditProvider(_StandardHeader)
        Dim AD As New Ceridian.Administration.Authentication.AuthenticationData(Accessor, _AuditProvider)

        externalIds = AD.GetNamesFromExternalIds(organisationId, 
         externalIds)

        Assert.AreEqual(1, externalIds.Count)
        Assert.AreEqual(ExpexternalIds, externalIds(0))


        Assert.AreEqual(ExpNames, names)

        Console.WriteLine(ExpNames)
        Console.WriteLine(names)

        Console.WriteLine(ExpexternalIds)
        Console.WriteLine(externalIds)
    End Sub

End Class

推荐答案

假设您试图将0001214传递到被测函数中,并且期望结果为Charm White,那么您需要使用以下命令创建一个字符串数组您的0001214值-将其传递给函数并测试结果:

Assuming that you are trying to pass 0001214 into the function under test and are expecting Charm White as the result then you need to create a string array with your 0001214 value - pass it to the function and test the result:

Dim externalIds As String() = {"0001214"}
Dim organisationId As String = "1123"
Dim names = AD.GetNamesFromExternalIds(organisationId, externalIds)

Dim ExpNames As String = "Charm White"

Assert.AreEqual(1, names.Count)
Assert.AreEqual(ExpNames, names(0))

此外,删除以下行:

Dim names As String = String.Empty

由于被测函数返回的值是字符串数组而不是字符串.我还移动了您的organisationId声明,以使其接近使用它的代码.

As the value returned from the function under test is a string array not a string. I have also moved your declaration of organisationId so that it is close to the code that uses it.

这篇关于为什么传递变量失败,错误值类型为'string'不能转换为'string()'?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆