Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# MethodInfo.Invoke不带out参数_C# - Fatal编程技术网

C# MethodInfo.Invoke不带out参数

C# MethodInfo.Invoke不带out参数,c#,C#,我尝试做的示例代码肯定会比我的英语做得更好: public bool IsNumericValueInBounds (string value, Type numericType) { double d = double.NaN; bool inBounds = (bool)numericType.GetMethod ("TryParse").Invoke (null, new object[] { value, d }); return inBounds; } 不幸

我尝试做的示例代码肯定会比我的英语做得更好:

public bool IsNumericValueInBounds (string value, Type numericType)
{
  double d = double.NaN;     

  bool inBounds = (bool)numericType.GetMethod ("TryParse").Invoke (null, new object[] { value, d });

  return inBounds;
}
不幸的是,TryParse方法需要一个out参数,所以这不起作用。 有什么办法解决这个问题吗


(注:这不是duck类型的一个很好的例子吗?——因为我知道每个数字类型都有一个“TryParse”或者我错了?

你应该能够将任何数字类型解析为double,所以double.TryParse()应该在这里完成。对于将来来到这里的人:@Lars,不是每个数字都可以解析为double而不会失去精度,
decimal
尤其是这里最糟糕的罪犯..NET Framework具有用于IConvertible类型转换的内置功能:,,如果有人想知道这是为什么,参数数组是一个对象数组,索引1处的null对象被out参数值替换。如果在数组中放入变量(例如,新对象[]{“123”,myVar};),则调用后myVar的值不会更改,但参数[1]仍将包含out参数值。
public static bool TryParse( string text, out int number ) { .. }

MethodInfo method = GetTryParseMethodInfo();
object[] parameters = new object[]{ "12345", null }
object result = method.Invoke( null, parameters );
bool blResult = (bool)result;
if ( blResult ) {
    int parsedNumber = (int)parameters[1];
}