我想检查某些参数的方法是否已实现。在这种情况下,我有以下方法重载:
public class Transformations
{
public string TransformFrom(string s) { return s;}
public string TransformFrom(int i) { return "00" + i.ToString();}
public string TransformFrom(DateTime dt) { return
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff");}
}
假设我有小数:
object obj = 1M;
如果我现在打电话TransformFrom(obj)
,我得到一个例外。
不幸的是,我的程序的其他部分仅返回对象,它们实际上是具体类型,如 int 或 datetime。我想将其中一些对象转换为字符串,以便将它们写入日志。所以这是一个运行时问题。另外,我希望我的 Transformations 类足够通用,也可以在其他程序中使用,因此可以有任何类型的对象。
有没有快速的方法来找出这个方法重载不存在?
无论哪种方式,即使存在接受小数的重载,您当前都会收到编译时错误。您可以根据您的需要采用以下两种方法之一:
要在编译时解决此问题,您必须强制转换为正确的类型。
object obj = 1;
var objAsInt = (int) obj;
var result = transformationInstance.TransformFrom(objAsInt);
如果没有适当的重载,您将收到编译时错误,您可以在设计时解决此错误。
要在运行时解决此问题,请使用反射来确定是否存在类型重载以及是否传递了实例。
object obj = 1;
var underlyingType = obj.GetType();
var method = typeof(Transformations).GetMethod("TransformFrom", new Type[] { underlyingType });
if(method != null)
{
var result = method.Invoke(transformationInstance, new []{obj});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)