我有一个我正在编写的方法,它调用了其中的另一个重载方法。我只想写一个外部方法,因为外部方法的参数是传递给内部方法的。有没有办法做到这一点?
我试着使用泛型,但我对此了解不够多,所以它不起作用:
public void OuterMethod<T>(T parameter)
{
InnerMethod(parameter); // InnerMethod accepts an int or a string
}我知道我可以做到:
public void OuterMethod(string parameter)
{
InnerMethod(parameter);
}
public void OuterMethod(int parameter)
{
InnerMethod(parameter);
}但我更愿意用正确的方式来做这件事,而不是复制/粘贴代码。实现这一目标的最佳方法是什么?
发布于 2009-01-07 23:44:05
您可以在C++中执行此操作,但不能在C#中执行此操作(除非内部方法也可以是泛型的,而不是重载的)。
或者(如果您不接受'no‘作为答案),您可以在运行时打开type,例如...
public void OuterMethod(object parameter)
{
if (parameter is int)
InnerMethod((int)parameter);
else if (parameter is string)
InnerMethod((string)parameter);
else
throw new SomeKindOfException();
}..。但很明显,这是运行时检查,而不是编译时检查。
,但我更愿意用正确的方式来做这件事,而不是复制/粘贴代码。
您也可以编写软件来编写您的外部方法(例如使用System.CodeDom类),而不是手动编写它们,但这可能会带来更多的麻烦。
发布于 2009-01-08 00:06:35
就像其他人说的,你不能真的做你想做的事情,而你在问题中陈述的选择是最好的选择。
如果使用泛型,则实际上必须转换该值。否则,您可以像ChrisW建议的那样,通过接受对象来进行向下转换。
public void OuterMethod<T>(T parameter)
{
T temp = parameter;
if (temp is string )
InnerMethod(Convert.ToString(temp));
if (temp is int)
InnerMethod(Convert.ToInt32(temp));// InnerMethod accepts an int or a string
}下面是泛型概述的链接:http://msdn.microsoft.com/en-us/library/ms172193.aspx
发布于 2009-01-08 00:57:47
从您的描述来看,这似乎是过度优化。
这样如何:
public void OuterMethod(string parameter)
{
InnerMethod(parameter);
}
public void OuterMethod(int parameter)
{
InnerMethod(parameter**.ToString()**);
}https://stackoverflow.com/questions/422625
复制相似问题