【发布时间】:2019-05-14 17:31:49
【问题描述】:
当你有一个方法比如
public static T[] GetZeroArrayIfNot<T>(this T[] array)
{
if (array == null)
{
throw new ArgumentNullException("array");
}
else if (array.Length == 0)
{
return //array or (array.Clone() as T[])?
}
return new T[0];
}
或类似的东西
public static int HundredOrLess(int num)
{
if (num <= 100)
{
return //num or ((int num2 = num) => (return num2)) doubt this one matters.
}
return 100;
}
或
public static List<T> ReturnItself<T>(List<T> list)
{
return //list or (list.Clone() as List<T>);
}
如果输入被返回,没有任何改变,它可以像它本身一样被返回,还是应该被克隆并作为返回类型返回?
【问题讨论】:
-
这取决于需求,您是要克隆数组(及其对象)还是要更改现有数组?
-
谁知道呢。取决于您的方法的逻辑/目的类型。不要问我们,问问你自己;-)
-
返回零元素数组的指针并不重要,因为要添加一个元素,您必须创建一个新数组,因此修改一个元素不会影响另一个。如果这是
List<T>,那就另当别论了。 -
方法名
RemoveFirstElement暗示输入应该至少有一个元素,如果没有,应该抛出异常。否则,您应该更改方法的名称以反映实际功能。然后我敢打赌,如何处理克隆问题将是非常明显的。 ?????? -
软件开发人员倾向于从字面上理解。这可能只是一个示例,但此示例的答案可能与其他示例的答案不同。
标签: c# clone return-value