使用 FastMember 从 collections 中获取值
Get values out of collections with FastMember
我使用 FastMember 从 object 和嵌套的 object 中获取值。如果 属性 是 string
或 int
一切正常。但现在我也想获得 collections 的值。到目前为止,这是我的代码:
// Set accessor
var sourceAccessor = ObjectAccessor.Create(source);
if (sourceAccessor.Target.GetType().GetInterface(nameof(ICollection)) != null || sourceAccessor.Target.GetType().GetInterface(nameof(IEnumerable)) != null)
{
foreach (/* idk */)
{
// READ & RETURN VALUES HERE
}
}
object 可能如下所示:
{
Id: 1,
Surname: Doe,
Prename: John,
Professions: [
{ Name: ab },
{ Name: xy }
]
}
也就是说职业会出问题
有什么建议可以解决这个问题吗?谢谢!
从问题中看不出 source
变量的数据类型是什么,但您应该能够检查访问器返回的值是否实现 IEnumerable
并采取行动因此。
这是一个快速运行的示例,它迭代 'Person' 对象的职业 属性 并将 ToString()
表示转储到控制台 - 如果您想深入了解每个职业使用 FastMember 对象,你可以构建另一个 ObjectAccessor
来实现它,我想 - 一旦你迭代,你的目标是什么就不清楚了。
如果您直接从数组构建 ObjectAccessor
,同样的策略将起作用 - 您只需检查 accessor.Target is IEnumerable
是否以类似的方式进行转换和迭代。
class Program
{
static void Main(string[] args)
{
var p = new Person
{
Professions = new List<Profession>
{
new Profession("Joker"),
new Profession("Smoker"),
new Profession("Midnight toker")
}
};
var accessor = ObjectAccessor.Create(p);
var professions = accessor[nameof(Person.Professions)];
if (professions is IEnumerable)
{
foreach (var profession in (IEnumerable)professions)
{
Console.WriteLine(profession);
}
}
}
}
class Person
{
public List<Profession> Professions { get; set; }
}
class Profession
{
public string Name { get; set; }
public Profession( string name)
{
Name = name;
}
public override string ToString()
{
return Name;
}
}
我使用 FastMember 从 object 和嵌套的 object 中获取值。如果 属性 是 string
或 int
一切正常。但现在我也想获得 collections 的值。到目前为止,这是我的代码:
// Set accessor
var sourceAccessor = ObjectAccessor.Create(source);
if (sourceAccessor.Target.GetType().GetInterface(nameof(ICollection)) != null || sourceAccessor.Target.GetType().GetInterface(nameof(IEnumerable)) != null)
{
foreach (/* idk */)
{
// READ & RETURN VALUES HERE
}
}
object 可能如下所示:
{
Id: 1,
Surname: Doe,
Prename: John,
Professions: [
{ Name: ab },
{ Name: xy }
]
}
也就是说职业会出问题
有什么建议可以解决这个问题吗?谢谢!
从问题中看不出 source
变量的数据类型是什么,但您应该能够检查访问器返回的值是否实现 IEnumerable
并采取行动因此。
这是一个快速运行的示例,它迭代 'Person' 对象的职业 属性 并将 ToString()
表示转储到控制台 - 如果您想深入了解每个职业使用 FastMember 对象,你可以构建另一个 ObjectAccessor
来实现它,我想 - 一旦你迭代,你的目标是什么就不清楚了。
如果您直接从数组构建 ObjectAccessor
,同样的策略将起作用 - 您只需检查 accessor.Target is IEnumerable
是否以类似的方式进行转换和迭代。
class Program
{
static void Main(string[] args)
{
var p = new Person
{
Professions = new List<Profession>
{
new Profession("Joker"),
new Profession("Smoker"),
new Profession("Midnight toker")
}
};
var accessor = ObjectAccessor.Create(p);
var professions = accessor[nameof(Person.Professions)];
if (professions is IEnumerable)
{
foreach (var profession in (IEnumerable)professions)
{
Console.WriteLine(profession);
}
}
}
}
class Person
{
public List<Profession> Professions { get; set; }
}
class Profession
{
public string Name { get; set; }
public Profession( string name)
{
Name = name;
}
public override string ToString()
{
return Name;
}
}