foreach (var item in System.Reflection.Assembly.GetEntryAssembly().GetTypes()) { if (item.GetInterface(typeof(ICaijiSiteBase).Name) != null) { var configurationInstance = Activator.CreateInstance(item); site = Activator.CreateInstance(item) as Tianya.ControlUI.ICaijiSiteBase; if (!site.IsSubClass) { break; } } } site为null,如何解决
时间: 2024-02-10 09:09:26 浏览: 146
Parallel.ForEach的卡死现象(线程操作问题C#源码实例)
在你的代码中,你尝试使用`Activator.CreateInstance`方法来创建一个实现了`ICaijiSiteBase`接口的类型的实例。但是,当你在调用`Activator.CreateInstance`方法之后,你检查返回的实例是否为`ICaijiSiteBase`接口的实现时,实际上你又使用了`Activator.CreateInstance`方法创建了另一个实例,并将其转换为了`ICaijiSiteBase`接口的实现。这可能会导致`site`变量的值为`null`。为了解决这个问题,你需要在`configurationInstance`变量中存储`Activator.CreateInstance`方法的返回值,并检查该实例是否为`ICaijiSiteBase`接口的实现。请参考下面的示例代码:
```
foreach (var item in System.Reflection.Assembly.GetEntryAssembly().GetTypes())
{
if (item.GetInterface(typeof(ICaijiSiteBase).Name) != null)
{
var configurationInstance = Activator.CreateInstance(item);
if (configurationInstance is ICaijiSiteBase site && site.IsSubClass)
{
// 对site进行操作
}
}
}
```
在这个示例代码中,我们在`Activator.CreateInstance`方法的返回值上使用了模式匹配,以确保该实例既实现了`ICaijiSiteBase`接口,又满足`IsSubClass`属性的条件。如果实例不满足这些条件,那么就会跳过该实例。
阅读全文