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

问题描述 投票:0回答:3

WCF生成6个随机抽奖号码,它在wcf服务上以数组形式返回它们,但是我无法将其打印到表单上的标签上。

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

我尝试在逻辑上形成一个新的数组,形式为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问题但是我没有保存它并且无法在家中找到它。

谢谢。

c# arrays winforms wcf
3个回答
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方法工作正常!


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定义之上的服务合同属性

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.