c# - 我知道 typeof(T) 但编译器不知道。怎么修?

标签 c# generics

我正在尝试编写这样的方法:

public static T Test<T>()
{
  if (typeof(T)==typeof(string))
     return "1241";

  // do something else
}

但我似乎无法弄清楚如何实现它。我想根据调用该方法的 T 类型返回值。我需要返回字符串、整数、自定义类、列表等。

实际用例是一些自定义序列化代码,反序列化代码必须知道它应该生成的对象的类型。

澄清: 上面的例子给出了以下错误: 无法将字符串转换为类型 T

理想的解决方案适用于值类型和引用类型,并且不包括用于重载解析的虚拟参数。

不过,我开始怀疑理想的解决方案是否存在。

谢谢,卢卡斯

最佳答案

object 的中间转换并不理想,但像这样的东西应该可以解决问题:

public static T Test<T>()
{
    if (typeof(T) == typeof(string))
        return (T)(object)"1241";

    // do something else
}

关于c# - 我知道 typeof(T) 但编译器不知道。怎么修?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031794/

相关文章:

c# - 我想重构我的加载游戏脚本

c# - 将 float 转换为 decimal 在 C# 中会失去精度

c# - 是什么使Entity Framework/Upshot相信我的对象图“包含周期”?

c# - 我可以让 List(T).ForEach() 严格按顺序遍历元素吗?

Java工厂使用泛型和Supplier接口(interface),但仍然需要类型转换,有些不对劲

c# - 如何在 SharePoint 2013 中使用 REST API 将附件文件附加到列表项

c# - .net 框架的 AddMicrosoftIdentityWebApiAuthentication 模拟

c# - 我怎么知道属性是否是通用集合

java - 如果多维列表包含空列表,我可以确定它的维数吗?

swift - 使用协议(protocol)一致性从一个函数返回两种类型