-4

这是一个非常奇怪的问题,真的让我很紧张。我正在制作一个简单的 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 语句中找不到它的呢?

4

1 回答 1

2

你需要这样做:

if ((s != null) && (s.GetType() == serviceType))

什么

if (s is serviceType)

确实是询问是否s是特定类型的类型serviceTypeserviceType当然,它不是特定类型。它是一个类型的变量Type

Type是一个表示类型信息的类,可以通过以下方式获得:

object.GetType(); // Returns a variable of type `Type`

或者:

typeof(MyTypeName); // Returns a variable of type `Type`

是的,由于“类型”一词的多次使用,这令人困惑。

从根本上讲,它归结为在代码中由类型名称(例如string, int, MyType)表示的编译时类型与由名为 的类的实例表示的运行时类型之间的区别Type

于 2013-06-24T11:17:17.017 回答