结果显示的是数字而不是一组字符

时间:2016-04-22 13:58:09

标签: c# arrays class char

我试图将一组字符显示为数组中的一个字符串,但每次运行该程序时,它都会显示一个数字或零。 http://imgur.com/1m77YnX 右边的值集和数字是我用来从多个表单中获取信息的类,左边的代码和值集用于结果表单。 http://imgur.com/8X8S67u 字符来自多种形式,都存储在chr(〜)值中。

如果您需要更多信息,请随时提出。

    public static string result = (chrExt + chrAgr + chrCon + chrNeu + chrOpen).ToString();

    public static string[] names = new string[20];
    public static string[] results = new string[20];

    string name = Data.name;
    string result = Data.result;

    private void label2_Click(object sender, EventArgs e)
    {

    }

    private void button4_Click(object sender, EventArgs e)
    {
        Main frm = new Main();
        this.Hide();
        frm.Show();
    }

    private void btnDisplay_Click(object sender, EventArgs e)
    {

        Data.names[Data.i] = name;
        Data.results[Data.i] = result;

        Data.i = Data.i + 1;

        lstNames.Items.Clear();
        lstResults.Items.Clear();

        for (int i = 0; i < Data.index; i++)
        {
            lstNames.Items.Add(Data.names[i]);
            lstResults.Items.Add(Data.results[i]);
        }
    }

修改

我更改了代码

public static int chrExt, chrAgr, chrCon, chrNeu, chrOpen;

public static char chrExt, chrAgr, chrCon, chrNeu, chrOpen;

然后我改变了

public static string result = (chrExt + chrAgr + chrCon + chrNeu + chrOpen).ToString();

public static string result
    {
        get { return string.Concat(chrExt, chrAgr, chrCon, chrNeu, chrOpen); }
    }

谢谢大家!

2 个答案:

答案 0 :(得分:1)

字符是数字(确切地说是Int16),因此添加数字您有数字。然后使用String.Concat

String test1 = ('a' + 'b').ToString();   //  195 == 97 + 98
String test2 = String.Concat('a', 'b');  // "ab" == "a" + "b"

在你的情况下

String result = String.Concat(chrExt, chrAgr, chrCon, chrNeu, chrOpen);

修改:我可以看到您声明的屏幕截图

public static int chrExt, chrAgr, chrCon, chrNeu, chrOpen;

更好的选择是将char声明为char,而不是int

public static char chrExt, chrAgr, chrCon, chrNeu, chrOpen;

如果您坚持使用int,请转换为char内的Concat

String result = String.Concat(
  (char)chrExt, (char)chrAgr, (char)chrCon, (char)chrNeu, (char)chrOpen);

答案 1 :(得分:1)

您的chr*变量属于int类型。所以这一行

public static string result = (chrExt + chrAgr + chrCon + chrNeu + chrOpen).ToString();

首先汇总整数并将结果转换为string。您可以将其更改为

public static string result = string.Empty + chrExt + chrAgr + chrCon + chrNeu + chrOpen;

或使用string.Concat

public static string result = string.Concat(chrExt, chrAgr, chrCon, chrNeu, chrOpen);

但这当然还没有做你想要的。您声明static成员并仅初始化一次。目前,您的所有chr*变量仍为0

从您的代码中,我无法确定何时将这些变量设置为所需的值。但是之后必须计算result

一种方法是将其声明为属性:

public static string Result
{
    get { return string.Concat(chrExt, chrAgr, chrCon, chrNeu, chrOpen); }
}

或使用C#6作为表达身体的成员:

public static string Result => string.Concat(chrExt, chrAgr, chrCon, chrNeu, chrOpen);