使用
之类的方法时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>);
}
如果要返回输入,则什么都不会改变,可以按原样返回,还是应该将其克隆并作为返回类型返回?
答案 0 :(得分:2)
由于您的方法签名是这样的:
public static T[] RemoveFirstElement<T>(this T[] array)
我认为这将始终返回一个 new 数组。因为您总是需要写:
var myArray = SomeArray.RemoveFirstElement();
您不希望myArray
现在指向与SomeArray
完全相同的对象。如果您希望它始终在现有数组上运行,则方法签名为:
public static void RemoveFirstElement<T>(this T[] array)
这样写:
var myArray = SomeArray.RemoveFirstElement();
将导致编译时错误。很明显,看到:
SomeArray.RemoveFirstElement();
将就地操作。
答案 1 :(得分:0)
长度为零的数组是不可变的,因此可以安全地返回它而无需克隆。
要从非空数组中删除元素,无论如何都需要将其克隆,因为数组的长度无法更改。
public static T[] RemoveFirstElement<T>(this T[] array)
{
if (array == null)
{
throw new ArgumentNullException(nameof(array));
}
else if (array.Length == 0)
{
return array;
}
else
{
return array.Skip(1).ToArray();
}
}
答案 2 :(得分:0)
这是我对新示例的看法:
public static T[] GetZeroArrayIfNot<T>(this T[] array)
{
if (array == null)
{
throw new ArgumentNullException("array");
}
else if (array.Length == 0)
{
return array;
// because the name of the method implies that a zero-length array
// should be treated differently than a non-zero-length array
}
return new T[0];
}
public static int HundredOrLess(int num)
{
if (num <= 100)
{
return num;
// It doesn't matter. The caller is not affected either way
// because num is an immutable value type passed by value
}
return 100;
}
public static List<T> ReturnItself<T>(List<T> list)
{
return list; // Because the method name says so
}