C# 从C中的字符串动态创建具有泛型的对象#

C# 从C中的字符串动态创建具有泛型的对象#,c#,generics,C#,Generics,假设我有 public partial class DeleteThisStruct<TKey, TValue> public分部类DeleteThisStruct 但是,TKey和TValue的值必须作为字符串从文件中读取(我已经有了这样做的方法,所以假设我已经有2个字符串)例如:“MyNamespace.MyClass”和“MyNamespace.MyClass2” 第二个问题是,需要实例化此对象的代码是从不同的项目调用的,但在同一个解决方案中。 假设我在ProjectA中实

假设我有

public partial class DeleteThisStruct<TKey, TValue>
public分部类DeleteThisStruct
但是,TKey和TValue的值必须作为字符串从文件中读取(我已经有了这样做的方法,所以假设我已经有2个字符串)例如:“MyNamespace.MyClass”和“MyNamespace.MyClass2”

第二个问题是,需要实例化此对象的代码是从不同的项目调用的,但在同一个解决方案中。 假设我在ProjectA中实例化,而DeleteThisStruct在ProjectB中(包含在对ProjectA的引用中)


无论是否使用泛型,我将如何动态实例化DeleteThisStruct并从中获取成员值?

请参阅中的“构造泛型类型的实例”部分。您将需要根据字符串检索类型对象,但请注意,一般来说,仅“MyNamespace.MyClass”不足以检索必要的类型对象。如果没有程序集名称,则只能从mscorlib程序集和当前程序集获取类型(http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx).

字符串是什么?它们可能是序列化对象吗?你确定吗?当你从
ProjectB
执行删除操作时,你的代码是否设置为保证
deleteteThisStruct
已经由
ProjectA
创建?DeleteThisStruct是一个已经存在的类定义。很明显,我用TKey、TValue替换了真实的类,但是是的,这是一个我正在使用的结构,字符串是带有名称空间的类名。示例:“MyNamespace.MyClass”好的,我简化了它。让我们一次解决一个问题。我制作了一个简单的deleteThisStruct,这个示例将o作为对象提供给您。为了使它有用,你需要铸造它。这就是问题所在。如果“TKey”和“TValue”是简单的字符串值,而不是实际类型,那么如何将结果对象“o”强制转换为DeleteThisStruct?强制转换为什么?您在编译时没有已知的类型可以转换为。您希望编写什么代码?定义一个非泛型基类,您可以将其强制转换为该基类以公开您需要访问的内容,或者您必须求助于反射。有时,一种有用的技术是将您需要的所有代码(包括实例化)编写为泛型参数的泛型方法。而不是构建和实例化泛型类型,而是构建对泛型方法的调用,并使用反射调用它;从那时起,它将只是简单的代码但是TKey和TValue是“System.String”,例如,它们在编译时是未知的。类型为“Object”的对象是无用的(至少对于我需要做的事情是无用的)。请参阅