C# C检查对象是否为仅在运行时已知的类型

C# C检查对象是否为仅在运行时已知的类型,c#,.net,reflection,C#,.net,Reflection,为什么下面的方法不起作用 if(!(obj is (DataGridView1.SortedColumn.ValueType))) 我得到一个错误,类型是预期的。ValueType不返回类型吗?将代码更改为 if(obj.GetType() != DataGridView1.SortedColumn.ValueType) 编辑更新的代码以修复打字错误将代码更改为 if(obj.GetType() != DataGridView1.SortedColumn.ValueType) 编辑更新的代

为什么下面的方法不起作用

if(!(obj is (DataGridView1.SortedColumn.ValueType)))
我得到一个错误,类型是预期的。ValueType不返回类型吗?

将代码更改为

if(obj.GetType() != DataGridView1.SortedColumn.ValueType)
编辑更新的代码以修复打字错误

将代码更改为

if(obj.GetType() != DataGridView1.SortedColumn.ValueType)
编辑更新的代码以修复键入错误

ValueType不是实际的类,对吗?它是一个返回类型的属性。因此,要在运行时解决这个问题,您需要说:

if(!(DataGridView1.SortedColumn.ValueType.IsAssignableFrom(obj.GetType())))
ValueType不是实际的类,对吗?它是一个返回类型的属性。因此,要在运行时解决这个问题,您需要说:

if(!(DataGridView1.SortedColumn.ValueType.IsAssignableFrom(obj.GetType())))
否,ValueType属性是类型类的实例。它本身不是一种类型

试试这个:

if (!(obj.GetType() == DataGridView1.SortedColumn.ValueType))
但是,如果obj是派生类型,这将不起作用,因此,如果需要,您必须获得一个更高级的属性。

否,ValueType属性是type类的一个实例。它本身不是一种类型

试试这个:

if (!(obj.GetType() == DataGridView1.SortedColumn.ValueType))
但是,如果obj是派生类型,这不起作用,因此如果您需要,您必须要有一点想象力。

这是检查obj是否不是类型,我认为这不是OP想要的。typeofDataGridView1.SortedColumn.ValueType将返回类型我想您指的是obj.GetType,而不是typeofobj,这是检查obj是否不是类型,我认为这不是OP想要的类型。typeofDataGridView1.SortedColumn.ValueType将返回类型我认为您指的是obj.GetType,而不是TypeOfObject,这是无效的。