【问题标题】:Result is displaying a number instead of a set of characters结果显示一个数字而不是一组字符
【发布时间】:2016-04-22 13:58:09
【问题描述】:

我试图将一组字符显示为数组中的一个字符串,但每次运行程序时,它要么显示一个数字,要么显示零。 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); }
    }

谢谢大家!

【问题讨论】:

    标签: c# arrays class char


    【解决方案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);
    

    【讨论】:

    • @AJAlJallaf 是的,因为当所有变量仍为 0 时,result 仅计算一次。更新了我的答案。
    • 您好,我很抱歉没有添加示例imgur.com/I18HTiQ 这是程序如何从不同形式中选择应分配给每个 char 变量的字符的示例。我应该在哪里添加代码公共静态字符串结果?带有 get 命令的那个(不确定正确的术语是什么)。
    • @AJAlJallaf 基本上你用那个替换 public static string result 类中的 Data 字段。虽然我认为你的课程设计不是很好,但这里太宽泛了。请阅读How to askHow to create a MCVE 以了解未来的问题。发布代码图片不是一个好方法。
    • 您好,感谢您的所有帮助,我将继续编写代码并希望一切顺利!并且一定要阅读你提到的未来问题的指导方针。美好的一天。
    • 还有一件事,我对 C# 很陌生,所以如果我让事情变得比他们应该做的更难,我深表歉意。
    【解决方案2】:

    字符是一个数字(确切地说是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,那么在Concat内转换成char

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

    【讨论】:

    • OP 显示图像中chr* 变量的声明。实际上是ints 而不是char
    • 您好,我尝试使用 String.Concat,这是我得到的...imgur.com/a/e1pJP,我有点迷路了。
    • @AJ Al Jallaf:你为什么声明 public static int chrExt, chrAgr, chrCon, chrNeu, chrOpen; 而不是 public static char chrExt, chrAgr, chrCon, chrNeu, chrOpen;int 更改为 char
    • 您好,很抱歉,我忘记将 int 更改为 char imgur.com/mscDpPa 这是我这样做时发生的事情的结果。 imgur.com/I18HTiQ 下面是一个示例,说明程序如何从不同的形式中选择应将哪个字符分配给每个 char 变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多