-1

画面からスクロールするほど長い方法で。プログラミングを簡単にするために、クラスの変数を参照したい場合は、使用している言語に応じてMeまたはオブジェクトを使用できます。this

eg. Me.var1 = "Hello"

Me関数のパラメーターを簡単に参照できるオブジェクト ( など) はありますか?

eg. params.par1 = "World"
4

5 に答える 5

0

あなたのコメントに照らして、「プログラミングを簡単にするために-関数でずっと下にいる場合、上にスクロールすることなく、どのパラメーターがあるかを確認したい」:Visual Studioで、スクロールバーのすぐ上にコードが表示されているウィンドウを分割するためにつかんで引き下げることができる小さな部分があります。次に、関数宣言を一方のペインに表示し、もう一方のペインで好きなだけスクロールできます。または、[ウィンドウ] メニュー -> [分割] を使用できます。

于 2013-05-23T09:52:56.637 に答える
0

簡単な方法は、パラメーターをオブジェクトにカプセル化して参照できるようにすることです。intellitype (または任意の予測機能) を使用すると、上にスクロールしなくても使用できるプロパティが表示されます。このような

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 を検索すると、これに関するものがたくさんあります。

于 2013-05-23T09:33:46.083 に答える
0

短い答えはノーです。これを使用して、関数パラメーターと同じ名前のフィールドのパラメータースコープとクラススコープを区別したいと考えているようですが、残念ながらできません。別の命名スキームを使用するか、次の手順を実行します。

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 Classを参照してください。コードの関連部分は次のとおりです。

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);
  }
}
于 2013-05-23T09:25:08.823 に答える
0

GetParameters()リフレクションメソッドを使用できるはずです

MethodInfo barMI = bar.GetMethod("Foo");
ParameterInfo[] pars = barMI.GetParameters();
foreach (ParameterInfo p in pars) 
{
    Console.WriteLine(p.Name);
}

これは実行時に使用できます。しかし、あなたの目的のために、関数の数とその名前をリファクタリングしようとします。私は、コードの長さを 1 行あたり 80 シンボル未満に、クラスの行数を 100 未満に保つようにしています。これは常に可能というわけではありませんが、物事を切り離してクラスをシンプルに保つことは良い目的です。

于 2013-05-23T09:25:26.397 に答える