Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MethodBase.Invoke与Convert.ChangeType对象结果_C#_Reflection - Fatal编程技术网

C# MethodBase.Invoke与Convert.ChangeType对象结果

C# MethodBase.Invoke与Convert.ChangeType对象结果,c#,reflection,C#,Reflection,我有以下代码: Type type = Type.GetType("System.Int16"); object number = Convert.ChangeType("-9", type); //m_value = 3096 MethodInfo method = typeof(Math).GetMethod("Abs", new[] { type }); object resultWithoutCast = method.Invo

我有以下代码:

Type type = Type.GetType("System.Int16");
object number = Convert.ChangeType("-9", type); //m_value = 3096
MethodInfo method = typeof(Math).GetMethod("Abs", new[] { type });
object resultWithoutCast = method.Invoke(null, new[] { number }); //m_value = 3096
var resultWithCast = (Int16)resultWithoutCast; //9
我不确定我是否知道“m_值”是什么。我猜是一个记忆位置?我在这里试图实现的是动态地从resultWithoutCast对象获取值9,而不必强制转换到Int16


想法?

Convert.ChangeType(“-9”,Type.GetType(“System.Int16”))
确实是
-9
而不是
3096
。目前还不清楚上面所有这些都应该实现什么;你可能过于简化了这个例子。您打算如何“获取”价值?您希望存储什么内容--您将如何处理它?你得到一个装箱的价值;如果不强制转换,则无法将其存储在静态类型的位置,也不需要强制转换将其存储在动态类型的位置。@Jeroenmoster感谢您的回复。我出去散步,我想到了解决办法。。。我只需要对对象执行.ToString()操作就可以获得返回的结果值,无需强制转换。我仍然不确定object.m_值是什么。我在谷歌上搜索了一下,找不到任何实质性的东西。这是假的
System.Int16
被定义为,但这主要是使反射工作的占位符。JIT专门处理内部基元类型,但调试器并不知道这一点。另外,请注意,对于这个非常特殊的操作序列,整个操作将更容易实现为
Regex.Replace(“-9”、“^-”、”)
(如果存在,请删除初始减号——一种基于字符串的获取绝对值的实现)。可能不适用于您的场景,但只需将其显示出来即可。:-)谢谢@jeroenmoster。我仍然不确定我是否完全理解m_值是什么。代码中的注释表示有关“二进制序列化”的内容?我在代码中没有看到任何设置。古怪的是的,我的例子太简单了。该代码最终将应用于许多其他数学方法,每个方法都有自己的输入和输出。