我有一个带有方法的静态类:
public static class FooUtilities
{
public static FooStruct[] GetFooBar(int foo)
{
var fooStruct = new FooStruct[];
// Connect to SOAP API, collect data to put in fooStruct
...
return fooStruct;
}
}现在我想使用GetFooBar(int foo)的结果作为另一个方法的参数,该方法使用此方法的结果来创建新的fooItem项,如下所示:
public static FooItem CreateFooItem(fooResult = GetFooBar(int foo))
{
var fooItem = new FooItem(fooResult[0].value, fooResult[1].value,fooResult[2].value);
...
return fooItem;
}我现在这样做是这样写的:
public static FooItem CreateFooItem(FooStruct[] fooResult)
{
var fooItem = new FooItem(fooResult[0].value, fooResult[1].value,fooResult[2].value);
...
return fooItem;
}这是可行的,但是我必须像这样调用这个方法:
FooItem myItem = FooUtilities.CreateFooItem(FooUtilities.GetFooBar(12321));我想要的是能够调用:
FooItem myItem = FooUtilities.CreateFooItem();并在调用此方法时隐式包含参数。
这个是可能的吗?
发布于 2012-11-15 18:28:12
不需要,默认参数值需要是编译时间常量。但是你可以这样做:
public static FooItem CreateFooItem(FooStruct[] fooResult = null)
{
if(fooResult==null)
{
fooResult = FooUtilities.GetFooBar(12321);
}
...
}如果GetFooBar每次都会生成相同的默认值,您可以选择“保存”该默认值。这可能会提高性能,具体取决于用例:
private FooStruct[] defaultValue = null;
public static FooItem CreateFooItem(FooStruct[] fooResult = null)
{
if(fooResult==null)
{
fooResult = defaultValue ?? defaultValue = FooUtilities.GetFooBar(12321);
}
...
}https://stackoverflow.com/questions/13395492
复制相似问题