windows运行时-如何循环通过类的属性和它';s列表(在C#WP 8.1 WinRT应用程序中)

本文关键字:列表 C#WP 应用程序 WinRT 属性 何循环 运行时 循环 windows | 更新日期: 2023-09-27 18:00:01

我试图弄清楚这一点,但似乎没有得到。

在联系人的类中,某些属性类型是列表。

如何循环浏览这些列表?

我见过这样的例子,但其中包含的列表没有成功。

在这种情况下,我试图使用c#为windowsphone 8.1创建一个运行时应用程序。

还有其他方法可以检查属性类型是否为列表吗?

这是代码示例。

using Windows.ApplicationModel.Contacts;
using System.Reflection;
using System.Diagnostics;
private async void ShowContacts()
    {
        var contactStore = await ContactManager.RequestStoreAsync();
        var contacts = await contactStore.FindContactsAsync();
        foreach (var contact in contacts)
        {
            var props = contact.GetType().GetTypeInfo().DeclaredProperties;
            foreach (var pi in props)
            {
                try
                {
                    Debug.WriteLine("Name: " + pi.Name);
                    Debug.WriteLine("Value: " + pi.GetValue(contact));
                    Debug.WriteLine("Type: " + pi.PropertyType);
                    Debug.WriteLine("'n");
                    if (pi.PropertyType.ToString().Contains("System.Collections.Generic.IList"))
                    {
                        Debug.WriteLine("How to loop through this list?");
                        Debug.WriteLine("'n");
                    }
                }
                catch { }
            }
        }
    }

windows运行时-如何循环通过类的属性和它';s列表(在C#WP 8.1 WinRT应用程序中)

在您在注释中给出的示例中,将DataSuppliers强制转换为IList<string>并打印"Microsoft account"是我所期望的。然而,EmailsIVector<ContactEmail>,而不是IVector<string>。我预计会发生的情况是,这将导致无法进行强制转换,或者抛出(代码将其吞下),或者设置为null然后取消引用(也将抛出)。这就是为什么您没有看到Emails属性被发送到控制台的原因。

可能没有一种通用的方法来做你想要做的事情。你的代码必须分别处理每个集合类型,因为除了IList<object>之外,大多数集合类型都不会转换为通用类型,这是非常无用的。