这是一个非常奇怪的问题,让我感到紧张。我有一个简单的C#ServicesManager类。但是,除了微软是愚蠢的以外,我完全没有明显的理由得到这个问题(我作为一名程序员的年代已经使我极其愚蠢地说服了他)。无论如何,这是有问题的功能:
/// <summary>
/// This function checks if the ServicesManager contains a service of the specified type or not.
/// </summary>
/// <param name="serviceType">The type of service to check for.</param>
/// <returns>True if a service of the specified type is found, or false otherwise.</returns>
public bool Contains(Type serviceType)
{
bool result = false;
Type t = serviceType;
foreach (ISE_Service s in m_ServicesList)
{
if (s is serviceType)
{
result = true;
break;
}
}
return result;
}
ISE_Service只是一个代表服务类的接口。上面的函数只是检查ServicesManager中是否已存在指定类型的服务。
错误列表显示以下错误,并始终在if语句中突出显示带有红色波浪线的“serviceType”:
错误3找不到类型或命名空间名称'serviceType'(您是否缺少using指令或程序集引用?)C:\ MegafontProductions \ SpiritEngine \ SpiritEngine \ Source \ ApplicationLayer \ ServicesManager.cs 55
这个错误毫无意义。这是这个功能的参数。据我所知,这个问题要么是由is关键字引起的,要么是由Type类型引起的。如您所见,在循环上方访问参数serviceType就好了。那么它是如何在if语句中突然找不到的呢?
答案 0 :(得分:2)
你需要这样做:
if ((s != null) && (s.GetType() == serviceType))
什么
if (s is serviceType)
确实询问s
是serviceType
类型serviceType
是哪种类型。当然,它不是特定类型;它是Type
类型的变量。
Type
是一个表示类型信息的类,可以通过以下方式获取:
object.GetType(); // Returns a variable of type `Type`
或者:
typeof(MyTypeName); // Returns a variable of type `Type`
是的,由于多次使用“类型”这个词,这很令人困惑。
从根本上说,它归结为编译时类型之间的区别,它在代码中由类型名称(例如string
,int
,MyType
)和运行时类型,由名为Type
的类的实例表示。