C# 如何将对象强制转换为传递给函数的类型?
这不会编译,但我试图做的只是将对象强制转换为't',然后传递给函数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,这只能通过使用泛型来实
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
?@ekholmobject ab=“01/01/2008”
与object ab=Convert.ChangeType(“01/01/2008”,typeof(DateTime))
这仍然没有编译-它应该是:t ab=(t)Convert.ChangeType(input,typeof(t));但是谢谢你!你做到了。当我调试时,我在运行codeobject 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());
}