C# 在方法中强制转换为未知类型

C# 在方法中强制转换为未知类型,c#,C#,我有一个方法可以获得两个参数:第一个是要转换的类型,第二个是要转换的对象。 我试图像这样转换对象: public static void method1(Type convertTo, object toBeConverted) { toBeConverted = (convertTo)toBeConverted; } 但当我这样做时,我会得到一个错误: “convertTo是一个变量,但与类型一样使用”。 我如何才能使此铸造工作(不检查convertTo的类型并根据此类型进行转换)?

我有一个方法可以获得两个参数:第一个是要转换的类型,第二个是要转换的对象。 我试图像这样转换对象:

public static void method1(Type convertTo, object toBeConverted)
{
    toBeConverted = (convertTo)toBeConverted;
}
但当我这样做时,我会得到一个错误: “convertTo是一个变量,但与类型一样使用”。 我如何才能使此铸造工作(不检查convertTo的类型并根据此类型进行转换)?

看起来您需要此方法。e、 g

toBeConverted = Convert.ChangeType(toBeConverted, convertTo)
请注意,
ChangeType
要求
toBeConverted
实现
IConvertible
接口

或者,您可以使用:

这要求
toBeConverted
具有默认的
TypeConverter
,但这应该适用于可为空的类型。请注意,TypeConverters有一个
CanConvertFrom
方法,允许您在运行时确定是否支持转换

这并不是唯一的方法,但在大多数情况下,上述方法都应该有效。如果您使用的是自定义类型,则必须根据需要实现自己的
TypeConverter
IConvertible
。如果性能是一个考虑因素,那么它们就不是最快的,但是除非这是一个问题,否则我不会担心它。

看起来您需要这种方法。e、 g

toBeConverted = Convert.ChangeType(toBeConverted, convertTo)
请注意,
ChangeType
要求
toBeConverted
实现
IConvertible
接口

或者,您可以使用:

这要求
toBeConverted
具有默认的
TypeConverter
,但这应该适用于可为空的类型。请注意,TypeConverters有一个
CanConvertFrom
方法,允许您在运行时确定是否支持转换


这并不是唯一的方法,但在大多数情况下,上述方法都应该有效。如果您使用的是自定义类型,则必须根据需要实现自己的
TypeConverter
IConvertible
。如果性能是一个考虑因素,那么它们不是最快的,但是除非这是一个问题,否则我不会担心它。

您可以通过两种方法来实现这一点-一种是使用泛型,另一种是使用
Convert

public static void method1(Type convertTo, object toBeConverted)
{
    var convertedValue = Convert.ChangeType(toBeConverted,convertTo);
}

public static void method2<TConvert>(object toBeConverted)
{
    var convertedValue = (TConvert)toBeConverted;
}
publicstaticvoidmethod1(类型convertTo,对象toBeConverted)
{
var convertedValue=Convert.ChangeType(toBeConverted,convertTo);
}
公共静态无效方法2(要转换的对象)
{
var convertedValue=(TConvert)待转换;
}

如果无法转换类型,这两种方法都会引发异常。

您可以通过两种方法执行此操作-一种是使用泛型,另一种是使用
Convert

public static void method1(Type convertTo, object toBeConverted)
{
    var convertedValue = Convert.ChangeType(toBeConverted,convertTo);
}

public static void method2<TConvert>(object toBeConverted)
{
    var convertedValue = (TConvert)toBeConverted;
}
publicstaticvoidmethod1(类型convertTo,对象toBeConverted)
{
var convertedValue=Convert.ChangeType(toBeConverted,convertTo);
}
公共静态无效方法2(要转换的对象)
{
var convertedValue=(TConvert)待转换;
}

如果类型无法转换,这两种方法都会引发异常。

您是指强制转换还是转换?对不起,我是指强制转换该强制转换有什么用?我得到了答案,谢谢!你是说施法还是转化?对不起,我是说施法。施法有什么用?我得到了答案,谢谢!谢谢你的帮助。如果convert to是可为空的类型,该怎么办?Convert.ChangeType无法转换为可空类型。@HilaB我已将答案编辑为包含
TypeConverter
,它将适用于可空类型。非常感谢@bornfromanegg!谢谢你的帮助。如果convert to是可为空的类型,该怎么办?Convert.ChangeType无法转换为可空类型。@HilaB我已将答案编辑为包含
TypeConverter
,它将适用于可空类型。非常感谢@bornfromanegg!