Как получить MinValue / MaxValue определенного ValueType через отражение? - PullRequest
4 голосов
/ 31 марта 2010

Мне нужно это во время выполнения. Я проверил, используя 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)

есть идеи как решить?

EDIT : только для примера, который я использовал непосредственно GetType (UInt16) , но в реальном коде эта часть заменяется экземпляром неизвестного во время разработки .NET Type

Ответы [ 3 ]

6 голосов
/ 31 марта 2010

Используйте GetType.GetField("MinValue"). Константы считаются полями

1 голос
/ 12 апреля 2012

Спасибо Ханину, который ответил задолго до меня. Вот пример кода с его ответом.

В этом примере целочисленное значение (из 17) присваивается переменной объекта. Затем извлекается статическое поле MinValue этого типа, и, если оно существует, значение этого поля присваивается переменной объекта:

FieldInfo fi;
object objInt = 17;

if((fi = objInt.GetType().GetField("MinValue")) != null)
{
   objInt = fi.GetValue(null);
}
0 голосов
/ 31 марта 2010

Это не свойство, это константа ...

По какой причине вы не можете просто позвонить ?: Integer.MaxValue Integer.MinValue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...