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.show() C# problem

枚举整型并将它们添加到一个字符串中,然后可以在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);