You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行时如何将字符串对象转换为泛型对象?

问题:运行时将字符串转换为自定义泛型类失败

简化示例

我定义了一个支持从string直接转换的类:

public class MyClass {
    public static explicit operator MyClass(string stringValue) => new MyClass();
    public static MyClass Parse(string value) => new MyClass();
}

编译时我可以通过(MyClass)"Some value"的方式将String转换为MyClass,但运行时执行转换操作时,会抛出错误:Invalid cast from 'System.String' to 'SomeNamespace.MyClass'。

我需要在运行时将字符串转换为泛型类,该如何解决这个问题?

已尝试的方法

我试过两种方式,但都报同样的错误:

  • 使用Convert.ChangeType:
var result = Convert.ChangeType("Parsable string", typeof(MyClass));
  • 使用TypeDescriptor转换器:
var converter = TypeDescriptor.GetConverter(typeof(MyClass));
var result = converter.ConvertFromString("Parsable string");

问题的核心在于:String类本身不知道如何将自己转换为未知类型,但这些未知类型都支持从String转换为自身(比如(UnknownClass)"Some string value"这种编译时转换是可行的)。

使用场景

这是一个运行时文本数据模型解析器,运行时我拿到外部API返回的IList<string>数据,需要将其转换为对应的领域对象。由于只有运行时才知道具体的对象类型,我无法硬编码具体类的实现。

以下是我的泛型函数实现,它需要把泛型对象的PropertyInfo和API返回值字符串组成的字典转换为泛型对象。我认为需要实现一个DoDirectCast(Type type, string value)方法,用来将字符串直接转换为指定类型,从而给泛型对象的属性赋值:

public T Transform<T>(Dictionary<PropertyInfo, string> arrOfPropOfT) 
{
    var returnObject = new T();

    foreach (var keyValuePair in arrOfPropOfT) 
    {
        Type propertyType = keyValuePair.value;
        string castableValue = keyValuePair.key;
        object? value = DoDirectCast(propertyType, castableValue);
        propertyInfo.SetValue(returnObject, value)
    }
    return returnObject;
}

内容的提问来源于stack exchange,提问作者Alex Terkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:15:33