当我使用以下代码时,感觉就像我在某处出错了。
object obj = 1;
int i = int.Parse(obj.ToString());
有更简单的方法吗?
答案 0 :(得分:5)
嗯,obj
中的实际上是什么?如果它只是一个盒装int
,那么只需转换为unbox:
int i = (int)obj;
对于预定义较少的内容,您也可以尝试:
int i = Convert.ToInt32(obj);
将处理多种情况,并且不会在混合中添加额外的string
。
答案 1 :(得分:2)
请改为尝试:
object obj = 1;
// Option 1: Convert. This will work when obj contains anything
// convertible to int, such as short, long, string, etc.
int i = Convert.ToInt32(obj);
// Option 2: Cast. This will work only when obj contains an int,
// and will fail if it contains anything else, like a long.
int i = (int)obj;
答案 2 :(得分:0)
你应该施放:
object obj = 1;
int i = (int) obj;
这称为静态演员。
有关您的信息,还有另一个名为dynamic cast的强制转换,它只能用于引用类型(可以具有null值的类型),因此在这种情况下不是(int是值类型):
object obj = DateTime.Now;
DateTime date = obj as DateTime;
两种方法的区别在于,如果转换对象没有所需的类型,它将在第一种情况下引发异常(静态转换),并且在第二种情况下它将返回null(动态转换)