Как получить свойство Static с Отражением

С учетом исходного примера:

var objs = [ 
    { first_nom: 'Lazslo', last_nom: 'Jamf'     },
    { first_nom: 'Pig',    last_nom: 'Bodine'   },
    { first_nom: 'Pirate', last_nom: 'Prentice' }
];

Сортировка по нескольким полям:

objs.sort(function(left, right) {
    var last_nom_order = left.last_nom.localeCompare(right.last_nom);
    var first_nom_order = left.first_nom.localeCompare(right.first_nom);
    return last_nom_order || first_nom_order;
});

Примечания

  • a.localeCompare(b) - универсально поддерживается и возвращает -1,0,1, если a, a==b, a>b соответственно.
  • || в последней строке дает last_nom приоритет над first_nom.
  • Вычитание работает с числовыми полями: var age_order = left.age - right.age;
  • Отменить в обратном порядке, return -last_nom_order || -first_nom_order || -age_order;

103
задан Corey Downie 16 January 2009 в 18:26
поделиться

5 ответов

Хорошо, таким образом, ключ для меня должен был использовать.FlattenHierarchy BindingFlag. Я действительно не знаю, почему я просто добавил его на догадке, и это начало работать. Таким образом, конечное решение, которое позволяет мне получать Общедоступный Экземпляр или Статические Свойства:

obj.GetType.GetProperty(propName, Reflection.BindingFlags.Public _
  Or Reflection.BindingFlags.Static Or Reflection.BindingFlags.Instance Or _
  Reflection.BindingFlags.FlattenHierarchy)
28
ответ дан Corey Downie 5 November 2019 в 11:18
поделиться

Это - C#, но должно дать Вам идею:

public static void Main() {
    typeof(Program).GetProperty("GetMe", BindingFlags.NonPublic | BindingFlags.Static);
}

private static int GetMe {
    get { return 0; }
}

(Вы должны ИЛИ NonPublic и Статичный только)

41
ответ дан earlNameless 5 November 2019 в 11:18
поделиться

Ниже, кажется, работает на меня.

using System;
using System.Reflection;

public class ReflectStatic
{
    private static int SomeNumber {get; set;}
    public static object SomeReference {get; set;}
    static ReflectStatic()
    {
        SomeReference = new object();
        Console.WriteLine(SomeReference.GetHashCode());
    }
}

public class Program
{
    public static void Main()
    {
        var rs = new ReflectStatic();
        var pi = rs.GetType().GetProperty("SomeReference",  BindingFlags.Static | BindingFlags.Public);
        if(pi == null) { Console.WriteLine("Null!"); Environment.Exit(0);}
        Console.WriteLine(pi.GetValue(rs, null).GetHashCode());


    }
}
1
ответ дан Vyas Bharghava 5 November 2019 в 11:18
поделиться

Попробуйте этот Отражение C# ссылка.

Примечание я думаю тот BindingFlags. Экземпляр и BindingFlags. Статичный эксклюзивны.

-2
ответ дан Ken Henderson 5 November 2019 в 11:18
поделиться

Или просто посмотрите на это ...

Type type = typeof(MyClass); // MyClass is static class with static properties
foreach (var p in type.GetProperties())
{
   var v = p.GetValue(null, null); // static classes cannot be instanced, so use null...
}
123
ответ дан 24 November 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: