C# 将类型转换为泛型约束类型

C# 将类型转换为泛型约束类型,c#,generics,types,casting,factory-pattern,C#,Generics,Types,Casting,Factory Pattern,我试图建立一个工厂,将提供一个单一的工厂方法。 在这个方法中,我想验证传入类型是否是工厂的T 我写的东西根本不起作用。我相信我理解它失败的原因,但我不知道如何正确地塑造我的角色 下面是我的代码。关于如何形成这种状态/铸造有什么想法吗 public T GetFeature(Type i_FeatureType, User i_UserContext) { T typeToGet = null; if (i_FeatureType is T) //

我试图建立一个工厂,将提供一个单一的工厂方法。 在这个方法中,我想验证传入类型是否是工厂的T

我写的东西根本不起作用。我相信我理解它失败的原因,但我不知道如何正确地塑造我的角色

下面是我的代码。关于如何形成这种状态/铸造有什么想法吗

    public T GetFeature(Type i_FeatureType, User i_UserContext)
    {
        T typeToGet = null;

        if (i_FeatureType is T) // <--condition fails here
        {
            if (m_FeaturesCollection.TryGetValue(i_FeatureType, out typeToGet))
            {
                typeToGet.LoggenInUser = i_UserContext;
            }
            else
            {
                addTypeToCollection(i_FeatureType as T, i_UserContext);
                m_FeaturesCollection.TryGetValue(typeof(T), out typeToGet);
                typeToGet.LoggenInUser = i_UserContext;
            }
        }

        return typeToGet;
    }
使用:

而不是:

if (i_FeatureType is T)
使用:

而不是:

if (i_FeatureType is T)

您正在将对象与“类型”对象进行比较

因此,与其

如果i_特征类型为T

试一试


如果i_FeatureType==typeofT

您正在将您的对象与“Type”对象进行比较

因此,与其

如果i_特征类型为T

试一试


如果i_FeatureType==typeofT

尽管i_FeatureType被用于从字典中获取值,但简单的相等可能更合适。工作!非常感谢。似乎我在addTypeToCollection方法中也误用了强制转换,我也将尝试在本例中遵循您的指导。尽管考虑到I\u FeatureType被用于从字典中获取值,也许简单的等式更合适。工作!非常感谢。似乎我在addTypeToCollection方法中也误用了该类型,我也将尝试在这个案例中跟随您的线索。