如何通过反射得到某个ValueType的MinValue / MaxValue?

时间:2010-03-31 15:19:51

标签: .net vb.net reflection

我需要在运行时使用它。我使用Reflector检查过,像Int16这样的值类型行应该包含

<Serializable, StructLayout(LayoutKind.Sequential), ComVisible(True)> _
Public Structure Int16
    Implements IComparable, IFormattable, IConvertible, IComparable(Of Short), IEquatable(Of Short)

Public Const MaxValue As Short = &H7FFF
Public Const MinValue As Short = -32768


End Structure

但以下代码无效

Dim dummyValue = Activator.CreateInstance(GetType(UInt16))
Dim minValue As IComparable =    DirectCast(dummyValue.GetType.GetProperty("MinValue").GetValue(dummyValue,
Nothing), IComparable)

任何想法如何解决?

编辑:仅针对我直接使用的示例 GetType(UInt16),但在实际代码中,此部分由设计时未知的实例替换。 NET类型

3 个答案:

答案 0 :(得分:6)

使用GetType.GetField("MinValue")。 常量被视为字段

答案 1 :(得分:1)

感谢Hanin在我之前回答的问题。这是他的答案的一些示例代码。

在此示例中,将整数值(17)分配给对象变量。然后检索此类型的静态字段MinValue,如果存在,则将该字段的值分配给对象变量:

FieldInfo fi;
object objInt = 17;

if((fi = objInt.GetType().GetField("MinValue")) != null)
{
   objInt = fi.GetValue(null);
}

答案 2 :(得分:0)

这不是一个属性,它是一个常数......

你有什么理由不能打电话吗?:          Integer.MaxValue         Integer.MinValue