如何根据变量的内容调用方法
ex.
String S = "Hello World";
String Format = "ToUpper()";
String sFormat = s.Format;
resulting in "HELLO WORLD"
这样我就可以在其他时间过去Format = "ToLower()"
或 Format = "Remove(1,4)" 这将删除从 pos 1 开始的 4 个字符 - 简而言之,我希望能够调用任何字符串方法。
有人可以发布完整的工作解决方案吗?
解决方案的关键要求您使用反射来定位所需的方法。这是一个涵盖您情况的简单示例;
private string DoFormat(string data, string format)
{
MethodInfo mi = typeof (string).GetMethod(format, new Type[0]);
if (null == mi)
throw new Exception(String.Format("Could not find method with name '{0}'", format));
return mi.Invoke(data, null).ToString();
}
您可以使该方法更加通用,以接受要调用的方法的参数,如下所示。请注意调用 .GetMethod 和 .Invoke 来传递所需参数的方式的更改。
private static string DoFormat(string data, string format, object[] parameters)
{
Type[] parameterTypes = (from p in parameters select p.GetType()).ToArray();
MethodInfo mi = typeof(string).GetMethod(format, parameterTypes);
if (null == mi)
throw new Exception(String.Format("Could not find method with name '{0}'", format));
return mi.Invoke(data, parameters).ToString();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)