gpt4 book ai didi

c# - 我可以实现一个泛型类型并向它传递一个仅在运行时才知道的类型吗?

转载 作者:太空宇宙 更新时间:2023-11-03 20:43:38 25 4
gpt4 key购买 nike

我从数据库中提取序列化数据和对象类型(其中一个字段包含对象类型,一个字段包含序列化数据的 XML 字符串)。

我有一个具有序列化和反序列化方法的通用序列化程序:

public static class Serializer<T>
{
public static string Serialize(T objectData) { }
public static T Deserialize(string xmlData) { }
}

鉴于数据库字段中指定了对象类型,我有什么办法可以动态设置 T 是什么? - 这是我的思路(虽然这行不通):

Type t = Type.GetType(objectTypeName);
t objData = Serializer<t>.Deserialize(objectXmlString);

我希望从一个 switch 语句中重构一些代码,其中 T 是一个设定值,但我不知道它是否可以完成,或者如果可以,我将如何去做。

提前致谢。

最佳答案

您可以这样做,但它涉及反射 - MakeGenericType,特别是:

typeof(Serializer<>).MakeGenericType(t).GetMethod("Deserialize").Invoke(...);

我还没有完成,因为你的例子很困惑;该方法是实例,但被调用时就好像它是静态的。

有趣的是(也许),dynamic 在 4.0 中可能会使这更容易 - 我手头没有虚拟机,但想象一下:

static void SomeGenericMethod<T>(T arg) { Serializer<T>.SomeMethod(arg); }
...
dynamic obj = ...
SomeGenericMethod(obj);

我需要检查一下,但我预计这会为我们做很多繁重的工作。

另一种常见的方法是公开适用于 Type 的方法,而不是通过泛型。

关于c# - 我可以实现一个泛型类型并向它传递一个仅在运行时才知道的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1630660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com