您可以使用PropertyInfo.PropertyType
来检查属性的类型 - 或者您可以只获取值object
并从那里开始:
List<string> values = new List<string>();
object value = propertyInfo.GetValue(task, null);
if (value is string)
{
values.Add((string) value);
}
else if (value is IEnumerable<string>)
{
values.AddRange((IEnumerable<string>) value);
}
else
{
// Do whatever you want if the type doesn't match...
}
is
或者,您可以使用as
null 并检查结果,而不是使用和强制转换:
List<string> values = new List<string>();
object value = propertyInfo.GetValue(task, null);
string stringValue = value as string;
if (stringValue != null)
{
values.Add(stringValue);
}
else
{
IEnumerable<string> valueSequence = value as IEnumerable<string>;
if (valueSequence != null)
{
values.AddRange(valueSequence);
}
else
{
// Do whatever you want if the type doesn't match...
}
}
请注意,如果属性是任何其他类型的字符串序列,而不仅仅是List<string>
. 它还会复制列表,因此任何进一步的更改都不会影响属性引用的现有列表。如果需要,请调整:)
Lee 的回答让我想起了一点——如果它是一个string
具有null
值的属性,并且您想要一个包含单个 null 元素的列表,则需要使用PropertyType
. 例如:
if (propertyInfo.PropertyType == typeof(string))
{
values.Add((string) propertyInfo.GetValue(task, null));
}