繁体   English   中英

CS1503:参数 1:无法从 'int' 转换为 'byte' C#

[英]CS1503: Argument 1: cannot convert from 'int' to 'byte' C#

private byte[] ParsePatternString(string szPattern)
{
  List<byte> list = new List<byte>();
  foreach ( string text in szPattern.Split(new char[] { ' ' }) )
  {
    list.Add((text == "?") ? 0 : Convert.ToByte(text, 16));
  }
  return list.ToArray();
}

错误发生在list.Add((text == "?")? 0: Convert.ToByte(text, 16)); 我想知道是什么造成了错误,因为基于其他关于我尝试过的类似问题的问题,它似乎没有奏效。

0是一个int字面量。 就像 C 一样,无法指定小于intinteger 文字 条件运算符的类型是两个值的通用类型,因此您的表达式会生成一个int表达式,并且不能传递给byte参数。 您需要使用以下任一方法将表达式转换为byte

list.Add(text == "?" ? (byte)0 : Convert.ToByte(text, 16));
list.Add((byte)(text == "?" ? 0 : Convert.ToByte(text, 16)));

在这种情况下,您可以使用byte.MinValue

private byte[] ParsePatternString(string szPattern)
{
    List<byte> list = new List<byte>();
    foreach ( string text in szPattern.Split(new char[] { ' ' }) )
    {
        list.Add(text == "?" ? byte.MinValue : Convert.ToByte(text, 16));
    }
    return list.ToArray();
}

实际上我以前从未使用过 CSharp,但我认为问题可能在于它将 0 读取为 int 而不是 Boolean,并且不会自动转换它。 根据我正在阅读的内容,您需要添加这样的显式转换:

list.Add((text == "?") ? (byte) 0 : Convert.ToByte(text, 16));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM