关于System.Convert类型转换问题

百曉生 2014-09-30 03:04:47
C#本质论这本书上说,System.Convert只支持预定义数量的类型,而且是不可扩展的,它允许从任何基本数据类型转换到其它基本数据类型

我的疑问是,为什么我这样的程序会出错
string misc = "36.987";
string mis = "0";
double dbu = Convert.ToDouble(misc);
bool boolean = Convert.ToBoolean(dbu);
bool boomis = Convert.ToBoolean(mis); //这里出错
int cnt = Convert.ToInt32(misc); //这里也出错
Console.WriteLine("字符串转换为浮点型:dbu = {0}\n", dbu);
Console.WriteLine("字符串转换为布尔型:boolean = {0}\n", boolean);
Console.WriteLine("字符串转换为整型:cnt = {0}\n", cnt);


出错结果——,会是哪方面的原因呢?还是我哪里理解错了?求指点
...全文
182 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2014-09-30
  • 打赏
  • 举报
回复
字符串 "0" 本来就不能转为布尔形啊。就是c++也没法这样转啊。
百曉生 2014-09-30
  • 打赏
  • 举报
回复
引用 13 楼 smthgdin 的回复:
[quote=引用 6 楼 u012421456 的回复:] [quote=引用 1 楼 Z65443344 的回复:] C#不是C++ 数字类型不能转换为bool类型 小数也不能转换为整数 如果想小数转整数,你需要先转double,double再转int
它允许从任何基本数据类型转换到其它基本数据类型 书上这么说,是说错了,还是我哪里理解错了吗?求指点[/quote] 你先将“0”转成数字,再转布尔。[/quote] 嗯,我试试, 已经结贴了,不能给分了,不好意思啊
smthgdin_020 2014-09-30
  • 打赏
  • 举报
回复
引用 6 楼 u012421456 的回复:
[quote=引用 1 楼 Z65443344 的回复:] C#不是C++ 数字类型不能转换为bool类型 小数也不能转换为整数 如果想小数转整数,你需要先转double,double再转int
它允许从任何基本数据类型转换到其它基本数据类型 书上这么说,是说错了,还是我哪里理解错了吗?求指点[/quote] 你先将“0”转成数字,再转布尔。
百曉生 2014-09-30
  • 打赏
  • 举报
回复
引用 10 楼 zhi_ai_yaya 的回复:
[quote=引用 2 楼 Z65443344 的回复:] 数值类型互相转换是没有问题的 需要注意的就是bool类型和string类型 不是任何string都能转成别的类型的 比如"XYZ"这个字符串,你不管转成什么数值类型,不管按什么进制转换,都是转不了的. 而bool类型,ToString之后,是"True"或"False",而不是"1"和"0".
不能“想当然”,要根据库提供的函数和参数操作,否则就出错。 Convert.ToBoolean 方法 (String) 参数必须能被它的规则识别才行,而不是0和1就行的。
using System;

public class BooleanConversion
{
   public static void Main()
   {
      String[] values = { null, String.Empty, "true", "TrueString", 
                          "False", "    false    ", "-1", "0" };
      foreach (var value in values) {
         try
         {
            Console.WriteLine("Converted '{0}' to {1}.", value,  
                              Convert.ToBoolean(value));
         }
         catch (FormatException)
         {
            Console.WriteLine("Unable to convert '{0}' to a Boolean.", value);
         }
      }   
   }
}
// The example displays the following output:
//       Converted '' to False.
//       Unable to convert '' to a Boolean.
//       Converted 'true' to True.
//       Unable to convert 'TrueString' to a Boolean.
//       Converted 'False' to False.
//       Converted '    false    ' to False.
//       Unable to convert '-1' to a Boolean.
//       Unable to convert '0' to a Boolean.
[/quote] 没仔细看MSDN文档,谢谢了
引用 11 楼 Z65443344 的回复:
书上说的也不能说错,只是没说全而已
嗯,基本理解了,谢谢指点了
於黾 2014-09-30
  • 打赏
  • 举报
回复
书上说的也不能说错,只是没说全而已
我叫小菜菜 2014-09-30
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
数值类型互相转换是没有问题的 需要注意的就是bool类型和string类型 不是任何string都能转成别的类型的 比如"XYZ"这个字符串,你不管转成什么数值类型,不管按什么进制转换,都是转不了的. 而bool类型,ToString之后,是"True"或"False",而不是"1"和"0".
不能“想当然”,要根据库提供的函数和参数操作,否则就出错。 Convert.ToBoolean 方法 (String) 参数必须能被它的规则识别才行,而不是0和1就行的。
using System;

