而不是:
void MyFunction(List<float> list)
{
// do something
}
List<float> myList = new List<float>();
myList.Add(3.0);
myList.Add(4.0);
MyFunction(myList);
有没有办法做这样的事情?
MyFunction(new List<float>{3.0,4.0}());
意思是我将所有初始化直接保留在函数参数本身内。
答案 0 :(得分:1)
你真的很亲密。删除最后一对括号(并将你的双打投射到浮点数):
MyFunction(new List<float> { 3.0f, 4.0f });
答案 1 :(得分:1)
添加有关最酷params
关键字的信息。它允许您执行以下操作:
void MyFunction(params float[] list)
{
// do something
}
MyFunction(new float[] { 3.0f, 4.0f }); // valid call
MyFunction(3.0f, 4.0f); // also valid
MyFunction(32f); // also valid
MyFunction(); // also valid, beware! list will be an empty array
MyFunction(null); // also valid, beware! list will be null
请注意,执行此操作:new float[] { 3.0f, 4.0f }
是所谓的集合初始值设定项。无论是否将其作为参数发送,都可以使用它。其他的是使用关键字params
的好处,这实际上只是使它更短,更容易使用。
答案 2 :(得分:1)
您可以使用collection initializer或params array。
您的示例无法编译,因为禁止隐式强制转换,精度损失从double到float。
您需要一个精度低于目标类型,精确类型数字文字或显式强制转换的数字文字。
以下示例显示了方法参数中的List和params数组初始化:
[TestMethod]
public void TestMethod1()
{
// Original code with correct constant type.
MyFunction(new List<float> { 3.0f, 4.0f });
// Using an overload with a params array argument.
MyFunction(3.0f, 4.0f);
// Various float constant flavours.
MyFunction(3f, 3.0f, .0f, 3e-10f, (float)3);
// Implicit cast to float from anything with lesser precision or an explicit cast to float.
MyFunction((byte)1, (short)1, (int)1, 1, (long)1, 1L, (float)1);
}
void MyFunction(List<float> list)
{
throw new NotImplementedException();
}
void MyFunction(params float[] args)
{
throw new NotImplementedException();
}