如何从WCF打印数组的值以形成标签?

时间:2018-12-03 00:14:06

标签: c# arrays winforms wcf

WCF生成6个随机彩票号码,它在wcf服务上的数组中返回它们,但是我无法将其打印到表格上的标签上。

如果尝试将其打印到消息框中,则会显示“无法将值解析为int32类型”

我试图在逻辑上像form array = service array那样创建一个新数组,因为它返回一个数组,服务应该是一个数组吗?这样我得到无法将类型int隐式转换为int []

这是我的位置:

IService

public interface ILottoService
{

    [OperationContract]

    int[] GenerateLottoDrawNums();

    [OperationContract]

    int[] GenerateIrishLottoNums();

}

服务

 public int[] GenerateLottoDrawNums()
    {

        int min = 1;
        int max = 59;


        int[] randomNums = new int[6];


        Random rand = new Random();


        for (int i = 0; i < randomNums.Length; i++)
        {

            int tempNum = rand.Next(min, max); 

            while (IsDuplicate(tempNum, randomNums))
            {
                tempNum = rand.Next(7);
            }
            randomNums[i] = tempNum;

        }


        return randomNums;

    }

    public Boolean IsDuplicate(int tempNum, int[]randomNums)
    {
        foreach (var item in randomNums)
        {
            if (item == tempNum)
            {
                return true;
            }
        }
        return false;
    }
}
}

表格

    public partial class FrontEnd : Form
{
    LottoServiceReference.LottoServiceClient ws = null;
    public FrontEnd()
    {
        InitializeComponent();
    }

    private void FrontEnd_Load(object sender, EventArgs e)
    {
        ws = new LottoServiceReference.LottoServiceClient();
    }




    private void btnLottoDraw_Click(object sender, EventArgs e)
    {
        try
        {
            int[] LottoDrawNums = new int[6];

            for (int i = 0; i < LottoDrawNums.Length; i++)
            {
                LottoDrawNums[i] = ws.GenerateLottoDrawNums();

                lblNum1.Text = String.Join(",", LottoDrawNums.ToString());

                MessageBox.Show(String.Join(",", ws.GenerateLottoDrawNums()));

                Console.WriteLine(String.Join(",", ws.GenerateLottoDrawNums()));
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }


    }

    }
}

}

猜猜我缺少一些[]或int []吗?

我的大学导师束手无策,她把我介绍给你们。说“它认为它是一个int,不是。尝试转换为String或List然后打印出来。她在Google上搜索并发现了有关转换的Stack Overflow问题,但我没有保存它,所以在家里找不到它。< / p>

谢谢。

3 个答案:

答案 0 :(得分:1)

尝试使用StringBuilder,如下所示:

StringBuilder sb = new StringBuilder ();
For each element in array:
   sb.Append($"{element} ,")

String arrayAsString = sb.ToStirng(0, sb.Length-2);

LblNum1.Text = arrayAsString;
MessageBox.Show(arrayAsString);

此外,我认为您缺少IService定义上方的Service Contract属性

请参见https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.operationcontractattribute?view=netframework-4.7.2

答案 1 :(得分:1)

您的项目似乎没有问题。我复制代码片段并在本地进行测试,效果很好。也许就像楼上的兄弟说的那样,您可能丢失了一些东西。我建议您发布有关项目的更多详细信息。 enter image description here 您可以将断点添加到服务器端,并在调试模式下运行WCF服务并检查返回值。或者您添加另一种方法来测试该服务是否运作良好。

应该注意,我将WCF托管在控制台应用程序中并使用基本绑定。

答案 2 :(得分:1)

此代码

for(int i = 0; i < LottoDrawNums.Length; i++)
{
      lblNum1.Text = LottoDrawNums[0].ToString();
}

将数组的唯一位置设置为标签。

尝试String.Join https://docs.microsoft.com/en-us/dotnet/api/system.string.join?view=netframework-4.7.2

LblNum1.Text = String.Join(" , ", LottoDrawNums);

这将返回类似“ 3,45,6,54,56,7,45”的信息

也可以在MessageBox.Show(String.Join(" , ", ws.GenerateLottoDrawNums()));

中使用它

GenerateLottoDrawNums和IsDuplicate方法工作正常!