JNF*_*JNF 2 c# parsing casting
我有一个object
大于零的数字(授予).让我们给它42.它最初是一个HttpContext.Session
集合的一部分.
Session["myNumber"] = 42;
object obj = Session["myNumber"];
Run Code Online (Sandbox Code Playgroud)
我已经尝试将它用作铸造的int:
int num = (int)obj;
Run Code Online (Sandbox Code Playgroud)
这回来了0
.
但是,我设法得到了我想做的事:
int num = int.Parse(obj.ToString());
Run Code Online (Sandbox Code Playgroud)
这给了我42
.
这是否有意义,可能是声明或类型或问题的问题?
我试图在下面提出的关键点是,是的,如果实际上obj
并不是真的,那么可能是可能的,int
但是int
对于unbox工作来说是足够的.在理解它方面,我要看的主要是:什么是obj.GetType()
.
好的,邪恶的代码: - 首先是重要的一点:
static void Main()
{
object obj = Evil();
int i = (int)obj; // 0
int j = int.Parse(obj.ToString()); // 42
}
Run Code Online (Sandbox Code Playgroud)
我是怎么做这个怪物的?
我欺骗和欺骗......基本上,我这样做了:
enum bar {
@42 = 0 // not legal C#... "42" is not a valid identifier
}
Run Code Online (Sandbox Code Playgroud)
但在CLI级别它是有效的......
static object Evil()
{
var ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
new AssemblyName("foo"), AssemblyBuilderAccess.Run);
var mb = ab.DefineDynamicModule("foo");
var eb = mb.DefineEnum("bar", TypeAttributes.Public, typeof(int));
eb.DefineLiteral("42", 0);
Type t = eb.CreateType();
return Enum.ToObject(t, 0);
}
Run Code Online (Sandbox Code Playgroud)