我有2个方法,intMethod和doubleMethod,它们是完全相同的,除了intMethod需要一个int数组参数和doubleMethod需要一个double数组参数。
我知道我可以使用重载来使用相同的方法名称,但是,我仍然得到2种几乎完全相同的方法,只是它们的参数有所不同。无论如何,我可以将intMethod和doubleMethod组合为1方法吗?
如果可以,请提供一些示例代码吗?我可以通过一些示例代码更好地遵循。谢谢
编辑:人们要求我发布我的方法,然后您就可以了:
我有一个相同的方法readDataDouble,该数据数组为double [] []
基本上,此方法读取CSV文件并将数据转换为int格式。第一行是时间,第一列是日期。
public static void readDataInt(string value, ref int[][] data, ref DateTime[] timeframe, ref DateTime[] date)
{
string inputFile = "D:\\temp.csv";
string[][] temp = null;
if (File.Exists(inputFile))
{
string[] proRataVolumeFile = File.ReadAllLines(inputFile);
temp = new string[proRataVolumeFile.Length][];
for (int i = 0; i < proRataVolumeFile.Length; i++)
{
temp[i] = proRataVolumeFile[i].Split(',');
}
}
//convert the string to int
date = new DateTime[temp.Length - 1];
timeframe = new DateTime[temp[0].Length - 1];
data = new int[temp.Length - 1][];
for (int i = 1; i < temp.Length; i++)
{
data[i - 1] = new int[temp[i].Length - 1];
for (int j = 1; j < temp[i].Length; j++)
{
if (temp[i][j].Length > 0)
data[i - 1][j - 1] = Convert.ToInt32(temp[i][j]);
}
}
for (int i = 1; i < temp.Length; i++)
{
date[i - 1] = Convert.ToDateTime(temp[i][0]);
}
for (int j = 1; j < temp[0].Length; j++)
{
timeframe[j - 1] = DateTime.Parse(temp[0][j]);
}
}
最佳答案
这很大程度上取决于方法本身的作用。
如果可以使用共享接口(例如IComparable<T>
)编写该方法,则可以将其设为generic method:
void SomeMethod<T>(T[] values) where T : IComparable<T>
{
// Do stuff here
}
但是,这将更具限制性,因为您只能使用由通用约束定义的方法或属性。它适用于需要比较值或检查相等性的事情,但不适用于“通用数学”,因为没有可用的共享接口(例如理论上的
IArithmetic<T>
接口)。编辑:在您的情况下,您应该能够使用受限于IConvertible实现的通用方法:
public static void ReadData<T>(string value, ref T[][] data, ref DateTime[] timeframe, ref DateTime[] date) where T : IConvertible
{
另一个选择是声明您的方法使用
dynamic
而不是特定类型:dynamic SomeMethod(dynamic[] values)
{
dynamic result = values[0];
for (int i = 1; i < values.Length; ++i)
result = result + values[i]; // You can use normal operators now
return result;
}
这适用于任何类型,但是检查使用动态绑定,因此可以有效地移至运行时。如果传递的类型不能正常工作,则将获得运行时异常(而不是编译时检查)。