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>
谢谢。
答案 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属性
答案 1 :(得分:1)
您的项目似乎没有问题。我复制代码片段并在本地进行测试,效果很好。也许就像楼上的兄弟说的那样,您可能丢失了一些东西。我建议您发布有关项目的更多详细信息。 您可以将断点添加到服务器端,并在调试模式下运行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方法工作正常!