public class BooleanConversion
{
   public static void Main()
   {
      String[] values = { null, String.Empty, "true", "TrueString", 
                          "False", "    false    ", "-1", "0" };
      foreach (var value in values) {
         try
         {
            Console.WriteLine("Converted '{0}' to {1}.", value,  
                              Convert.ToBoolean(value));
         }
         catch (FormatException)
         {
            Console.WriteLine("Unable to convert '{0}' to a Boolean.", value);
         }
      }   
   }
}
// The example displays the following output:
//       Converted '' to False.
//       Unable to convert '' to a Boolean.
//       Converted 'true' to True.
//       Unable to convert 'TrueString' to a Boolean.
//       Converted 'False' to False.
//       Converted '    false    ' to False.
//       Unable to convert '-1' to a Boolean.
//       Unable to convert '0' to a Boolean.
百曉生 2014-09-30
  • 打赏
  • 举报
回复
引用 7 楼 Z65443344 的回复:
string是字符串,你不能要求任意字符串都能转成数值. 必须是符合数值规则的字符串才能转成对应类型的数值 然后数值之间你就可以任意转了.
嗯,有道理,谢谢了 那我图片中20行的代码错误是因为字符串的内容得要求先转为浮点数,再转为整数,这样说可以吗?
於黾 2014-09-30
  • 打赏
  • 举报
回复
引用 6 楼 u012421456 的回复:
[quote=引用 1 楼 Z65443344 的回复:] C#不是C++ 数字类型不能转换为bool类型 小数也不能转换为整数 如果想小数转整数,你需要先转double,double再转int
它允许从任何基本数据类型转换到其它基本数据类型 书上这么说,是说错了,还是我哪里理解错了吗?求指点[/quote] 确实是任意类型都可以互相转啊,不过对于数据有要求,数据本身必须能转,才能转.数据本身不是那个格式的,就转不了. string确实可以转int或double或bool 不过必须是整数才能转int,小数转double,true或false转bool 不是随便写个XYZ就能转成任意数字了
於黾 2014-09-30
  • 打赏
  • 举报
回复
string是字符串,你不能要求任意字符串都能转成数值. 必须是符合数值规则的字符串才能转成对应类型的数值 然后数值之间你就可以任意转了.
百曉生 2014-09-30
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
C#不是C++ 数字类型不能转换为bool类型 小数也不能转换为整数 如果想小数转整数,你需要先转double,double再转int
它允许从任何基本数据类型转换到其它基本数据类型 书上这么说,是说错了,还是我哪里理解错了吗?求指点
於黾 2014-09-30
  • 打赏
  • 举报
回复
好吧,是我记错了. 数值可以转bool,0是false,不等于0是true 不过"0"是个字符串,你从字符串直接转bool不行. 要么就写成"False"或"True",也是可以转的
百曉生 2014-09-30
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
数值类型互相转换是没有问题的 需要注意的就是bool类型和string类型 不是任何string都能转成别的类型的 比如"XYZ"这个字符串,你不管转成什么数值类型,不管按什么进制转换,都是转不了的. 而bool类型,ToString之后,是"True"或"False",而不是"1"和"0".
不好意思,刚看到这个 你的意思是我的图片中的19行不能这么做,好吧,那请问20行怎么说呢?
百曉生 2014-09-30
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
C#不是C++ 数字类型不能转换为bool类型 小数也不能转换为整数 如果想小数转整数,你需要先转double,double再转int
数字类型不能转换为bool类型 但是这样

string misc = "36.987";
double dbu = Convert.ToDouble(misc);
bool boolean = Convert.ToBoolean(dbu);
却是正确的,请问是什么情况呢
於黾 2014-09-30
  • 打赏
  • 举报
回复
数值类型互相转换是没有问题的 需要注意的就是bool类型和string类型 不是任何string都能转成别的类型的 比如"XYZ"这个字符串,你不管转成什么数值类型,不管按什么进制转换,都是转不了的. 而bool类型,ToString之后,是"True"或"False",而不是"1"和"0".
於黾 2014-09-30
  • 打赏
  • 举报
回复
C#不是C++ 数字类型不能转换为bool类型 小数也不能转换为整数 如果想小数转整数,你需要先转double,double再转int

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