web-dev-qa-db-ja.com

LINQPad [拡張]メソッド

誰でもLINQPad拡張メソッドとメソッドの完全なリストを持っていますか?

.Dump()

SubmitChanges()
130
Bent Rasmussen

LINQPadは、2つの拡張メソッド(LINQPad.Extensions内)、つまりDump()Disassemble()を定義します。 Dump()は、LINQPadの出力フォーマッターを使用して出力ウィンドウに書き込み、オーバーロードされて、ヘッダーを指定できるようにします。

_typeof (int).Assembly.Dump ();
typeof (int).Assembly.Dump ("mscorlib");
_

最大再帰深度を指定して、デフォルトの5レベルをオーバーライドすることもできます。

_typeof (int).Assembly.Dump (1);              // Dump just one level deep
typeof (int).Assembly.Dump (7);              // Dump 7 levels deep
typeof (int).Assembly.Dump ("mscorlib", 7);  // Dump 7 levels deep with heading
_

Disassemble()は、メソッドをILに逆アセンブルし、出力を文字列で返します。

_typeof (Uri).GetMethod ("GetHashCode").Disassemble().Dump();
_

これら2つの拡張メソッドに加えて、LINQPad.Utilにはいくつかの便利な静的メソッドがあります。これらはオートコンプリートで文書化されており、次のものが含まれます。

  • Cmd-Shellコマンドまたは外部プログラムを実行します
  • CreateXhtmlWriter-LINQPadのDump()フォーマッタを使用するテキストライターを作成します
  • SqlOutputWriter-SQL出力ウィンドウに書き込むテキストライターを返します
  • GetMyQueriesGetSamples-保存されたクエリを表すオブジェクトのコレクションを返します/サンプル(例:[編集] | [すべて検索]を使用して検索を実行します)
  • Highlight-ダンプされたときに黄色で強調表示されるようにオブジェクトをラップします
  • Horizo​​ntalRun-同じ行に一連のオブジェクトをダンプできます

LINQPadはHyperLinqクラスも提供します。これには2つの目的があります。最初の目的は、通常のハイパーリンクを表示することです。

_new Hyperlinq ("www.linqpad.net").Dump();
new Hyperlinq ("www.linqpad.net", "Web site").Dump();
new Hyperlinq ("mailto:[email protected]", "Email").Dump();
_

これを_Util.HorizontalRun_と組み合わせることができます:

_Util.HorizontalRun (true,
  "Check out",
   new Hyperlinq ("http://stackoverflow.com", "this site"),
  "for answers to programming questions.").Dump();
_

結果:

チェックアウト このサイト プログラミングの質問への回答をご覧ください。

HyperLinqの2番目の目的は、クエリを動的に構築することです。

_// Dynamically build simple expression:
new Hyperlinq (QueryLanguage.Expression, "123 * 234").Dump();

// Dynamically build query:
new Hyperlinq (QueryLanguage.Expression, @"from c in Customers
where c.Name.Length > 3
select c.Name", "Click to run!").Dump();
_

LINQPadで独自の拡張メソッドを作成することもできます。 [マイクエリ]に移動し、[マイ拡張機能]というクエリをクリックします。ここで定義するタイプ/メソッドはすべてのクエリにアクセスできます:

_void Main()
{
  "hello".Pascal().Dump();  
}

public static class MyExtensions
{
  public static string Pascal (this string s)
  {
    return char.ToLower (s[0]) + s.Substring(1);
  }
}
_

4.46(.02)で 新しいクラスとメソッドが導入されました

  • DumpContainer(クラス)
  • OnDemand(拡張メソッド)
  • Util.ProgressBar(クラス)

さらに、Hyperlinqクラスは、リンクをクリックしたときに呼び出される Action デリゲートをサポートするようになりました。これにより、外部Webページへのリンクだけでなく、コードで反応することができます。

DumpContainerは、内容を置換できるブロックを出力ウィンドウに追加するクラスです。

注!.Dump()DumpContainer自体を適切な場所に忘れないでください。

使用するには:

_var dc = new DumpContainer();
dc.Content = "Test";
// further down in the code
dc.Content = "Another test";
_

OnDemandは、パラメータの内容を出力ウィンドウに出力せず、クリック可能なリンクを追加する拡張メソッドです。クリックすると、リンクが.Dump() edの内容に置き換えられますパラメータ。これは、コストがかかるか、多くのスペースを必要とする、時々必要なデータ構造に最適です。

注!適切な場所でOnDemandを呼び出した結果を.Dump()することを忘れないでください。

使用するには:

_Customers.OnDemand("Customers").Dump(); // description is optional
_

_Util.ProgressBar_は、出力ウィンドウ内にグラフィカルなプログレスバーを表示できるクラスで、コードが進むにつれて変更できます。

注!.Dump()を適切な場所にあるUtil.ProgressBarオブジェクトに忘れないでください。

使用するには:

_var pb = new Util.ProgressBar("Analyzing data");
pb.Dump();
for (int index = 0; index <= 100; index++)
{
    pb.Percent = index;
    Thread.Sleep(100);
}
_
234
Joe Albahari

ダンプはグローバル拡張メソッドであり、SubmitChangesはSystem.Data.Linq.DataContextオブジェクトであるDataContextオブジェクトから取得されます。

私が知る限り、LPはダンプと逆アセンブルのみを追加します。 Reflectorで開くことを強くお勧めしますが、他に使用可能なものがあるかどうかを確認します。より興味深いものの1つは、LINQPadによって内部的に使用されるいくつかの利点を持つLINQPad.Util名前空間です。

2
John