如何从 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 打印数组的值以形成标签?的主要内容,如果未能解决你的问题,请参考以下文章
如何仅获取 index[0] 的值以显示 JSON 对象中的数组?
NSSet 在使用 SetWithArray 时如何比较数组中的值以删除重复项