我这里有两个方法(killZombie)来处理你有一个参数(字符串)或多个参数(string [])的情况.因为他们做同样的事情,我做了另一个名为"killAZombie"的方法,这个方法被其他两种方法使用.我遇到的问题是方法"killAZombie"被命名为......有点奇怪.这是其他人遇到的问题吗?什么是解决这个问题的最佳方法,并将我的"KillAZombie"方法命名为"killZombie"更清楚的区别
public void killZombie(string zombieLocation){
killAZombie(zombieLocation);
}
public void killZombie(string[] zombieLocations){
foreach(string zombieLocation in zombieLocations){
killAZombie(zombieLocation);
}
}
public void killAZombie(string zombieLocation){
//Kills a zombie at specified location
}
Run Code Online (Sandbox Code Playgroud)
我可以看到这个问题得到解决的另一种方法是通过代替重载"killZombie"有两种不同的方法,如下所示:
public void killZombie(string zombieLocation){
//Kills a zombie at specified location
}
public void killZombies(string[] zombieLocations){
foreach(string zombieLocation in zombieLocations){
killZombie(zombieLocation);
}
}
Run Code Online (Sandbox Code Playgroud)
这样我们只有两个更容易理解的方法,但是方法没有重载.在我看来,重载方法似乎是一件好事(这只是意味着方法更少,更少杂乱)所以我也不确定这个解决方案.我有兴趣听听解决这个问题的最佳方法,谢谢!
附录:
我的方法实际上需要4个参数,因此params将在最后.params变量是最重要的变量,因此将其作为使params工作的最后一个参数似乎有点笨拙.我是否担心将最重要的论点放在最后,足够合法将方法分解为KillZombie和KillZombies,或者params仍然是正确的做事方式吗?
这是一些想法.
首先,公共方法的C#约定是将它们大写:"KillZombie",而不是"killZombie".
如果需要,您只需一种方法即可完成此操作.这是一个占用一个或多个位置的方法.来电者可以只提供一个清单:KillZombies(location1, location2, location3);
private void KillOneZombie(string location) { ... }
public void KillZombies(string location, params string[] additionalLocations)
{
KillOneZombie(location);
if (additionalLocations == null) return;
foreach(string additionalLocation in additionalLocations)
KillOneZombie(additionalLocation);
}
Run Code Online (Sandbox Code Playgroud)
如果你想要有两个方法,可以考虑让一个方法IEnumerable<string>代替一个数组; 这样调用者可以传入列表,查询,数组等等.
你的第二个命名模式更标准:KillZombie和KillZombies.
params变量是最重要的变量,因此将其作为使params工作的最后一个参数似乎有点笨拙.我是否担心将最重要的论点放在最后,足够合法将方法分解为KillZombie和KillZombies,或者params仍然是正确的做事方式吗?
我会考虑你期望如何使用该方法.考虑例如:
Console.WriteLine("User: {0} Score: {1}", user[i].Name, scores[i]);
Run Code Online (Sandbox Code Playgroud)
在这里,我们清楚地期望"params"将用于支持调用者中的可变数量的参数.从来没有人这样做过:
object[] results = new object[] { user[i].Name, scores[i] };
Console.WriteLine("User: {0} Score: {1}", results);
Run Code Online (Sandbox Code Playgroud)
即使这是完全合法的.如果您希望您的方法将像Console.WriteLine一样使用,其中将传入不同数量的参数,但参数的数量在编译时是已知的,则使用params.
如果你期望它将与第二种模式一起使用 - 某人有一系列位置 - 那么就不要使用params; 制作两个方法,KillZombie和KillZombies,并让其中一个采用IEnumerable字符串.
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |