C# 如何将对象强制转换为传递给函数的类型?

C# 如何将对象强制转换为传递给函数的类型?,c#,object,types,casting,C#,Object,Types,Casting,这不会编译,但我试图做的只是将对象强制转换为't',然后传递给函数 public void My_Func(Object input, Type t) { (t)object ab = TypeDescriptor.GetConverter(t).ConvertFromString(input.ToString()); } 你可以这样做: object ab = Convert.Changetype(input, t); 但是,看起来您希望以强类型的方式使用ab,这只能通过使用泛型来实

这不会编译,但我试图做的只是将对象强制转换为't',然后传递给函数

public void My_Func(Object input, Type t)
{
   (t)object ab = TypeDescriptor.GetConverter(t).ConvertFromString(input.ToString());
}

你可以这样做:

object ab = Convert.Changetype(input, t);
但是,看起来您希望以强类型的方式使用
ab
,这只能通过使用泛型来实现:

public void My_Func<T>(Object input)
{
   T ab = (T)Convert.ChangeType(input, typeof(T));
}
public void My_Func(对象输入)
{
tab=(T)Convert.ChangeType(输入,typeof(T));
}

我是否正确理解您希望将输入对象强制转换为给定类型t?如果输入不是t类型,会发生什么情况?@FrankE-函数的工作方式将使使用它的人知道如何在函数中输入正确的类型,我对此负责!您想对该对象做什么?也许您想使用一个泛型函数
public void My_Func(T input)
?已经有一个方法可以这样做。试着读一读吧。
objectab=Convert.Changetype(输入,t)和
objectab=Convert.Changetype有什么区别
object ab=input
?@ekholm
object ab=“01/01/2008”
object ab=Convert.ChangeType(“01/01/2008”,typeof(DateTime))
这仍然没有编译-它应该是:t ab=(t)Convert.ChangeType(input,typeof(t));但是谢谢你!你做到了。当我调试时,我在运行code
object ab=Convert.Changetype(输入,t)时在监视窗口中看到监视窗口显示
类型:对象{short}
。但是当运行代码时,
tab=(T)Convert.ChangeType(input,typeof(T))
;计算ab时,我得到
类型:short
。尽管如此,当在这两个系统上运行
GetType()
时,我得到了完全相同的结果
(System.Int16)
,您能解释一下这种现象吗?@BornToCode谢谢,修复了它。监视窗口可能会显示变量的类型(
object
),以及它的值的最终运行时类型(
short
)。在这种情况下,
short
值被“装箱”,以便作为
对象引用。在第二种情况下,变量本身是一个
short
。在任何一种情况下,
GetType
都会给出值本身的实际类型,即
Int16
(与short相同)。
public void My_Func(Object input, Type t)
{
    object test = new object();
    test = Convert.ChangeType(test, t);
    test = TypeDescriptor.GetConverter(t).ConvertFromString(input.ToString());
}