【问题标题】:Cannot implicitly convert type 'string' to 'byte' in c#无法在 C# 中将类型“字符串”隐式转换为“字节”
【发布时间】:2017-03-31 18:20:57
【问题描述】:

例如考虑以下代码:

Properties.Settings.Default.startUp = cmbStart.SelectedIndex.ToString();

在 vb.net 中,同样的方法可以正常工作,但在 c# 中却不行。这里startUp是用户定义的设置typebytecmbStartComboBox。我该如何解决这个错误?

【问题讨论】:

  • 正如错误所说,RHS 正在返回一个字符串,而您期望的是字节。您能否从该组合框中粘贴一个示例值,并让我们知道 startUp 应该做什么?
  • 您正在尝试为 startUp 分配一个字节数据类型的字符串...
  • 导致cmbStart.SelectedIndex.ToString(); 等于字符串中的索引值。如果索引为 0,它将返回 0 作为字符串中的值。
  • 您需要列出实际错误,selectedIndex 为空(其中 cas 使用类似 String.Format("{0}", cmbStart.SelectedIndex) 或 cmbStart 本身尚未初始化(所以null)。.ToString() 适用于所有非 null 的系统类型。(用户定义的类型可能会抛出异常,但这是另一天的讨论)
  • 尝试使用Option Strict On 运行VB.NET,此转换也会失败。默认情况下,VB 允许你做一些愚蠢的事情。

标签: c#


【解决方案1】:

区别在于VB.Net允许字符串隐式转换为字节,如果值不能转换则抛出异常,但c#不允许字符串隐式转换。

SelectedIndex 是整数类型,尝试将其转换为byte 而不是使用ToString() 方法,使用以下代码:

Properties.Settings.Default.startUp = (byte)cmbStart.SelectedIndex;

有用的链接

【讨论】:

  • @RubelHosen 我用一些关于这个问题的有用链接更新了我的答案,看看
【解决方案2】:

你不能。字符串类型包含多个字节 你可以选择其中一个角色

cmbStart.SelectedIndex.ToString()[0]

这会将转换后的索引的第一个字符返回为字符串(可能不是您想要的)。 但是如果您的组合框没有超过 256 个项目可供选择, 您可以将所选项目的返回值转换为字节并将其存储在启动中。

(byte)cmbStart.SelectedIndex

【讨论】:

  • 这会返回一个字符。即使您将其转换为字节,它也不是真正的索引,而是索引第一个数字的字符代码。例如,如果在组合框中选择了第 12 项,它将返回 '1' 的 ASCII 码。
猜你喜欢
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多