public static void outputDetail(DateTime previousTime, ref double[] array, StreamWriter streamWriter) //the parameter in here is not necessary, but want to maintain a similiarity in the TimeOfDay class
{
string outputString = previousTime.ToString("yyyy/MM/dd");
Boolean bypass = true;
for (int i = 1; i < array.Length - 1; i++)
{
outputString = outputString + "," + array[i].ToString();
if (array[i] != 0)
bypass = false;
}
if (bypass == false)
streamWriter.WriteLine(outputString);
for (int i = 0; i < array.Length; i++)
{
array[i] = 0;
}
}
public static void outputDetail(DateTime previousTime, ref int[] array, StreamWriter streamWriter) //the parameter in here is not necessary, but want to maintain a similiarity in the TimeOfDay class
{
string outputString = previousTime.ToString("yyyy/MM/dd");
Boolean bypass = true;
for (int i = 1; i < array.Length -1; i++)
{
if (array[i] != 0)
{
outputString = outputString + "," + array[i].ToString();
bypass = false;
}
else
{
outputString = outputString + ",";
}
}
if (bypass == false)
streamWriter.WriteLine(outputString);
for (int i = 0; i < array.Length; i++)
{
array[i] = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
它们完全相同,只有一个采用双数组,一个采用int数组,我看到一些例子使用Iconvertible但我不能正确使用语法.有人可以为方法发布一些可行的片段吗?
我怎么称呼它?
编辑:非常感谢答案,我有另一个更复杂的情况我需要重构,这里的建议不适用于这两种方法.请单击此链接以获取更多详细信息
将您的代码更改为:
public static void outputDetail<T>(DateTime previousTime, ref T[] array, System.IO.StreamWriter streamWriter) //the parameter in here is not necessary, but want to maintain a similiarity in the TimeOfDay class
{
string outputString = previousTime.ToString("yyyy/MM/dd");
Boolean bypass = true;
for (int i = 1; i < array.Length - 1; i++)
{
if (!Object.Equals(array[i], default(T)))
{
outputString = outputString + "," + array[i].ToString();
bypass = false;
}
else
{
outputString = outputString + ",";
}
}
if (bypass == false)
streamWriter.WriteLine(outputString);
Array.Clear(array, 0, array.Length);
}
Run Code Online (Sandbox Code Playgroud)
改变了什么?
首先,方法签名:它接受类型的通用阵列T(所以如果它也没关系int,double,bool或strings).
现在你必须将比较修正为零.零是int和double的默认值,因此您可以使用default(T)获取实际类型的默认值并Object.Equals()进行比较(==并且!=没有为泛型类型定义运算符).
最后你只需清除阵列(再次为零),这样你就可以简单地Array.Clear()用来完成所有工作(而且它甚至比手工制作更快for).