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 { }
}
}
}
在您在注释中给出的示例中,将DataSuppliers
强制转换为IList<string>
并打印"Microsoft account"是我所期望的。然而,Emails
是IVector<ContactEmail>
,而不是IVector<string>
。我预计会发生的情况是,这将导致无法进行强制转换,或者抛出(代码将其吞下),或者设置为null然后取消引用(也将抛出)。这就是为什么您没有看到Emails属性被发送到控制台的原因。
可能没有一种通用的方法来做你想要做的事情。你的代码必须分别处理每个集合类型,因为除了IList<object>
之外,大多数集合类型都不会转换为通用类型,这是非常无用的。