gpt4 book ai didi

c# - 我想将对象的实例转换为仅在运行时已知的类型的实例

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:24 24 4
gpt4 key购买 nike

像这样工作的东西:

object myObjet = GetObject();
Type myType = GetType();

var x = ConvertToType(myObject, myType);

myobject 可以是原始对象或其他对象。如果转换不可能,则抛出异常。框架中是否内置了一些东西。 System.Convert 类要求您知道目标类型。

最佳答案

您可以准确地编写您所描述的方法。它可能看起来像这样:

object ConvertToType(object source, Type targetType)
{
var sourceType = source.GetType();

if (sourceType == typeof(Something) && targetType == typeof(SomethingElse))
{
// call some function that takes the input and converts it to the output type.
return ConvertSomethingToSomethingElse((Something) source);
}

// Repeat the above, over and over. Every time there's a new type conversion,
// add it.

throw new Exception($"Can't convert {sourceType} to {targetType}");
}

如果有很多可能的转换,那可能会变得很丑陋。 (在这种方法有意义的情况下,是否存在完美的转化次数?我倾向于否,但这是一种观点。)

你可以使用 Automapper .您的方法将如下所示:

object ConvertToType<T>(object source, Type targetType)
{
return Mapper.Map(source, source.GetType(), targetType);
}

您仍然需要配置所有映射,在某些情况下,您还需要编写函数来执行您想要支持的所有可能的转换组合。没有办法解决这个问题。

这两种方法都表明,虽然答案是“是的,你可以做到”,但天下没有免费的午餐。无论您如何分割它,您仍然必须编写代码来处理所有转换。如果您已经在做所有这些,那么让所有这些都通过一个方法进行是否有意义?可能会有一些场景(否则 Map 重载甚至不存在)但在大多数情况下我怀疑它是否有用。

这不是我通常推荐的模式,因为它意味着类型不安全的代码将调用此方法,结果是一个对象,它也不是类型安全的。如果可能的话,因为您仍然必须编写类型安全的代码来进行转换,所以我将直接使用这些方法而不是使用 object

关于c# - 我想将对象的实例转换为仅在运行时已知的类型的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56775580/

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