-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あるタイプかどうかを尋ねます。もちろん、特定のタイプではありません。type の変数です。serviceTypeserviceTypeType

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 に答える