Yansıma: / Tesisin PropertyType en Mülkiyet Set değer al

oy
0

Bu yüzden hala UI (Unity ile çalışan) içine benim okuma verileri otomatik hale ediyorum ve durum şöyle: GameObject günü ben onların düzgün sıralı özelliklere sahip değişkenler / özelliklerini saklamak olduğu bir senaryo var. Ben örneğin, yansıma yoluyla onları okumak:

public void insertAllFromGameObject(GameObject target, List<Type> types)
{
    var components  = target.GetComponents<Component>();
    foreach (var component in components)
    {
        if(types.Contains(component.GetType()))
        {
            var properties = component.GetType().GetProperties().Where(t => t.GetCustomAttributes<ListableAttribute>().Count() > 0);
            foreach(var p in properties)
            {
                Debug.Log(VALUE: +p.GetValue(component, null));

Bu çalışıyor. Şimdi, en ı s sınıf zirve istediğiniz bir özelliği var diyelim bu özel özelliğinde belirtilen bu değerlerle yerine özelliklerini var listelemek ve potansiyel olarak bu özellik için teker teker değiştirin.

Ben bildiğim kadarıyla liste olarak var, ama GetValue içine argüman olarak anlamaya olamaz. Örnek:

public void insertAllFromVariable(GameObject target, List<Type> types, string propertyName)
{
    var components  = target.GetComponents<Component>();
    foreach (var component in components)
    {
        if(types.Contains(component.GetType()))
        {
            var property = component.GetType().GetProperty(propertyName);

            var propertysProperties = property.PropertyType.GetProperties().Where(t => t.GetCustomAttributes<ListableAttribute>().Count() > 0);
            foreach(var p in propertysProperties)
            {
                Debug.Log(VALUE: +p.GetValue(component, null));

Bu son satırı çünkü bir bileşen bunun için seyir (daha ziyade bir bileşen içinde bir özellik içinde) değilim tabii bir sorundur - ama benim değişkenin değerlerini yansıtan, böylece onun içinde ne geçmesi gerekir?

Oluştur 20/10/2018 saat 14:22
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
3

Kodunuzu Modifiye, emin Sana açık olmalıdır hiçbir çalışan kod ancak kavram var:

public void insertAllFromVariable(GameObject target, List<Type> types, string propertyName)
        {
            var components = target.GetComponents<Component>();
            foreach (var component in components)
            {
                if (types.Contains(component.GetType()))
                {
                    PropertyInfo property = component.GetType().GetProperty(propertyName);
                    object theRealObject = property.GetValue(component);

                    PropertyInfo[] propertysProperties = theRealObject.GetType().GetProperties().Where(t => t.GetCustomAttributes<ListableAttribute>().Count() > 0);
                    foreach (PropertyInfo p in propertysProperties)
                    {
                        Debug.Log("VALUE: " + p.GetValue(theRealObject));
Cevap 20/10/2018 saat 18:01
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more