gpt4 book ai didi

c# - 如何确定一个对象是否是实现公共(public)接口(interface)的对象的集合

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:55 25 4
gpt4 key购买 nike

我有以下方法,当 PropertyInfo 实例引用作为 IDataExtractor 对象集合的对象时返回 true:

    private bool IsCollectionOfIDataExtractors( PropertyInfo propInfo )
{
var result = false;

var extractors = propInfo.GetValue(dataExtractor, null);

if (typeof ( ICollection ).IsAssignableFrom(extractors.GetType() ) ||
typeof ( ICollection<> ).IsAssignableFrom(extractors.GetType() ) )
{

IEnumerator extractor = ((ICollection)extractors).GetEnumerator();

extractor.MoveNext();

if (typeof ( IDataExtractor ).IsAssignableFrom(
extractor.Current.GetType()) )
{
result = true;
}
}

return result;
}

在考虑这个方法时,我通过 StackOverflow 进行了搜索,找到了以下相关项 Accessing a Collection Through Reflection .这让我成功了一半。

经过一些测试,它看起来可行,但我并不是 100% 相信。我正在进行更强大的测试。

不过我很好奇,有没有更好的方法来实现这个方法?我真的不喜欢 Actor 声明,

IEnumerator extractor = ((ICollection)extractors).GetEnumerator();

最佳答案

var extractors = propInfo.GetValue(dataExtractor, null);
var asEnumerable = extractors as IEnumerable;

if (asEnumerable != null)
{
var enumerator = asEnumerable.GetEnumerator();
enumerator.MoveNext();

if (enumerator.Current != null)
return enumerator.Current is IDataExtractor;
}

return false;

关于c# - 如何确定一个对象是否是实现公共(public)接口(interface)的对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3525737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com