C# 从对象中获取int值

C# 从对象中获取int值,c#,casting,C#,Casting,当我使用下面的代码时,感觉好像我在哪里出错了 object obj = 1; int i = int.Parse(obj.ToString()); 有更简单的方法吗?那么,在obj中实际是什么?如果它只是一个装箱的int,则只需强制转换为unbox: int i = (int)obj; 对于预定较少的内容,您也可以尝试: int i = Convert.ToInt32(obj); 它将处理许多场景,并且不会在混合中添加额外的字符串。请尝试以下操作: object obj = 1; //

当我使用下面的代码时,感觉好像我在哪里出错了

object obj = 1;
int i = int.Parse(obj.ToString());
有更简单的方法吗?

那么,在
obj
中实际是什么?如果它只是一个装箱的
int
,则只需强制转换为unbox:

int i = (int)obj;
对于预定较少的内容,您也可以尝试:

int i = Convert.ToInt32(obj);
它将处理许多场景,并且不会在混合中添加额外的
字符串。

请尝试以下操作:

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;
你应该投:

object obj = 1;
int i = (int) obj;
这称为静态强制转换

请注意,还有另一个名为dynamic cast的强制转换,它只能与引用类型(可以具有null值的类型)一起使用,因此在这种情况下不能使用(int是值类型):


这两种方法的区别在于,如果强制转换的对象没有所需的类型,它将在第一种情况下引发异常(静态强制转换),而在第二种情况下(动态强制转换),它将返回null。

您可以使用TryParse更好地处理异常。但是,它不会比这更简单。您的方法很好,但也有其他转换方法。
object obj = DateTime.Now;
DateTime date = obj as DateTime;