Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 无法从对象转换为System.ValueType_C#_C# 4.0 - Fatal编程技术网

C# 无法从对象转换为System.ValueType

C# 无法从对象转换为System.ValueType,c#,c#-4.0,C#,C# 4.0,我正在尝试从实现IsNumeric方法。但是像这个实用程序那样传递数组值。IsNumericarrayCsvValues[i]会给我带来错误 错误CS1503参数1:无法从“对象”转换为“System.ValueType”DataSetConsoleApplication\DataSetConsoleApplication\Program.cs 这就是方法 public static bool IsNumeric(ValueType value) { return (va

我正在尝试从实现IsNumeric方法。但是像这个实用程序那样传递数组值。IsNumericarrayCsvValues[i]会给我带来错误

错误CS1503参数1:无法从“对象”转换为“System.ValueType”DataSetConsoleApplication\DataSetConsoleApplication\Program.cs

这就是方法

   public static bool IsNumeric(ValueType value)
   {
      return (value is Byte ||
              value is Int16 ||
              value is Int32 ||
              value is Int64 ||
              value is SByte ||
              value is UInt16 ||
              value is UInt32 ||
              value is UInt64 ||
              value is BigInteger ||
              value is Decimal ||
              value is Double ||
              value is Single);
   }
我正在使用.NETFramework 4.5.2控制台应用程序。请帮忙

PS编辑:

对不起,我是从MS Docs那里读到的


。。。。或者允许一个方法处理许多不同的值类型


遗憾的是,该方法将接受任何类型的变量,如字符串s或int s。关于引用类型和值类型的回答为我澄清了一切。否决票是当之无愧的。

该代码只有在传递值类型时才有效。您试图传递的对象是引用类型,因此编译器禁止您将其用作参数:

[…]可以用作方法调用中的参数,以将可能的参数限制为值类型,而不是所有对象

因此,您应该将参数类型从ValueType更改为object,这将使此代码适用于任何参数类型,并且仍然执行所需的行为


但是从变量和代码来看,你似乎在尝试做一些完全不同的事情。您正在查找decimal.TryParse吗?

您的错误非常清楚,您是在传递对象还是ValueType?错误不在您的方法中,但这是因为您没有将ValueType对象作为参数传递。错误清楚地向您解释arrayCsvValues[]具有object类型的元素,这不是ValueType。你不明白哪一部分?你到底在问什么?首先,为什么要使用ValueType作为参数类型?显示ArrayCSVvalues的声明您可以简单地将声明更改为IsNumericObject Values我认为您的解释有点不正确:ValueType也始终是引用类型,因此这不能解释为什么不能传递对象。MSDN的引用看起来也有点错误。由于ValueType本身是一个引用类型,所以引号中说void fValueType v{}void gValueType v{fv;}是无效的,但我相信您同意,并且快速检查会显示,这实际上是有效的。OP代码被拒绝的原因仅仅是一条一般规则,即在本例中,不能将基类类型的变量传递给期望派生类类型的方法(在本例中为ValueType)。或者,不能允许方法处理许多不同的值类型。我在一个漫长的工作日结束时读到了这篇文章,我发现ValueType在忽略类型的同时接受了所有的引用值。忘了基本的东西。