Czy ktoś ma pełną listę metod i metod rozszerzających LINQPad, takich jak
.Dump()
SubmitChanges()
c#
.net
entity-framework
linq-to-sql
linqpad
Bent Rasmussen
źródło
źródło
Odpowiedzi:
LINQPad definiuje dwie metody rozszerzające (w LINQPad.Extensions), a mianowicie
Dump()
iDisassemble()
.Dump()
zapisuje do okna wyjściowego przy użyciu programu formatującego dane wyjściowe LINQPad i jest przeciążony, aby umożliwić określenie nagłówka:Możesz również określić maksymalną głębokość rekurencji, aby zastąpić domyślne 5 poziomów:
Disassemble () deasembluje każdą metodę do
IL
, zwracając wynik w postaci ciągu:Oprócz tych dwóch metod rozszerzających istnieje kilka przydatnych metod statycznych w LINQPad.Util. Są one udokumentowane w autouzupełnianiu i obejmują:
LINQPad udostępnia również klasę HyperLinq. Ma to dwa cele: pierwszym jest wyświetlanie zwykłych hiperłączy:
Możesz to połączyć z
Util.HorizontalRun
:Wynik:
Drugim celem HyperLinq jest dynamiczne budowanie zapytań:
Możesz również napisać własne metody rozszerzające w LINQPad. Przejdź do „Moje zapytania” i kliknij zapytanie o nazwie „Moje rozszerzenia”. Wszystkie zdefiniowane tutaj typy / metody są dostępne dla wszystkich zapytań:
W 4.46 (.02) wprowadzono nowe klasy i metody :
Ponadto klasa Hyperlinq obsługuje teraz Action delegata który będzie wywoływany po kliknięciu łącza, umożliwiając reagowanie na nie w kodzie, a nie tylko jako łącze do zewnętrznych stron internetowych.
DumpContainer
to klasa, która dodaje blok do okna wyjściowego, w którym można zamienić jego zawartość.UWAGA! Pamiętaj, aby
.Dump()
DumpContainer
siebie w odpowiednim miejscu.Używać:
OnDemand
to metoda rozszerzenia, która nie wyprowadza zawartości swojego parametru do okna wyjściowego, ale zamiast tego dodaje klikalne łącze, które po kliknięciu zastąpi łącze.Dump()
treścią ed parametru. Jest to świetne rozwiązanie w przypadku czasami potrzebnych struktur danych, które są kosztowne lub zajmują dużo miejsca.UWAGA! Pamiętaj o
.Dump()
wynikach rozmowyOnDemand
w odpowiednim miejscu.Aby z niego skorzystać:
Util.ProgressBar
to klasa, która może wyświetlać graficzny pasek postępu w oknie wyjściowym, który można zmieniać w miarę przesuwania się kodu.UWAGA! Pamiętaj by
.Dump()
w odpowiednim miejscu obiekt Util.ProgressBar.Aby z niego skorzystać:
źródło
Oprócz dobrze znanej
myQuery.Dump("Query result:")
, inną cechą, o której warto wspomnieć, jestUtil
klasa: zawiera wiele całkiem przydatnych metod (niektóre z nich wspomniałem, ale jest ich o wiele więcej).Interesujące jest również to, że możesz modyfikować sposób
Dump()
działania .Na koniec pokażę ci, jak możesz wprowadzać zmiany na stałe (tj. Wstawiać, aktualizować, usuwać zapytania LINQ) za pomocą
SubmitChanges()
lubSaveChanges()
a także jak uzyskać dostęp do wewnętrznego obiektu połączenia LinqPad.Podsumowując, pokażę Ci, jak możesz stworzyć prostą grafikę 2D wewnątrz LinqPada (rysowanie linii, bitmap lub funkcji ).
Oto zbiór wbudowanych funkcji LinqPad (z mojego własnego doświadczenia z narzędziem):
.Wysypisko()
(parametry dostępne w LinqPad v5.03.08 i nowszych)
Wszyscy użytkownicy LinqPad znają i uwielbiają
.Dump()
metodę rozszerzenia, która zużywa i drukuje (prawie) wszystko.Ale czy wiesz, że dostępnych jest kilka parametrów? Spójrz na ten fragment kodu:
W 1-ci przykład drukuje tylko zmienne
a
ic
oraz skórb
id
The 2-ci przykładowe nie odwrotnie (zauważ, że określa ona tylko 2 z dostępnych parametrów). Zmienney
iz
nie mogą być ukryte pojedynczo, ponieważ nie znajdują się na najwyższym poziomie.Dostępne są następujące parametry ( wszystkie są opcjonalne ):
description
[string] - zawiera opis obiektu do zrzutudepth
[int?] - ogranicza głębokość rekurencyjnej inspekcji obiektówtoDataGrid
[bool] - jeśli prawda, dane wyjściowe są formatowane jako datagrid, a nie jako RichTextexclude
[string] - jeśli podasz listę zmiennych oddzielonych przecinkami, zostaną one wykluczone z wyniku (w przykładzie „a, c”:b
id
są wyświetlane,a
ac
są ukryte)exclude
[string] z prefiksem „+” - prefiks odwraca logikę parametru wykluczenia. Oznacza to, że jeśli podasz listę zmiennych oddzielonych przecinkami, wszystkie poza określonymi są ukryte (w przykładzie „+ b, d”:b
id
są wyświetlane, a wszystkie inne są ukryte)var x=Util.ToExpando(obj, "a, c", "b, d"); x.Dump();
pierwszy ciąg zawiera listę właściwości do uwzględnienia, drugi ciąg listę do wykluczenia
.OnDemand("click me").Dump();
zamiast.Dump()
, wyświetli się link, który możesz kliknąć, aby rozwinąć. Przydatne, jeśli chcesz sprawdzić wartości, np.Util.OnDemand("Customer-ID: " + customerObject.ID.ToString(), ()=>customerObject, false).Dump();
Aby zawsze pokazywać ID domyślnie, ale ujawniać szczegółycustomerObject
tylko wtedy, gdy jesteś zainteresowany.Bardziej zaawansowane tematy dotyczące zrzutu można znaleźć tu i tam .
Środowisko
To nie jest rozszerzenie LinqPad, ale raczej klasa .NET, ale ponieważ jest przydatne, i tak o tym wspomnę. Możesz uzyskać wiele przydatnych informacji, których możesz użyć w swoich skryptach, takich jak:
NB Do uzyskania
Domain\UserName
użyłbymSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
raczej niż
Environment.UserDomainName+@"\"+Environment.UserName
.Util.WriteCsv
( nowe: dostępne od wersji LinqPad v4.45.05 (beta) )
Spowoduje to zapisanie zawartości tabeli
Customers
do pliku CSVc:\temp\customers.csv
. Możesz również znaleźć dobry przykład, jak używać,Util.WriteCsv
a następnie wyświetlać dane CSV w oknie wyników Linqpada tutaj .Poradnik:
Aby pobrać / utworzyć plik CSV, który znajduje się w tym samym katalogu co zapytanie, możesz użyć:
var csvFile=Util.CurrentQueryPath.Replace(".linq", ".csv");
Jeśli tabela jest duża, użyj jej
ObjectTrackingEnabled = false;
przed napisaniem pliku CSV, aby uniknąć buforowania go w pamięci.Jeśli chcesz wyprowadzić tabelę w formacie XML, a nie jako plik rozdzielany przecinkami, możesz to zrobić w następujący sposób:
Ten przykład zwraca wszystkie elementy mające atrybut,
attr1
który zawiera wartość"a"
z pliku XML, który ma taką samą nazwę jak zapytanie i jest zawarty w tej samej ścieżce. Sprawdź ten link, aby uzyskać więcej przykładów kodu.Util.GetPassword
Spowoduje to pobranie hasła z wbudowanego menedżera haseł LinqPad. Aby utworzyć i zmienić hasło, otwórz pozycję menu „Menedżer haseł” w menu „Plik” w LINQPad. Jeśli nie ma zapisanego hasła po uruchomieniu kodu C #, otworzy się okno dialogowe hasła z prośbą o podanie hasła i możesz je utworzyć i zapisać w locie, zaznaczając pole wyboru Zapisz hasło (w tym przykładzie hasło dla "UserXY" zostałby zapisany, a później możesz znaleźć ten wpis w menedżerze haseł ).
Zaletą jest to, że możesz bezpiecznie przechowywać hasło w LinqScripts, które tworzysz w bezpieczny sposób, oddzielnie i zaszyfrowane w profilu użytkownika systemu Windows (jest przechowywane
%localappdata%\LINQPad\Passwords
jako plik). LinqPad używa Windows DPAPI do ochrony hasła.Ponadto hasło jest przechowywane centralnie, więc jeśli chcesz je zmienić, możesz to zrobić w menu i od razu zostanie zastosowane do wszystkich utworzonych skryptów.
Uwagi:
Jeśli nie chcesz zapisywać hasła i po prostu wyświetlasz okno dialogowe hasła, możesz użyć drugiego parametru w następujący sposób:
var pwd = Util.GetPassword("UserXY", true);
Spowoduje to odznaczenie zapisywania hasła w oknie dialogowym hasła (jednak użytkownik nadal może je sprawdzić i wybierz opcję zapisania mimo wszystko).
Jeśli chcesz, aby hasło było przechowywane w a
SecureString
, możesz użyć tej funkcji pomocniczej (uwaga: aby uzyskać.ToSecureString()
używaną metodę rozszerzenia , skorzystaj z tego linku w Stackoverflow - umożliwia ona również konwersję z powrotem w razie potrzeby):System.Security.SecureString GetPasswordSecure(string Name, bool noDefaultSave=true)
{
return Util.GetPassword(Name, noDefaultSave)
.ToSecureString();
}
Util.Cmd
Ta metoda działa jak procesor poleceń. Możesz wywołać wszystkie znane polecenia z konsoli systemu Windows.
Przykład 1 - reż:
Spowoduje to wyświetlenie wyniku katalogu bez potrzeby
.Dump
. Przechowywanie go w zmiennej ma tę zaletę, że można na niej używać dalszych zapytań Linq. Na przykład:Spowoduje to zrzucenie wszystkich plików z rozszerzeniami „.exe” lub „.dll” zawartych w
C:\windows\system32
. Plik/s
Przełącznik służy do recurse wszystkie podkatalogi i/b
służy do gołej formatu wyjściowego. Należy zauważyć, że drugi parametr metody Cmd jest określony w celu pominięcia danych wyjściowych konsoli, aby wyświetlić tylko przefiltrowany wynik przy użyciu metody Dump.Jak widzisz, jest to bardziej elastyczne niż posiadane symbole wieloznaczne
dir
ponieważ możesz wykorzystać pełną elastyczność silnika zapytań Linq.Przykład 2 - edytor tekstu:
Możesz otworzyć plik w Notatniku w następujący sposób:
Util.Image
Wyświetla obrazy z adresu URL. Przykład:
Util.ProgressBar, Util.Progress
Użycie
Util.ProgressBar
umożliwia wyświetlenie paska postępu. Możesz użyć następującej klasy pomocnika:Po prostu użyj go, jak pokazuje poniższy przykład:
Możesz alternatywnie użyć
Util.Progress
do aktualizacji zintegrowanego paska postępu LinqPads, na przykład:Różnica polega na tym, że nie wyświetli się w oknie wyników i nie możesz przypisać do niego wiadomości.
Util.RawHtml
Wyświetla HTML w oknie wyjściowym. Przykład:
Hyperlinq, Util.HorizontalRun
Możesz użyć tej przykładowej funkcji
aby pokazać hiperłącza w oknie wyników - lub dowolne działania, takie jak otwarcie ulubionego edytora. Stosowanie:
Zauważ, że ta funkcja zawsze działa, podczas gdy
new Hyperlinq ("http://myURL", "Web site").Dump();
nie działa w przypadku niektórych adresów URL (szczególnie, jeśli musisz podać nazwy portów, takie jak „: 1234” jako część adresu URL).Util.ReadLine
Odczytuje dane wejściowe z konsoli. Przykład:
Jako synonim słowa
Util.ReadLine<string>()
możesz również użyćConsole.ReadLine()
.Ale to nie wszystko! Możesz utworzyć prosty parser JSON za pomocą następującego fragmentu kodu - całkiem przydatne, na przykład, jeśli chcesz przeanalizować i przetestować ciąg JSON w locie. Zapisz następujący fragment kodu jako JSONAnalyzer.linq za pomocą edytora tekstu, a następnie otwórz go w LinqPad (ma to na celu łatwe dodawanie odniesień w locie):
Teraz możesz go uruchomić i po prostu wkleić ciąg JSON ze schowka do konsoli - użyje
Dump
funkcji, aby ładnie wyświetlić go jako obiekt - a także otrzymasz komunikaty o błędach parsera na ekranie, aby naprawić problemy. Bardzo przydatne do debugowania AJAX.Util.ClearResults
Jeśli chcesz wyczyścić okno wyników w skrypcie, użyj:
Albo użyj go na górze skryptu, albo - jeśli wykonujesz wiele zapytań w skrypcie - powinieneś poczekać na wejście użytkownika przed wyczyszczeniem ekranu (np. Poprzedzając go
Util.ReadLine
).Niestandardowy .Dump () - ICustomMemberProvider
Interesujące jest również to, że możesz zmienić wynik
.Dump()
metody. Wystarczy zaimplementować interfejsICustomMemberProvider
npJeśli utworzysz instancję tej klasy, na przykład
to będzie tylko wyjście
Hint
,constMember1
,constMember2
, imyprop
, ale nie właściwośćxyz
:Wyświetlanie MessageBox lub InputBox w LinqPad
Jeśli chcesz wyświetlić skrzynkę wiadomości, zobacz , jak to zrobić.
Na przykład możesz wyświetlić InputBox przy użyciu następującego kodu
(nie zapomnij nacisnąć F4 i dodać Microsoft.VisualBasic.dll i jego przestrzenie nazw, aby to zadziałało)
Util.Run
( nowe: dostępne od wersji LinqPad v4.52.1 (beta) )
Umożliwia uruchomienie innego skryptu LINQPad z poziomu skryptu lub z własnego programu .NET lub usługi systemu Windows (przez odwołanie do wersji LINQPad4-AnyCPU
LINQPad.exe
). Wykonuje skrypt tak, jaklprun.exe
zrobiłoby to narzędzie wiersza poleceń .Przykłady:
Ten przykład uruchamia skrypt
foo.linq
, który zawiera następujący przykładowy kod:Pozwala sprawdzić, czy skrypt został uruchomiony z poziomu GUI LinqPad lub przez
lprun.exe
lub zUtil.Run
.Uwaga: Pomocne mogą być następujące warianty wywołania:
SubmitChanges () - Linq To SQL
Jeśli używasz LinqToSQL , możesz chcieć wprowadzić zmiany na stałe (dla operacji wstawiania / aktualizowania / usuwania ). Ponieważ kontekst bazy danych jest niejawnie tworzony przez LinqPad, musisz wywołać
SubmitChanges()
każdą zmianę, jak pokazano poniżej.Przykłady bazy danych (LinqPad-) Northwind :
Wstawić
Aktualizacja
Usunąć
Uwaga: aby uzyskać prawidłowe identyfikatory z poprzednich przykładów, możesz użyć:
zanim je przywołasz.
SaveChanges () - Entity Framework
Jeśli używasz Entity Framework , możesz również wprowadzić zmiany na stałe (w przypadku operacji wstawiania / aktualizowania / usuwania ). Ponieważ kontekst bazy danych jest niejawnie tworzony przez LinqPad, musisz wywołać
SaveChanges()
każdą zmianę, jak pokazano poniżej.Przykłady są w zasadzie takie same jak wcześniej dla LinqToSQL , ale musisz użyć
SaveChanges()
, a metody wstawiania i usuwania również się zmieniły.Wstawić
Aktualizacja
Usunąć
Uwaga: aby uzyskać prawidłowe identyfikatory z poprzednich przykładów, możesz użyć:
zanim je przywołasz.
this - kontekst bazy danych
W LINQPad The kontekst baza danych jest stosowana automatycznie za pomocą combobox na górze i wybierając odpowiednią bazę dla Twojego zapytania. Ale czasami warto odwołać się do niego jawnie, na przykład jeśli skopiujesz kod z projektu z programu Visual Studio i wkleisz go do LinqPad.
Twój fragment kodu pobrany z projektu programu Visual Studio najprawdopodobniej wygląda następująco:
Co teraz zrobić
dc
? Oczywiście możesz usunąć każde wystąpieniedc.
w zapytaniu, ale jest to znacznie łatwiejsze. Poprostu dodajna górę fragmentu kodu, na przykład:
a kod zadziała natychmiast!
this.Connection
Korzystanie z LinqPad z OleDb, konwersja obiektu datatable na obiekt Linq, zapytania SQL w Linq
Poniższy fragment kodu ułatwia korzystanie z LinqPad z OleDb. Dodaj
System.Data.OleDb
zSystem.Data
zestawu do właściwości zapytania, a następnie wklej następujący kod doMain()
:Teraz dodaj połączenie SqlServer do LinqPad i dodaj bazę danych Northwind, aby uruchomić ten przykład.
NB: Jeśli chcesz tylko uzyskać bazę danych i serwer aktualnie wybranego połączenia, możesz użyć tego fragmentu kodu:
Możesz nawet zamienić
myDS
na Linq, odpowiedzi na następujące pytanie pokazują, jak to zrobić: Ładne przykłady użycia dynamicznego słowa kluczowego .NET 4 z LinqJeszcze jeden przykład: załóżmy, że Twój DBA wysyła zapytanie SQL i chcesz przeanalizować wyniki w LinqPad - oczywiście w Linq, a nie w SQL. Następnie możesz wykonać następujące czynności:
W tym przykładzie zapytanie SELECT DBA jest po prostu „wrzucane” do tekstu polecenia, a wyniki są filtrowane i sortowane według miasta.
Oczywiście jest to uproszczony przykład, Twój DBA prawdopodobnie dałby ci bardziej złożony skrypt, ale masz pomysł: po prostu dodaj pomocniczą klasę wyników, która zawiera wszystkie pola z klauzuli SELECT, a następnie możesz jej bezpośrednio użyć .
Możesz nawet pobrać wynik z procedury składowanej w ten sposób i użyć go w Linq. Jak widać, w tym przykładzie nie obchodzi mnie typ danych i używam go
dynamic
do wyrażenia.Tak naprawdę chodzi o szybkie programowanie, aby móc szybko analizować dane. Nie powinieneś tego robić w swojej prawdziwej aplikacji z różnych powodów (iniekcja SQL, ponieważ możesz używać EF od początku itp.).
PanelManager
Narysuj grafikę w LinqPad, część 1
Aby korzystać z przykładów poniżej, naciśnij F4i dodać
System.Windows.dll
,System.Windows.Forms.dll
,WindowsFormsIntegration.dll
,PresentationCore.dll
iPresentationFramework.dll
do swojego programu LINQPad a także dodać przestrzeń nazwSystem.Windows.Shapes
.1-ci przykład po prostu rysuje linię:
The 2nd przykład pokazuje, jak można wyświetlacz graficzny w LINQPad za pomocą PanelManager. Zwykle LinqPad obsługuje tylko obiekty WPF. W tym przykładzie użyto
System.Windows.Forms.Integration.WindowsFormsHost
zrobićWindows.Forms.PictureBox
dostępna (to był inspirowany przez to ):Stworzy to następującą grafikę (elementy panelu „Grafika” i „Obraz” są dodawane do powyższych przykładów):
Jeśli chcesz wyświetlić obrazy z bazy danych Northwind, możesz wykonać następujące czynności:
Zmień nazwę pliku obrazu na „NorthwindPics.jpg”, a następnie dodaj następujący kod na początku metody Main () w drugim przykładzie :
Odczyta pierwszy rekord z tabeli Pracownicy i wyświetli obraz.
Sprawdź poniższe łącza, aby dowiedzieć się więcej:
Kształty i podstawowe rysunki w niestandardowych wizualizatorach WPF
LinqPad
Uwaga: możesz osiągnąć to samo bez PanelManagera, co pokazuje poniższy przykład, który tutaj widziałem :
Używa
.Dump()
polecenia, aby go wyświetlić. Możesz wywołaćimage.Dump()
wiele razy, a to dołączy obraz.Windows Forms
Narysuj grafikę w LinqPad, część 2
Poniższy przykład, zainspirowany tym postem, pokazuje, jak zaimplementować prosty ploter funkcyjny w Linqpad 5 przy użyciu C # 7:
Wykorzystuje możliwości LinqPada do wyświetlania formularzy Windows w panelu wyników. Dodaj referencje (naciśnij ) : , , i dodanie wszystkich nazw tych zespołów.
F4
System.Drawing.dll
System.Windows.Forms.dll
System.Windows.Forms.DataVisualization.dll
Dodatkowe wskazówki / dalsze czytanie:
Chcesz używać LinqPad w programie Visual Studio ? Oto jak możesz to zrobić .
Chcesz mieć LinqPad jako „aplikację przenośną” ? Przeczytaj tutaj, jak to zrobić.
Witryna Joe dla LinqPad jest zawsze doskonałym źródłem. Wewnątrz LinqPad
Help -> What's New
znajdziesz wskazówki dotyczące nowych funkcji i metod. LINQPad Forum zawiera również pomocnych wskazówek.Również bardzo pomocny: ten artykuł o debugowaniu Linq (Pad).
Służy
lprun.exe
do uruchamiania zapytań LINQ w skryptach wsadowych. Przeczytaj ten artykuł, aby uzyskać więcej informacji. Na przykład: wecho Customers.Take(100) > script.txt
lprun -lang=e -cxname=CompanyServer.CustomerDb script.txt
tym przykładzie zapytanie jest prostym wyrażeniem LINQ. Oczywiście możesz również przygotować złożone zapytania używając
-lang=program
do aktywacji trybu programu.Możesz pisać metody rozszerzające i przechowywać je w zakładce Moje zapytania po lewej stronie LinqPad: Ostatni element drzewa nosi nazwę Moje rozszerzenia ; kliknij go dwukrotnie, aby otworzyć plik, w którym możesz zapisać rozszerzenia dostępne dla wszystkich zapytań. Po prostu umieść je w publicznej klasie statycznej
MyExtensions
i użyjMain()
metody, aby dołączyć testy dla swoich rozszerzeń.źródło
Dump jest globalną metodą rozszerzającą, a SubmitChanges pochodzi z obiektu DataContext, który jest obiektem System.Data.Linq.DataContext.
LP dodaje tylko Dump and Disassemble, o ile wiem. Chociaż gorąco polecam otwarcie go w Reflektorze, aby zobaczyć, co jeszcze można użyć. Jedną z bardziej interesujących rzeczy jest przestrzeń nazw LINQPad.Util, która zawiera pewne dodatki używane wewnętrznie przez LINQPad.
źródło
.Dump()
lub jakąkolwiek inną metodę w edytorze źródłowym, naciśnij F12, aby „odzwierciedlić”. Jest to teraz wbudowane w narzędzie!Osiągnąłem limit tekstu StackOverflow w mojej poprzedniej odpowiedzi , ale wciąż jest więcej fajnych rozszerzeń w LinqPad. O jednym z nich chciałbym wspomnieć:
Funkcje JavaScript (używanie
.Dump()
)Od wersji 5.42 beta LinqPad możesz osadzać funkcje JavaScript i wywoływać je bezpośrednio z kodu C #. Chociaż ma to pewne ograniczenia (w porównaniu z JSFiddle), jest to dobry sposób na szybkie przetestowanie kodu JavaScript w LinqPad.
Przykład:
W tym przykładzie funkcja
jsFoo
z jednym parametrem jest przygotowywana i zapisywana w zmiennejliteral
. Następnie jest renderowany i wywoływany przez.Dump().HtmlElement.InvokeScript(...)
, przekazując parametrtestparam
.Funkcja JavaScript używa
external.Log(...)
do wyprowadzania tekstu w oknach wyjściowych LinqPad ialert(...)
do wyświetlania wyskakującego komunikatu.Możesz to uprościć, dodając następujące klasy / metody rozszerzenia:
Następnie możesz wywołać poprzedni przykład w następujący sposób:
Ma to ten sam efekt, ale jest łatwiejsze do odczytania (jeśli zamierzasz robić więcej JavaScript ;-)).
Inną opcją, jeśli lubisz wyrażenia lambda i nie lubisz określać nazwy funkcji jako łańcucha za każdym razem, gdy ją wywołujesz, możesz zrobić:
pod warunkiem, że dodałeś funkcję pomocniczą
do klasy
ScriptExtension
. Spowoduje to rozpoznanie użytej nazwy zmiennej (tutajjsFoo
), która jest tą samą nazwą, co sama funkcja JavaScript (zwróć uwagę, jak wyrażenie lambda jest używane do rozpoznawania nazwy zmiennej, nie można tego zrobić, używającnameof(paramName)
wewnątrz funkcji)..Dump () - aktualizowanie wiadomości w tekście
Czasami warto nadpisać zrzucony tekst , zamiast umieszczać go w nowym wierszu, na przykład, jeśli wykonujesz długotrwałe zapytanie i chcesz pokazać jego postęp itp. (Zobacz także ProgressBar poniżej). Można to zrobić za pomocą pliku
DumpContainer
, możesz go użyć, jak pokazano wPrzykład 1:
Zwróć uwagę, że w przypadku bardziej złożonych obiektów może być konieczne użycie
dc.UpdateContent(obj);
zamiastdc.Content=...
.Przykład 2:
Util.ProgressBar
Postęp można również wyświetlić za pomocą ProgressBar w następujący sposób:
Przykład:
Jest to podobne do poprzedniego przykładu zrzutu, ale tym razem pokazuje ładną animację paska postępu.
Testowanie jednostkowe za pomocą LinqPad - xUnit
Czy wiesz, że możesz pisać testy jednostkowe w LinqPad? Na przykład możesz użyć struktury xUnit. Jest dostępny poprzez obsługę NUGET LinqPad - przez F4- w oknie dialogowym kliknij Add NUGET..... Oto opis krok po kroku, jak używać xUnit z LinqPad V5 lub V6.
Jeśli dowiem się więcej, zaktualizuję tę odpowiedź
źródło