Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查字符串中的字符是1还是0_C# - Fatal编程技术网

C# 检查字符串中的字符是1还是0

C# 检查字符串中的字符是1还是0,c#,C#,我通过一个com端口接收到一个字符串,它看起来像是*000000或*110101,或者介于两者之间的任何东西。每个字符表示我拥有的PCB上继电器的状态,星号后的第一个字符表示第一个继电器,依此类推。我需要分别检查每个字符是否为1或0,然后相应地将标签设置为ON或OFF 我的代码是这样的: if(char 1 == "1") { label4.Text = "ON"; } else { label4.Text = "OFF"; } 依此类推所有6个字符。但我不知道如何区

我通过一个com端口接收到一个字符串,它看起来像是*000000或*110101,或者介于两者之间的任何东西。每个字符表示我拥有的PCB上继电器的状态,星号后的第一个字符表示第一个继电器,依此类推。我需要分别检查每个字符是否为1或0,然后相应地将标签设置为ON或OFF

我的代码是这样的:

if(char 1 == "1")
{

    label4.Text = "ON";    
}
else
{
    label4.Text = "OFF";
}
依此类推所有6个字符。但我不知道如何区分每个角色


谢谢

听起来您想使用提取单个
字符

string text = "*110101"; // Wherever you get this from...
label4.Text = text[1] == '1' ? "ON" : "OFF";
label5.Text = text[2] == '1' ? "ON" : "OFF";
label6.Text = text[3] == '1' ? "ON" : "OFF";
label7.Text = text[4] == '1' ? "ON" : "OFF";
label8.Text = text[5] == '1' ? "ON" : "OFF";
label9.Text = text[6] == '1' ? "ON" : "OFF";
这假设您对标签文本设置为“OFF”而不是“1”表示满意。(如注释中所述,字符串文字使用双引号,字符文字使用单引号。)

请注意,我在这里是如何使用条件运算符来简化代码的:如果您希望基本上根据条件在两个值(“开”和“关”)之间进行选择,则条件运算符比
if
/
else
简单得多。当然,不要做得太过火,但这是值得熟悉的

不过,我还建议您将相关标签放入一个集合中。然后你可以使用类似的方法:

for (int i = 0; i < 6; i++)
{
    toggles[i].Text = text[i + 1] == '1' ? "ON" : "OFF";
}
for(int i=0;i<6;i++)
{
切换[i]。Text=Text[i+1]=“1”?“开”:“关”;
}

您已经有字符串了吗

可以使用字符串对象上的索引器访问字符

例如:

string s = "110110";
if (s[3] == '0') label4.Text = "ON";

您可以通过以下方式获取特定字符:

字符串relaystatus=“100110”
char c=relaystatus.ElementAt(0)

或者,您可以将“全部”转换为布尔列表:

var继电器=继电器状态。选择(q=>q==“1”).ToList()


进一步说,您可以创建扩展方法来将字符转换为开/关字符串:

public static class CharExtensions
{
    public static string ToOnOff(this char ch)
    {
        return (ch == '1') ? "On" : "Off";
    }
}
之后,您可以使用它(非常干净的代码):

更新:我认为最好同时检查“0”和“1”值。但这取决于您的输入字符串

public static class CharExtensions
{
    public static string ToOffOn(this char ch)
    {
        switch (ch)
        {
            case '0' : return "Off";
            case '1': return "On";
            default:
                return ch.ToString(); // Or rise exception
        }            
    }
}

使用string.substring(startpos,length)获得一个子字符串并相应地执行操作。你说的索引是什么意思<代码>字符串a=“10”;char one=a[0];char two=a[1]很难理解您的问题,第1行也包含语法错误。char[]chArray=yourstring.tocharray();将以字符数组的形式返回字符串以与..@Flowerking一起使用:为什么要无缘无故地创建数组?只需使用indexer.OP,注意
1
s周围的单引号,以指定字符而不是字符串。除此之外,这会将其设置为另一种方式(1应表示打开,而不是关闭),否则不会将其设置为“关闭”。虽然第二种方法可能有用,我认为使用
ElementAt
而不是字符串上的索引器没有任何好处。是的,我也相信,但这是他的问题,我应该先回答他,然后建议更好的解决方案。在问题中,它要求在哪里使用LINQ?它要求获取字符串中的单个字符,而索引器(例如,
text[0]
)就是一种更好的方法,依我看,它更高效,可读性更强。您认为使用ElementAt的好处是什么?
public static class CharExtensions
{
    public static string ToOffOn(this char ch)
    {
        switch (ch)
        {
            case '0' : return "Off";
            case '1': return "On";
            default:
                return ch.ToString(); // Or rise exception
        }            
    }
}