C# 将类型转换为泛型约束类型
我试图建立一个工厂,将提供一个单一的工厂方法。 在这个方法中,我想验证传入类型是否是工厂的T 我写的东西根本不起作用。我相信我理解它失败的原因,但我不知道如何正确地塑造我的角色 下面是我的代码。关于如何形成这种状态/铸造有什么想法吗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) //
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方法中也误用了该类型,我也将尝试在这个案例中跟随您的线索。