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

Posted

技术标签:

【中文标题】如何从 WCF 打印数组的值以形成标签?【英文标题】:How do I print a value of an array from WCF to form label? 【发布时间】:2019-05-04 06:49:29 【问题描述】:

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

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

我尝试在表单上创建一个新数组,逻辑如下,表单数组 = 服务数组,因为它返回一个数组,所以服务应该是一个数组,不是吗?这样我得到 Cannot implicitly convert type int to 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 问题,但我没有保存它并且在家里找不到它。

谢谢。

【问题讨论】:

【参考方案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 方法工作正常!

【讨论】:

- 我在 MessageBox.Show(String.Join(",", ws.GenerateLottoDrawNums())) 处得到“'GenerateLottoDrawNums'。该值无法解析为 int32 类型”;知道为什么吗?谢谢! 还有这个 >> LblNum1.Text = String.Join(" , ", LottoDrawNums); ,跑步好吗? 不,也没有。我已经把它放在了一个尝试中。它抛出异常,但没有提供任何对我来说意味着什么的信息。我已经用我现在所在的位置编辑了上面的表单代码。我是否要创建一个名为 LottoDrawNums 的新 int[] 数组,然后在 for 循环 中有 LottoDrawNums[i] = ws.GenerateRandomNums()即表单数组LottoDrawNums = 服务数组RandomNums? 用代码创建了一个控制台应用,一切正常>>github.com/parxal/lotonumbers/blob/master/LotoNumber/LotoNumber/… 好吧,在看到代码在控制台应用程序上运行后,我删除了服务引用并创建了一个新的,现在它可以运行了。代码是一样的。你在跟我开玩笑吗!?一个多星期了。谢谢你的帮助!!【参考方案2】:

尝试使用 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

【讨论】:

【参考方案3】:

您的项目似乎没有问题。我复制代码sn-ps并在本地测试,效果很好。可能就像楼上的兄弟说的,你可能丢了东西。我建议您发布有关您的项目的更多详细信息。 您可以在服务器端添加断点并在调试模式下运行WCF服务并检查返回值。或者你添加另一个方法来测试服务是否运行良好。

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

【讨论】:

以上是关于如何从 WCF 打印数组的值以形成标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较 2 个数组中的值以过滤掉元素

如何从 Vue.Js 中的变量向数组添加值以制作条形图

如何仅获取 index[0] 的值以显示 JSON 对象中的数组?

NSSet 在使用 SetWithArray 时如何比较数组中的值以删除重复项

如何过滤数组中不需要的值以进行绘图?使用 numpy 数组的 matplotlib 中的 ValueError

如何从 django 交互式 shell 打印 TEMPLATE_DIRS 的值?