zoukankan      html  css  js  c++  java
  • c#中什么情况下用(int)什么情况下用Convert.ToInt32?

    1.c#中什么情况下用(int)什么情况下用Convert.ToInt32   ?

    比如说有一个string型的3 ,要给它转换成int型的是用(int)3 ,还是用Convert.ToInt32(3); 还是两个都可以用,为什么?

    解答:这两个都是转换成整型的,只是它们的长度不同。int为16位的,而下面的那个是32位的

    首先,我要指出的是,在 C# 中,int 其实就是 System.Int32,即都是32位的。 

    其次,(int) 和 Convert.ToInt32 是两个不同的概念,前者是类型转换,而后者则是内容转换,它们并不总是等效的。我们很清楚 C# 提供类型检查,你不能把一个 string 强制转换成 int,隐式转换就更加不可能,例如如下的代码就行不通了: 

    string text = "1412"; 
    int id = (int)text; 

    因为 string 和 int 是两个完全不同并且互不兼容的类型。说到这里,你可能会问什么才算是兼容的呢?其实,能够使用 (int) 进行强类型转换的只能是数值类型了,例如 long、short、double等,不过进行这种转换时你需要考虑精度问题。 

    然而,我们很清楚上面的代码中 text 实际上储存的是一个数值,我们希望把这个数值提取出来并以 int 的形式储存起来以便日后的运算使用,那么你就需要进行内容转换了。内容转换也叫内容解释,我们把上面的代码稍稍修改就可以达到目的了: 

    string text = "1412"; 
    int id = Convert.ToInt32(text); 

    除此之外,你还可以使用 Int32.Parse 和 Int32.TryParse 来进行解释。 

    另外,你发现 Convert.ToInt32 有很多重载版本,例如 Convert.ToInt32(double value);,当我们用这个版本来把一个 double 转换成 int 时,ToInt32 会检查被转换的数值是否能够用 int 表示,即是否会发生“越界”,如果是就会抛出 OverflowException,否则就会为你转换,但使用 (int) 进行强制转换,如果被转换的数值大于 Int32.MaxValue,那么你将得到一个错误的结果,例如下面的代码: 

    double d = Int32.MaxValue + 0.1412; 
    int i = (int)d; 

    不过无论你进行什么数值转换,精度问题都是必须考虑的。
  • 相关阅读:
    单例模式
    HashSet、LinkedHashSet、SortedSet、TreeSet
    ArrayList、LinkedList、CopyOnWriteArrayList
    HashMap、Hashtable、LinkedHashMap
    andrew ng machine learning week8 非监督学习
    andrew ng machine learning week7 支持向量机
    andrew ng machine learning week6 机器学习算法理论
    andrew ng machine learning week5 神经网络
    andrew ng machine learning week4 神经网络
    vue组件监听属性变化watch方法报[Vue warn]: Method "watch" has type "object" in the component definition. Did you reference the function correctly?
  • 原文地址:https://www.cnblogs.com/SALIN/p/587296.html
Copyright © 2011-2022 走看看