代码之家  ›  专栏  ›  技术社区  ›  Amra

从字符串转换为int或int32。可能吗?

  •  1
  • Amra  · 技术社区  · 15 年前

    我在一个博客中看到,可以将字符串转换为int,使用(int?)。请参阅博客 here

    但是,当我尝试这样做时,visual studio抱怨说不能隐式地将类型“int”转换为“string”。

    真的有可能吗? 还是我做错了什么?

    13 回复  |  直到 15 年前
        1
  •  2
  •   TToni    15 年前

    在文章中提到一个XElement被强制转换为int(或int?),因为XElement实现显式转换运算符。

    你不能用那种方法来投弦。你必须使用int.Parse或int.TryParse这样的代码。

        2
  •  2
  •   Sean U    15 年前

    使用int.Parse()或者更好的方法是使用int.TryParse()

    int someInt;
    if(int.TryParse(aString, out someInt)
    {
        // work with the int
    }
    else
    {
        // handle error
    }
    

    区别在于,如果字符串不是有效整数,int.Parse()将引发异常。int.TryParse()返回true,如果是有效整数,则将其out参数设置为结果,否则返回false,out参数的值未定义。

        3
  •  2
  •   Oded    15 年前

    文章讨论了 null coalesce operator ( ?? ),不可为空( int? , bool? 等等)。

    这是一种确保第一个非空值可以分配给变量的机制。

    来自MSDN:

    用于为可为空的值类型和引用类型定义默认值。如果不为空,则返回左侧操作数;否则返回右侧操作数。

    运算符的两边应为同一类型,或在它们之间进行隐式转换以使用它。

        4
  •  2
  •   veljkoz Danko Valkov    15 年前

    你想做的事是做不到的。但是,您可以使用extension方法,因此您最终会像这样使用它:

    int? myInt = "123".ToNullableInt();
    

    扩展的定义如下:

    public static class Extensions
    {
       public static int? ToNullableInt(this string arg)
       {
           int result;
           if (int.TryParse(arg, out result))
           {
               return result;
           }
           return null;
        }
    }
    
        5
  •  1
  •   driis    15 年前

    不能将字符串转换为int,但可以进行转换。所以你可能想这样做:

    int value = Convert.ToInt32("1234");
    

    链接到的博客文章并没有讨论将字符串强制转换为int,而是讨论了如何使用空合并运算符。处理转换字符串的一种方法是使convert方法返回 int? ,然后使用空合并运算符提供所选的默认值。然后你可以说:

    int value = SafeConvert.ToInt32(stringValue) ?? 1; // Assigned 1 if conversion fails.
    

    这是SafeConvert.ToInt32方法的一个可能实现:

    public static int? ToInt32(string value)
    {
        int n;
        if(!int.TryParse(value,out n))
            return null;
        return n;
    }
    
        6
  •  1
  •   Lex Lavnikov    15 年前

    无法将字符串强制转换为整数。 但是,int.Parse(string)和Convert.ToInt32(object)可能有帮助。

    您可以将任何类型的空值(只要它是盒装的)强制转换为可为空的。。。在这种情况下,你总是会得到空值。

        7
  •  0
  •   alpha-mouse    15 年前
        8
  •  0
  •   Ali Tarhini    15 年前
     int number =   int.Parse("123");
    
        9
  •  0
  •   Kendrick    15 年前

    在那篇文章中,我没有看到他把字符串转换成int。如果你知道字符串是int,你可以使用 Int32.Parse("123") ,如果您不确定,可以使用 Int32.TryParse("123x",out intValue) ,如果字符串不是int,则返回false(与抛出错误相反)

        10
  •  0
  •   Breandán    15 年前

    你就不能用胰蛋白酶法吗?

    string stringToCast = "1";
    int result;
    int.TryParse(stringToCast, out result);
    
        11
  •  0
  •   Jeff Hornby    15 年前

    Yuo应该能够使用int.Parse或int.TryParse进行转换。如果你只是做一个简单的(int)myvar,那么它会给你一个错误。

        12
  •  0
  •   gligoran zz-sergant    15 年前

    在C#中无法从字符串转换为int。你可以用int.Parse(somestring)来完成。

    那篇文章所说的是:

    string a = somestring ?? "";
    

    是一个很短的方法:

    string a;
    if (somestring == null)
    {
        a = somestring;
    }
    else
    {
        a = "";
    }
    
        13
  •  0
  •   tchrikch    11 年前

    让我们用示例代码简要地看一下

    int x = int.parse("546")
    

    将产生产出

    x = 546
    

    但是这个

    x = int.parse("546.0")
    

    会出错。为此你必须加倍努力

    x = convert.todouble("546.0")
    

    会给

    x = 546.0 
    

    convert.toint32(x) 将产生 546 . 所以关键是包含double-akin文本的字符串不能直接转换为double-primitive类型。