在一个太长的方法中,它会滚动到屏幕外。只是为了让我在编程时更轻松,如果我想引用一个类的变量,我可以使用Me
orthis
对象,具体取决于我使用的语言。
eg. Me.var1 = "Hello"
是否有一个对象(如Me
)可以轻松引用函数的参数?
eg. params.par1 = "World"
在一个太长的方法中,它会滚动到屏幕外。只是为了让我在编程时更轻松,如果我想引用一个类的变量,我可以使用Me
orthis
对象,具体取决于我使用的语言。
eg. Me.var1 = "Hello"
是否有一个对象(如Me
)可以轻松引用函数的参数?
eg. params.par1 = "World"
语言中没有这样的功能。.NET 抖动对局部变量和方法参数进行了特殊处理,它们在运行时进行了大量优化。任何 .NET 会做的,或者你会做的,来捕获这些变量都会破坏这种优化。
一个非常简单的解决方案是使用 Window + Split,它为您的代码提供了两个视图。将顶部滚动到方法标题,在底部写入代码。您可以调整分离器以在底部窗口中为您提供更多空间。
利用 IntelliSense 将是另一种方式。用一个小字符串作为参数名称的前缀,例如“par”。然后在您的代码中键入“par”会自动在 IntelliSense 弹出窗口中为您提供参数名称列表。
然而,这些只是解决真正问题的创可贴。一旦您发现自己达到了这样的程度,您的第一个想法应该是拆分函数中的代码以使其更小。经过 30 年的编码,我发现了一些铁的事实:
一种简单的方法是将您的参数封装在一个对象中,这样您就可以引用它,而智能型(或任何预测功能)将向您显示您有哪些可用的属性,而无需向上滚动。像这样
public class MyParamObject{
public string FirstParam {get;set;}
public string SecondParam {get;set;}
}
然后你可以改变你的方法
public void MyReallyOvergrownMethod(string firstParam, string secondParam){...
至
public void MyReallyOvergrownMethod(MyParamObject params){...
然后您可以在方法中使用这样的 params 参数
//Deep inside the method
if(params.FirstParam == "SomeValue"{//Do something
这是解决问题的最佳解决方案,最好通过重构您的方法来解决。查看循环和条件,并将它们放入单独的私有方法中,这些方法以它们的作用命名。如果你搜索 cleancoders,这上面有很多东西。
最简洁的答案是不。似乎您希望使用它来区分具有相同名称的函数参数和字段的参数范围和类范围,不幸的是您不能。使用不同的命名方案,或执行以下操作:
public class MyClass {
private string myString;
private int myInt;
public MyClass(string myString) {
this.myString = myString;
}
public int DoStuff(int myInt) {
this.myInt += myInt;
return this.myInt;
}
}
要真正清楚并避免出现问题,您可以更改名称:
public class MyClass {
private string m_myString;
private int m_myInt;
public MyClass(string myString) {
m_myString = myString;
}
public int DoStuff(int myInt) {
m_myInt += myInt;
return m_myInt;
}
}
你真的应该从在代码之前编写一个测试开始,然后你可以检查你没有在你的代码中意外地混淆了东西。
脚注
我将其包括在内,因为来到此问题标题的人可能正在寻找以下信息。
当你说
只是为了便于编程 - 如果我在一个函数中走得很远,我想看看有哪些参数而不必向上滚动
如果您出于其他原因真的想从代码内部查看参数,那么您需要反思。这很慢,它的典型用途是找到一种方法,然后在该方法中反映参数。有关非常全面的示例,请参阅MSDN - ParameterInfo 类。代码的相关部分是:
foreach (MemberInfo mi in typeof(MyClass).GetMembers() )
{
// If the member is a method, display information about its parameters.
if (mi.MemberType==MemberTypes.Method)
{
foreach ( ParameterInfo pi in ((MethodInfo) mi).GetParameters() )
{
Console.WriteLine("Parameter: Type={0}, Name={1}", pi.ParameterType, pi.Name);
}
}
您应该能够使用GetParameters()
反射方法
MethodInfo barMI = bar.GetMethod("Foo");
ParameterInfo[] pars = barMI.GetParameters();
foreach (ParameterInfo p in pars)
{
Console.WriteLine(p.Name);
}
您可以在运行时使用它。但是为了您的目标,我会尝试重构函数的数量及其名称。我尝试将代码长度保持在每行 80 个符号以下,并将类中的行数保持在 100 以下。这并不总是可能的,但解耦并保持类简单是一个很好的目标。
根据您的评论“只是为了便于编程 - 如果我在函数中走得很远,我想看看有哪些参数而不必向上滚动”:在 Visual Studio 中,显示代码,就在滚动条上方有一点你可以抓住并拉下以拆分窗口。然后,您可以在一个窗格中显示您的函数声明,并在另一个窗格中尽可能多地滚动。或者您可以使用窗口菜单->拆分。