繁体   English   中英

将值传递给方法

[英]Passing values into methods

所以,假设你有:

public void TestFishsticks()
{ 
   var fishes = GetFishstick(false);
}

private object GetFishstick(bool getBigFishes)
{
  return FishsticksManager().GetFishsticks(getBigFishes);
}

VS

public void TestFishsticks()
{ 
   var fishes = GetFishstick(getBigFishes: false);
}

private object GetFishstick(bool getBigFishes)
{
  return FishsticksManager().GetFishsticks(getBigFishes);
}

这有什么理由吗?

在我目前的公司代码库中,我们似乎都做了两个,但似乎没有理由一个在另一个。 我可以通过第二种选择看到一个小的可读性改进,因为你可以立即看到参数名称,但是你可以通过intellisense看到它吗?

命名参数主要在C#4.0中引入,以提高可读性。 你实际上不必使用它们。 有些人喜欢在某些情况下使用它们,有些则不喜欢。 这基本上取决于你。

它可以极大地提高可读性,尤其是当您不想一直读取代码时触发智能感知(甚至更糟糕的是,查看打印输出)。 比较这两个:

CalculateBMI(123, 178); // What do the numbers mean?
CalculateBMI(weightInKg: 123, heightInCentimeters: 178); // Clearer IMHO.

但是,通过一起使用命名参数和可选参数,您可以从可选参数列表中仅为少数参数提供参数。 例如,此功能极大地方便了对COM接口的调用。

似乎没有理由一个在另一个之上

使用命名参数的一些好理由:

代码更容易理解,特别是当参数为falsenull0""等等时。

命名参数适用于可选参数。 如果您只需要指定一些参数,那么需要十几个参数的方法可以拥有简化的调用站点。

在早期开发过程中,面对重新排序的重构,代码非常强大。 如果您在向客户发布之前进行了重大更改,请更改:

void M(int width, int height)

void M(int height, int width)

那么说的所有代码

M(height: 123, width: 456);

仍然是正确的,但代码说

M(123, 456);

需要更新。

类似地,这使代码在更改指定矩形的方法时变得健壮:

M(int top, int bottom, int left, int right)

这种方法:

M(int top, int height, int left, int width)

一个明显的突破性变化

M(top: 10, bottom: 20, left: 30, width: 40)

方法更改时会出错。 此代码不会,并改变行为:

M(10, 20, 30, 40);

是的,它主要是一个可读性的东西。 当你有一长串可选参数时,它也会派上用场,比方说;

public bool GetFishstick(int x = 1, int y = 2, int z = 3)
{
...
}

// Called as such: The other optional parameters (x,y) are supplied automatically.
var fish = GetFishstick(z: 10);

// Compare to the alternative where you have to provide them.
var fish = GetFishstick(1,2,10);

还应该注意,智能感知并不总是可用的。 例如,在像WinMerge这样的差异查看器中读取代码,或偶尔读取记事本。 尽管intellisense不是,但仍然可以通过使用命名参数来实现可读性。

你在这里使用的是命名参数

它们可以极大地增加可读性。 特别是对于布尔人。

考虑:

var date = GetDate(2011, 2, 3);  // 'feb 3' or '2nd of march' ? 

相反,如果你读

var date = GetDate(year:2011, month:2, day:3); 

你知道的更多。 它可以避免这么多的混乱。 作为奖励,您可以按照自己喜欢的方式拨打电话:

var date = GetDate(month:2, day:3, year:2011);  // same date.

命名参数仅在C#4之后可用。

命名参数有助于我们不记住或查找被调用方法的参数列表中的参数顺序。 每个参数的参数可以通过参数名称指定。 由于您有一个参数,因此(个人)没有意义。 如果你有多个,那么它将有助于改变顺序或快速可读性(如果你不关心方法intellisense)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM