MessageBox.show() C# problem
本文关键字:problem show MessageBox | 更新日期: 2023-09-27 18:09:39
查看下面的代码:
ChooseGrade ChGrade = new ChooseGrade();
string GrCl = ChGrade.getGrCl().ToString(); // function getGrCl gets "public int[] grad_class=new int[2];" in ChooseGrade Class
MessageBox.Show(GrCl);
但是我在消息框中看到这个"系统。Int32[]" grade_class数组的即时容器。你能帮我吗?
枚举整型并将它们添加到一个字符串中,然后可以在MessageBox中显示:
string message = "";
int myArray[] = ChGrade.getGrCl();
foreach(var num in myArray)
message += String.Format("{0} ", num);
MseeageBox.Show(message);
默认的ToString()
-implementation返回类型。因为getGrCl()
的返回值是一个整数数组,所以ToString()方法只返回这个。
您得到的是getGrCl()方法返回的对象的类型名。如果你没有重写ToString()方法,那就是预期的行为。
正如我所看到的,返回的对象是一个整数数组,所以你不能改变它的ToString()方法,默认情况下它只给你类型名称。如果你想获得一个包含这个数组值的字符串,可以遍历返回的数组并使用StringBuilder来构建你的字符串,或者在你的类中创建一个单独的方法来处理这个问题。
希望这对你有帮助。如果你还有问题就问吧!
在打印之前需要将数组转换为String。
一种方法是:
var GrCl=ChGrade.getGrCl();
string output=string.Join(",", GrCl.Select(x => x.ToString()).ToArray());
MessageBox.Show(output);
编辑:正如@spender所指出的,这在这种情况下不起作用,因为GrCl
是一个没有Select
方法的int32[]
。
正如其他答案在此期间所显示的那样,一种变通方法是手动遍历数组,并将每个元素转换并附加到output
中。
foreach (var x in GrCl){
output+=x.ToString();
}
Show()中的GrCl通过调用ToString()方法转换为String。由于int[]的方法返回字符串"System"。Int32"你完全明白了。你可以这样做:
public string IntArrToString (int [] arr)
{
string intArrStr = "";
foreach (int number in arr)
intArrStr += number.ToString() + " ";
return intArrStr;
}
但是在这种情况下最好使用StringBuilder:)然后你可以像这样调用Show:
MessageBox.Show (IntArrToString (ChGrade.getGrCl()));
这是因为要转换为String的int是Array。您需要循环遍历数组,或者选择要打印的特定索引。
ChooseGrade ChGrade = new ChooseGrade();
string GrCl = ChGrade.grad_class[0].ToString();
MessageBox.Show(GrCl);
你需要这样做:
grad_class[0].ToString()
var x = ChGrade.getGrCl();
var messageString = string.Join(",", x.Select(i => i.ToString()))
MessageBox.Show(messageString);