我有这两个功能
private void calcResults()
{
MakePath(id, results, _resultCount);
MakePath(id, "XYZ", _resultSICount)
}
private string MakePath(string subFolder, object obj, int index)
{
string dir = System.IO.Path.Combine(_outputDir, subFolder);
string fileName = string.Format("{0} {1} {2}.xml",
obj.GetType().Name, _dateTimeSource.Now.ToString(DATE_FORMAT), index.ToString());
return System.IO.Path.Combine(dir, fileName);
}
private string MakePath(string subFolder, string tempFileName, int index)
{
string dir = System.IO.Path.Combine(_outputDir, subFolder);
string fileName = string.Format("{0} {1} {2}.xml",
tempFileName, _dateTimeSource.Now.ToString(DATE_FORMAT), index.ToString());
return System.IO.Path.Combine(dir, fileName);
}
请帮助一些人。
由于
答案 0 :(得分:7)
如果我正确理解你的问题,你的意思是你想重载这个方法以避免代码重复...这就是我的方法。
private void calcResults()
{
MakePath(id, results.GetType(), _resultCount);
MakePath(id, "XYZ", _resultSICount)
}
private string MakePath(string subFolder, Type type, int index)
{
return MakePath(subFolder, type.Name, index);
}
private string MakePath(string subFolder, string tempFileName, int index)
{
string dir = System.IO.Path.Combine(_outputDir, subFolder);
string fileName = string.Format("{0} {1} {2}.xml",
tempFileName, _dateTimeSource.Now.ToString(DATE_FORMAT), index.ToString());
return System.IO.Path.Combine(dir, fileName);
}
我会避免使用object作为第二个参数的类型,因为在这种情况下它似乎不明确,使用Type表示参数的预期用途。
答案 1 :(得分:2)
你可以考虑这样的事情:
private string MakePath(string subFolder, object obj, int index)
{
//tempFileName here is created beased on the TYPE of the object passed
string tempFileName = obj.GetType().Name;
return MakePath(subFolder,tempFileName , index);
}
private string MakePath(string subFolder, string tempFileName, int index)
{
//combine directory path
string dir = System.IO.Path.Combine(_outputDir, subFolder);
//compute final file name based on the several
//parameters and tempFileName parameter
string fileName = string.Format("{0} {1} {2}.xml",
tempFileName, _dateTimeSource.Now.ToString(DATE_FORMAT), index.ToString());
return System.IO.Path.Combine(dir, fileName);
}
遵循所呈现代码的逻辑,如果我错了,请纠正我,这两种方法之间的唯一区别是,在tempFileName
中,类型名称是基于第二个,它只是调用者传递的第二个参数。
答案 2 :(得分:0)
这里的问题是string也是一个对象,因此编译器无法选择使用哪种方法。您可以更改参数顺序,或重命名其中一种方法。
答案 3 :(得分:0)
private string MakePath(string subFolder, object obj, int index)
{
if(obj.GetType()==typeof(string))
{
//copy the strong typed version to here;
return;
}
string dir = System.IO.Path.Combine(_outputDir, subFolder);
string fileName = string.Format("{0} {1} {2}.xml",
obj.GetType().Name, _dateTimeSource.Now.ToString(DATE_FORMAT), index.ToString());
return System.IO.Path.Combine(dir, fileName);
}
然后,您可以使用一个功能执行两项工作。这会吗?
答案 4 :(得分:0)
您可以将'results'值转换为对象:
class Program
{
static void Main(string[] args)
{
var ret1 = GetValue("String");
Console.WriteLine(ret1);
var ret2 = GetValue((object)"test");
Console.WriteLine(ret2);
Console.ReadKey();
}
private static object GetValue(string p0)
{
return p0;
}
private static object GetValue(object p0)
{
return "Object";
}
}
第二次调用GetValue get被路由到具有对象参数的那个。