क्या किसी के पास लिनक्यूपैड विस्तार विधियों और विधियों की पूरी सूची है, जैसे कि
.Dump()
SubmitChanges()
क्या किसी के पास लिनक्यूपैड विस्तार विधियों और विधियों की पूरी सूची है, जैसे कि
.Dump()
SubmitChanges()
जवाबों:
LINQPad दो विस्तार के तरीकों (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 () किसी भी तरीके को disassembles करता है IL
, एक स्ट्रिंग में आउटपुट लौटाता है:
typeof (Uri).GetMethod ("GetHashCode").Disassemble().Dump();
उन दो विस्तार विधियों के अलावा, LINQPad.Util में कुछ उपयोगी स्थिर तरीके हैं। ये स्वत: पूर्णता में प्रलेखित हैं, और इसमें शामिल हैं:
LINQPad हाइपरलिंक वर्ग भी प्रदान करता है। इसके दो उद्देश्य हैं: पहला साधारण हाइपरलिंक प्रदर्शित करना है:
new Hyperlinq ("www.linqpad.net").Dump();
new Hyperlinq ("www.linqpad.net", "Web site").Dump();
new Hyperlinq ("mailto:user@domain.com", "Email").Dump();
आप इसे इसके साथ जोड़ सकते हैं Util.HorizontalRun
:
Util.HorizontalRun (true,
"Check out",
new Hyperlinq ("http://stackoverflow.com", "this site"),
"for answers to programming questions.").Dump();
परिणाम:
की जाँच करें इस साइट सवाल प्रोग्रामिंग के उत्तर के लिए।
हाइपरलिंक का दूसरा उद्देश्य गतिशील रूप से प्रश्नों का निर्माण करना है:
// 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
एक वर्ग है जो आउटपुट विंडो में एक ब्लॉक जोड़ता है जो कि इसकी सामग्री को प्रतिस्थापित कर सकता है।
ध्यान दें! के लिए याद रखें उचित स्थान में ही।.Dump()
DumpContainer
काम में लाना:
var dc = new DumpContainer();
dc.Content = "Test";
// further down in the code
dc.Content = "Another test";
OnDemand
एक विस्तार विधि है जो अपने पैरामीटर की सामग्री को आउटपुट विंडो में आउटपुट नहीं करेगी, बल्कि एक क्लिक करने योग्य लिंक जोड़ देगी, जब क्लिक किया गया लिंक .Dump()
पैरामीटर की एड सामग्री के साथ बदल देगा । यह कभी-कभी आवश्यक डेटा संरचनाओं के लिए बहुत अच्छा है जो महंगा है या बहुत अधिक स्थान लेता है।
ध्यान दें! उपयुक्त स्थान पर .Dump()
कॉल करने के परिणामों को याद रखें OnDemand
।
इसके प्रयेाग के लिए:
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);
}
अच्छी तरह से ज्ञात के अलावा myQuery.Dump("Query result:")
, उल्लेख करने के लिए एक और विशेषता Util
वर्ग है: इसमें कई काफी आसान तरीके हैं (उनमें से कुछ मैंने उल्लेख किया है, लेकिन बहुत अधिक हैं)।
यह भी दिलचस्प है कि आप काम करने के तरीकेDump()
को संशोधित कर सकते हैं ।
अंत में मैं तुम्हें दिखाता हूँ कैसे आप कर सकते हैं परिवर्तनों को स्थायी बनाने के (यानी डालने, अद्यतन, हटाने LINQ प्रश्नों) का उपयोग कर SubmitChanges()
या SaveChanges()
कैसे आप LINQPad के आंतरिक कनेक्शन वस्तु का उपयोग कर सकते हैं और साथ ही।
और इसे गोल करने के लिए, मैं आपको दिखाता हूँ कि आप LinqPad के अंदर सरल 2d ग्राफ़िक कैसे बना सकते हैं ( रेखाएँ, बिटमैप या फ़ंक्शन आरेखण )।
तो, यहाँ LinqPad सुविधाओं में निर्मित (उपकरण के साथ मेरे अपने अनुभव से) का एक संग्रह है :
(LinqPad v5.03.08 और इसके बाद के संस्करण में उपलब्ध पैरामीटर)
सभी LinqPad उपयोगकर्ता .Dump()
विस्तार विधि को जानते हैं और पसंद करते हैं , जो सब कुछ उपभोग और प्रिंट करता है (लगभग)।
लेकिन क्या आप जानते हैं कि कुछ पैरामीटर उपलब्ध हैं? इस कोड स्निपेट पर एक नज़र डालें:
var obj=new { a="Hello", b=5, c="World", d=new { y=5, z=10 } };
obj.Dump(description: "1st example", depth: 5, toDataGrid: false, exclude: "b,d");
obj.Dump("2nd example", exclude: "a,c");
obj.Dump("2nd example", exclude: "+b,d"); // new in V5.06.06 beta
1 उदाहरण प्रिंट केवल चर a
और c
और खाल b
और d
, 2 उदाहरण विपरीत (ध्यान दें कि यह निर्दिष्ट करता उपलब्ध मापदंडों के केवल 2) करता है। चर y
और z
व्यक्तिगत रूप से छुपाया नहीं जा सकता, क्योंकि वे शीर्ष स्तर पर नहीं हैं।
निम्नलिखित पैरामीटर उपलब्ध हैं ( सभी वैकल्पिक हैं ):
description
[स्ट्रिंग] - डंप करने के लिए ऑब्जेक्ट के लिए एक विवरण प्रदान करता हैdepth
[int?] - सीमाएं कितनी गहराई से वस्तुओं का पुनरावर्ती निरीक्षण करती हैंtoDataGrid
[बूल] - यदि सही है, तो आउटपुट रिचटैक्स के बजाय डेटाग्रिड के रूप में स्वरूपित हैexclude
[स्ट्रिंग] - यदि आप चर की अल्पविराम से अलग सूची प्रदान करते हैं, तो उन्हें आउटपुट से बाहर रखा जाएगा (उदाहरण में "a, c": b
और d
दिखाए गए हैं, a
और c
छिपे हुए हैं)exclude
[स्ट्रिंग] "+" उपसर्ग के साथ - उपसर्ग बाहर के पैरामीटर के तर्क को अयोग्य बनाता है। इसका मतलब है, यदि आप चर की अल्पविराम से अलग की गई सूची प्रदान करते हैं, तो निर्दिष्ट किए गए को छोड़कर सभी छिपे हुए हैं (उदाहरण में "+ b, d": b
और d
दिखाए गए हैं, अन्य सभी छिपे हुए हैं)var x=Util.ToExpando(obj, "a, c", "b, d"); x.Dump();
.OnDemand("click me").Dump();
इसके बजाय उपयोग करते हैं .Dump()
, तो यह एक लिंक प्रदर्शित करेगा जिस पर आप विस्तार करने के लिए क्लिक कर सकते हैं। उपयोगी है यदि आप मानों का निरीक्षण करना चाहते हैं, उदाहरण के Util.OnDemand("Customer-ID: " + customerObject.ID.ToString(), ()=>customerObject, false).Dump();
लिए आईडी को हमेशा डिफ़ॉल्ट रूप से दिखाएं, लेकिन customerObject
यदि आप में रुचि रखते हैं तो केवल तभी विवरण प्रकट करें ।डंप के बारे में अधिक उन्नत विषयों को यहां और वहां पाया जा सकता है ।
यह एक LinqPad एक्सटेंशन नहीं है, बल्कि एक .NET क्लास है, लेकिन चूंकि यह उपयोगी है, इसलिए मैं इसे वैसे भी उल्लेख करूंगा। आप अपनी स्क्रिप्ट में बहुत सी उपयोगी जानकारी प्राप्त कर सकते हैं जैसे:
Environment.UserDomainName.Dump();
Environment.MachineName.Dump();
Environment.UserName.Dump();
Environment.CurrentDirectory.Dump();
Environment.SystemDirectory.Dump();
NB प्राप्त करने के लिए Domain\UserName
मैं इसके System.Security.Principal.WindowsIdentity.GetCurrent().Name
बजाय का उपयोग करेगा Environment.UserDomainName+@"\"+Environment.UserName
।
( नया: LinqPad संस्करण v4.45.05 (बीटा) के बाद से उपलब्ध )
Util.WriteCsv (Customers, @"c:\temp\customers.csv");
यह तालिका की सामग्री Customers
को CSV फ़ाइल में लिख देगा c:\temp\customers.csv
। आप एक अच्छा उदाहरण भी पा सकते हैं कि कैसे उपयोग करें Util.WriteCsv
और फिर यहाँ Linqpad के परिणाम विंडो में CSV डेटा प्रदर्शित करें ।
संकेत:
CSV फ़ाइल प्राप्त करने / बनाने के लिए जो क्वेरी के समान निर्देशिका में है, आप इसका उपयोग कर सकते हैं:
var csvFile=Util.CurrentQueryPath.Replace(".linq", ".csv");
यदि तालिका बड़ी है, ObjectTrackingEnabled = false;
तो मेमोरी में कैशिंग से बचने के लिए CSV लिखने से पहले उपयोग करें।
यदि आप अल्पविराम से अलग फ़ाइल के बजाय XML प्रारूप में एक तालिका का उत्पादन करना चाहते हैं , तो आप इसे कर सकते हैं:
var xmlFile=Util.CurrentQueryPath.Replace(".linq", ".xml");
var xml = XElement.Load(xmlFile);
var query =
from e in xml.Elements()
where e.Attribute("attr1").Value == "a"
select e;
query.Dump();
यह उदाहरण उन सभी तत्वों को लौटाता है जिनमें विशेषता attr1
होती है जिसमें "a"
XML फ़ाइल से मान होता है जिसका नाम क्वेरी के समान होता है और उसी पथ में समाहित होता है। की जाँच करें इस अधिक कोड नमूने के लिए लिंक।
var pwd = Util.GetPassword("UserXY");
यह LinqPad के पासवर्ड मैनेजर में निर्मित पासवर्ड को पुनः प्राप्त करेगा। पासवर्ड बनाने और बदलने के लिए, LinqPad के "फाइल" मेनू में "पासवर्ड मैनेजर" मेनू आइटम खोलें। यदि आप C # कोड चलाते समय कोई पासवर्ड सेव नहीं करते हैं, तो पासवर्ड डायलॉग आपसे पासवर्ड पूछेगा और पासवर्ड सेव चेकबॉक्स (उदाहरण में, पासवर्ड) चेक करके इसे फ्लाई पर बनाकर सेव करने का विकल्प है। "UserXY" के लिए सहेजा जाएगा, और बाद में आप पासवर्ड प्रबंधक में यह प्रविष्टि पा सकते हैं )।
लाभ यह है कि आप विंडोज, यूजर प्रोफाइल में सुरक्षित रूप से, अलग-अलग और एन्क्रिप्ट किए गए लाइनक्लिप्स में पासवर्ड स्टोर कर सकते हैं (यह %localappdata%\LINQPad\Passwords
एक फ़ाइल के रूप में संग्रहीत है )। LinqPad पासवर्ड की सुरक्षा के लिए Windows DPAPI का उपयोग करता है।
इसके अलावा, पासवर्ड केंद्रीय रूप से संग्रहीत किया जाता है, इसलिए यदि आपको इसे बदलने की आवश्यकता है, तो आप इसे मेनू में कर सकते हैं और यह तुरंत आपके द्वारा बनाई गई सभी लिपियों पर लागू होता है।
टिप्पणियाँ:
यदि आप पासवर्ड नहीं सहेजना चाहते हैं और केवल पासवर्ड डायलॉग लाना चाहते हैं, तो आप निम्न पैरामीटर को निम्नानुसार उपयोग कर सकते हैं:
var pwd = Util.GetPassword("UserXY", true);
यह पासवर्ड डायलॉग में सेव पासवर्ड चेकबॉक्स को अनचेक कर देगा (हालांकि, उपयोगकर्ता अभी भी इसे चेक करने में सक्षम है और वैसे भी बचाने के लिए चुनते हैं)।
यदि आपको पासवर्ड को संग्रहीत करने की आवश्यकता है SecureString
, तो आप इस सहायक फ़ंक्शन का उपयोग कर सकते हैं (nb: एक्सटेंशन विधि का .ToSecureString()
उपयोग करने के लिए, कृपया Stackoverflow पर इस लिंक का पालन करें - यह आपको ज़रूरत पड़ने पर इसे वापस बदलने की अनुमति भी देता है):
System.Security.SecureString GetPasswordSecure(string Name, bool noDefaultSave=true)
{
return Util.GetPassword(Name, noDefaultSave)
.ToSecureString();
}
यह तरीका कमांड प्रोसेसर की तरह काम करता है। आप विंडोज कंसोल से आपके द्वारा जाने जाने वाले सभी आदेशों को लागू कर सकते हैं।
उदाहरण 1 - dir:
Util.Cmd(@"dir C:\");
यह निर्देशिका के परिणाम को उसकी आवश्यकता के बिना आउटपुट करेगा .Dump
। इसे एक चर में संग्रहीत करने से यह फायदा होता है कि आप इस पर आगे Linq प्रश्नों का उपयोग कर सकते हैं। उदाहरण के लिए:
var path=@"C:\windows\system32";
var dirSwitch="/s/b";
var x=Util.Cmd(String.Format(@"dir ""{0}"" {1}", path, dirSwitch), true);
var q=from d in x
where d.Contains(".exe") || d.Contains(".dll")
orderby d
select d;
q.Dump();
यह सभी फाइलों को फाइल एक्सटेंशन ".exe" या ".dll" में सम्मिलित करेगा C:\windows\system32
। /s
स्विच सभी सबडायरेक्टरियों recurse लिए किया जाता है और /b
नंगे उत्पादन प्रारूप के लिए प्रयोग किया जाता है। ध्यान दें कि Cmd विधि का दूसरा पैरामीटर डंप विधि का उपयोग करके केवल फ़िल्टर किए गए परिणाम को दिखाने के लिए कंसोल आउटपुट को दबाने के लिए निर्दिष्ट किया गया है।
आप देख सकते हैं कि यह आपके पास मौजूद वाइल्डकार्ड की तुलना में अधिक लचीला है, dir
क्योंकि आप Linq के क्वेरी इंजन के पूर्ण लचीलेपन का उपयोग कर सकते हैं।
उदाहरण 2 - पाठ संपादक:
आप इस तरह नोटपैड में एक फ़ाइल खोल सकते हैं:
var filePath=@"C:\HelloWorld.txt";
Util.Cmd(@"%systemroot%\system32\notepad.exe", filePath);
एक URL से चित्र प्रदर्शित करता है। उदाहरण:
var url = "http://chart.apis.google.com/chart?cht=p3&chd=s:Uf9a&chs=350x140&chl=January|February|March|April";
Util.Image(url).Dump();
उपयोग Util.ProgressBar
करने से आप एक प्रगति बार प्रदर्शित कर सकते हैं। आप निम्न सहायक वर्ग का उपयोग कर सकते हैं:
public class ProgressBar
{
Util.ProgressBar prog;
public ProgressBar()
{
Init("Processing");
}
private void Init(string msg)
{
prog = new Util.ProgressBar (msg).Dump();
prog.Percent=0;
}
public void Update(int percent)
{
Update(percent, null);
}
public void Update(int percent, string msg)
{
prog.Percent=percent;
if (String.IsNullOrEmpty(msg))
{
if (percent>99) prog.Caption="Done.";
}
else
{
prog.Caption=msg;
}
}
}
बस इसे निम्न उदाहरण शो के रूप में उपयोग करें:
void Main()
{
var pb1= new ProgressBar();
Thread.Sleep(50);
pb1.Update(50, "Doing something"); Thread.Sleep(550);
pb1.Update(100); Thread.Sleep(50);
}
आप वैकल्पिक रूप Util.Progress
से LinqPads एकीकृत प्रगति पट्टी को अद्यतन करने के लिए उपयोग कर सकते हैं , उदाहरण के लिए:
Util.Progress = 25; // 25 percent complete
अंतर यह है कि यह परिणाम विंडो में प्रदर्शित नहीं होगा, और आप इसे संदेश नहीं दे सकते।
आउटपुट विंडो में HTML प्रदर्शित करता है। उदाहरण:
Util.RawHtml (new XElement ("h1", "This is a big heading")).Dump();
आप इस उदाहरण फ़ंक्शन का उपयोग कर सकते हैं
public void ShowUrl(string strURL, string Title)
{
Action showURL = delegate() { Process.Start("iexplore.exe", strURL); };
var url = new Hyperlinq(showURL, "this link", true);
Util.HorizontalRun (true, "Click ", url, " for details.").Dump(Title);
}
परिणाम विंडो में हाइपरलिंक दिखाने के लिए - या अपने पसंदीदा संपादक को खोलने जैसी कोई क्रिया। उपयोग:
ShowUrl("http://stackoverflow.com", "Check out StackOverflow");
ध्यान दें कि यह फ़ंक्शन हमेशा काम करता है, जबकि new Hyperlinq ("http://myURL", "Web site").Dump();
कुछ प्रकार के URL के लिए काम नहीं करता है (विशेष रूप से, यदि आपको URL के भाग के रूप में ": 1234" जैसे पोर्ट नाम पास करने हैं)।
कंसोल से इनपुट पढ़ता है। उदाहरण:
int age = Util.ReadLine<int> ("Enter your age");
के लिए एक पर्याय के रूप में Util.ReadLine<string>()
, आप भी उपयोग कर सकते हैं Console.ReadLine()
।
लेकिन और भी है! आप निम्न स्निपेट के साथ एक साधारण JSON पार्सर बना सकते हैं - उदाहरण के लिए, यदि आप पार्स करना चाहते हैं और मक्खी पर JSON स्ट्रिंग का परीक्षण करना चाहते हैं, तो यह बहुत उपयोगी है। निम्नलिखित स्निपेट को एक टेक्स्ट एडिटर का उपयोग करके JSONAnalyzer.linq के रूप में सहेजें और फिर इसे LinqPad में खोलें (यह मक्खी पर आसानी से संदर्भ जोड़ने के लिए है):
<Query Kind="Program">
<Reference><RuntimeDirectory>\System.Web.Extensions.dll</Reference>
<Namespace>System.Web.Script.Serialization</Namespace>
</Query>
void Main()
{
var jsonData=Util.ReadLine<string>("Enter JSON string:");
var jsonAsObject = new JavaScriptSerializer().Deserialize<object>(jsonData);
jsonAsObject.Dump("Deserialized JSON");
}
अब आप इसे चला सकते हैं और क्लिपबोर्ड से एक JSON स्ट्रिंग को कंसोल में पेस्ट कर सकते हैं - यह Dump
फ़ंक्शन को अच्छी तरह से एक वस्तु के रूप में प्रदर्शित करने के लिए उपयोग करेगा - और आपको मुद्दों को ठीक करने के लिए स्क्रीन पर पार्सर के त्रुटि संदेश भी मिलते हैं। AJAX डिबगिंग के लिए बहुत उपयोगी है।
यदि आपको अपनी स्क्रिप्ट के अंदर परिणाम विंडो साफ़ करने की आवश्यकता है, तो उपयोग करें:
Util.ClearResults();
या तो इसे अपनी स्क्रिप्ट के शीर्ष पर उपयोग करें, या - यदि आप किसी स्क्रिप्ट में कई क्वेरीज़ चला रहे हैं - तो आपको स्क्रीन को खाली करने से पहले उपयोगकर्ता इनपुट की प्रतीक्षा करनी चाहिए (जैसे इसके साथ पूर्ववर्ती द्वारा Util.ReadLine
)।
यह भी दिलचस्प है, कि आप .Dump()
विधि का आउटपुट बदल सकते हैं । बस इंटरफ़ेस को लागू करें ICustomMemberProvider
, जैसे
public class test : ICustomMemberProvider
{
IEnumerable<string> ICustomMemberProvider.GetNames() {
return new List<string>{"Hint", "constMember1", "constMember2", "myprop"};
}
IEnumerable<Type> ICustomMemberProvider.GetTypes()
{
return new List<Type>{typeof(string), typeof(string[]),
typeof(string), typeof(string)};
}
IEnumerable<object> ICustomMemberProvider.GetValues()
{
return new List<object>{
"This class contains custom properties for .Dump()",
new string[]{"A", "B", "C"}, "blabla", abc};
}
public string abc = "Hello1"; // abc is shown as "myprop"
public string xyz = "Hello2"; // xyz is entirely hidden
}
यदि आप इस वर्ग का एक उदाहरण बनाते हैं, जैसे
var obj1 = new test();
obj1.Dump("Test");
तो यह होगा उत्पादन केवल Hint
, constMember1
, constMember2
, और myprop
नहीं, बल्कि संपत्ति xyz
:
यदि आपको एक संदेश बॉक्स प्रदर्शित करने की आवश्यकता है, तो यहां देखें कि यह कैसे करना है।
उदाहरण के लिए, आप निम्न कोड का उपयोग करके एक इनपुटबॉक्स प्रदर्शित कर सकते हैं
void Main()
{
string inputValue="John Doe";
inputValue=Interaction.InputBox("Enter user name", "Query", inputValue);
if (!string.IsNullOrEmpty(inputValue)) // not cancelled and value entered
{
inputValue.Dump("You have entered;"); // either display it in results window
Interaction.MsgBox(inputValue, MsgBoxStyle.OkOnly, "Result"); // or as MsgBox
}
}
(इस काम को करने के लिए F4 दबाएँ और Microsoft.VisualBasic.dll और इसके नामस्थानों को जोड़ना न भूलें)
( नया: LinqPad संस्करण v4.52.1 (बीटा) के बाद से उपलब्ध )
आपको अपनी स्क्रिप्ट के भीतर या अपने स्वयं के .NET प्रोग्राम या विंडोज सेवा (LINQPad4-AnyCPU संस्करण को संदर्भित करके LINQPad.exe
) के भीतर से एक और LINQPad स्क्रिप्ट चलाने की अनुमति देता है । यह स्क्रिप्ट को निष्पादित करता है जैसे कमांड लाइन टूल lprun.exe
इसे करेगा।
उदाहरण:
const string path=@"C:\myScripts\LinqPad\";
var dummy=new LINQPad.QueryResultFormat(); // needed to call Util.Run
Util.Run(path+"foo.linq", dummy);
यह उदाहरण स्क्रिप्ट चलाता है foo.linq
, जिसमें निम्न नमूना कोड होता है:
void Main(string[] args)
{
#if CMD
"I'm been called from lprun! (command line)".Dump();
#else
"I'm running in the LINQPad GUI!".Dump();
args = new[] { "testhost", "test@foo.com", "test@foo.com", "Test Subject" };
#endif
args.Dump("Args");
}
यह आपको यह जांचने की अनुमति देता है कि लिपिपैड जीयूआई के अंदर से या इसके माध्यम से स्क्रिप्ट को चलाया गया lprun.exe
या नहीं Util.Run
।
नोट: आह्वान के निम्नलिखित प्रकार सहायक हो सकते हैं:
Util.Run(path+"foo.linq", dummy).Dump(); // obviously dumps the script output!
Util.Run(path+"foo.linq", dummy).Save(path+"foo.log"); // writes output into log
Util.Run(path+"foo.linq", dummy).SaveAsync(path+"foo1.log"); // async output log
यदि आप LinqToSQL का उपयोग कर रहे हैं , तो आप परिवर्तनों को स्थायी ( सम्मिलित / अद्यतन / हटाने के संचालन के लिए) करना चाहते हैं। चूंकि डेटाबेस संदर्भ स्पष्ट रूप से LinqPad द्वारा बनाया गया है, इसलिए आपको SubmitChanges()
नीचे दिखाए गए अनुसार प्रत्येक परिवर्तन के बाद कॉल करना होगा ।
(LinqPad-) नॉर्थविंड डेटाबेस के लिए उदाहरण :
सम्मिलित करें
var newP = new Products() { ProductID=pID, CategoryID=cID,
ProductName="Salmon#"+pID.ToString() };
Products.InsertOnSubmit(newP);
SubmitChanges();
अपडेट करें
var prod=(from p in Products
where p.ProductName.Contains("Salmon")
select p).FirstOrDefault();
prod.ProductName="Trout#"+prod.ProductID.ToString();
SubmitChanges();
हटाएं
var itemsToDelete=Products.Where(p=> p.ProductName.Contains("Salmon") ||
p.ProductName.Contains("Trout"));
foreach(var item in itemsToDelete) { Products.DeleteOnSubmit(item); }
SubmitChanges();
नोट: पिछले उदाहरणों के लिए वैध आईडी प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:
var cID = (from c in Categories
where c.CategoryName.Contains("Seafood")
select c).FirstOrDefault().CategoryID;
var pID = Products.Count()+1;
इससे पहले कि आप उन्हें आह्वान करें।
यदि आप एंटिटी फ्रेमवर्क का उपयोग कर रहे हैं , तो आप बदलावों को स्थायी रूप से ( सम्मिलित / अद्यतन / हटाए गए संचालन के लिए) करना चाह सकते हैं । चूंकि डेटाबेस संदर्भ स्पष्ट रूप से LinqPad द्वारा बनाया गया है, इसलिए आपको SaveChanges()
नीचे दिखाए गए अनुसार प्रत्येक परिवर्तन के बाद कॉल करना होगा ।
उदाहरण मूल रूप से LinqToSQL के लिए पहले जैसे ही हैं , लेकिन आपको SaveChanges()
इसके बजाय उपयोग करने की आवश्यकता है , और तरीकों को सम्मिलित करने और हटाने के लिए भी बदल गया है।
सम्मिलित करें
var newP = new Products() { ProductID=pID, CategoryID=cID,
ProductName="Salmon#"+pID.ToString() };
Products.Add(newP);
SaveChanges();
अपडेट करें
var prod=(from p in Products
where p.ProductName.Contains("Salmon")
select p).FirstOrDefault();
prod.ProductName="Trout#"+prod.ProductID.ToString();
SaveChanges();
हटाएं
var itemsToDelete=Products.Where(p=> p.ProductName.Contains("Salmon") ||
p.ProductName.Contains("Trout"));
foreach(var item in itemsToDelete) { Products.Remove(item); }
SaveChanges();
नोट: पिछले उदाहरणों के लिए वैध आईडी प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:
var cID = (from c in Categories
where c.CategoryName.Contains("Seafood")
select c).FirstOrDefault().CategoryID;
var pID = Products.Count()+1;
इससे पहले कि आप उन्हें आह्वान करें।
LinqPad में , शीर्ष पर कॉम्बोक्स का उपयोग करके और आपकी क्वेरी के लिए सही डेटाबेस चुनकर डेटाबेस संदर्भ स्वचालित रूप से लागू होता है। लेकिन कभी-कभी, इसे स्पष्ट रूप से संदर्भित करना उपयोगी होता है, उदाहरण के लिए यदि आप अपने प्रोजेक्ट के कुछ कोड को विजुअल स्टूडियो से बाहर कॉपी करते हैं, और इसे LinqPad में पेस्ट करते हैं।
विज़ुअल स्टूडियो प्रोजेक्ट से लिया गया आपका कोड स्निपेट इस तरह दिखता है:
var prod=(from p in dc.Products
where p.ProductName.Contains("Salmon")
select p).FirstOrDefault();
prod.ProductName="Trout#"+prod.ProductID.ToString();
dc.SaveChanges();
अब इसका क्या किया जाए dc
? बेशक, आप dc.
अपनी क्वेरी में प्रत्येक घटना को हटा सकते हैं , लेकिन यह बहुत आसान है। बस जोड़ दो
var dc=this; // UserQuery
अपने स्निपेट के शीर्ष पर जैसे:
void Main()
{
var dc=this;
var prod=(from p in dc.Products
where p.ProductName.Contains("Salmon")
select p).FirstOrDefault();
prod.ProductName="Trout#"+prod.ProductID.ToString();
dc.SaveChanges();
}
और कोड तुरंत काम करेगा!
ओलेडब के साथ लाइनपैड का उपयोग करना, लाइनक ऑब्जेक्ट के लिए एक डिटैटेबल को परिवर्तित करना, लिनक में एसक्यूएल क्वेरी
निम्नलिखित कोड स्निपेट आपको ओलेडबी के साथ लिनकपैड का उपयोग करने में मदद करता है। जोड़े System.Data.OleDb
से System.Data
विधानसभा क्वेरी गुण है, तो में निम्न कोड पेस्ट Main()
:
var connStr="Provider=SQLOLEDB.1;"+this.Connection.ConnectionString;
OleDbConnection conn = new OleDbConnection(connStr);
DataSet myDS = new DataSet();
conn.Open();
string sql = @"SELECT * from Customers";
OleDbDataAdapter adpt = new OleDbDataAdapter();
adpt.SelectCommand = new OleDbCommand(sql, conn);
adpt.Fill(myDS);
myDS.Dump();
अब LinqPad में एक SqlServer कनेक्शन जोड़ें और इस उदाहरण को चलाने के लिए नॉर्थविंड डेटाबेस जोड़ें।
NB: यदि आप वर्तमान में चयनित कनेक्शन का डेटाबेस और सर्वर प्राप्त करना चाहते हैं, तो आप इस कोड का उपयोग कर सकते हैं स्निपेट:
void Main()
{
var dc=this;
var tgtSrv=dc.Connection.DataSource;
var tgtDb=dc.Connection.ConnectionString.Split(';').Select(s=>s.Trim())
.Where(x=>x.StartsWith("initial catalog", StringComparison.InvariantCultureIgnoreCase))
.ToArray()[0].Split('=')[1];
tgtSrv.Dump();
tgtDb.Dump();
}
तुम भी LinqmyDS
में परिवर्तित कर सकते हैं , निम्नलिखित सवाल के जवाब यह कैसे करना है: Linq के साथ .NET 4 गतिशील कीवर्ड का उपयोग करने के अच्छे उदाहरण
एक और उदाहरण: मान लीजिए कि आपका DBA आपको SQL क्वेरी देता है और आप LinqPad में परिणामों का विश्लेषण करना चाहते हैं - बेशक Linq में, SQL में नहीं। तो आप निम्नलिखित कर सकते हैं:
void Main()
{
var dc=this;
// do the SQL query
var cmd =
"SELECT Orders.OrderID, Orders.CustomerID, Customers.CompanyName,"
+" Customers.Address, Customers.City"
+" FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID";
var results = dc.ExecuteQuery<OrderResult>(cmd);
// just get the cities back, ordered ascending
results.Select(x=>x.City).Distinct().OrderBy(x=>x).Dump();
}
class OrderResult
{ // put here all the fields you're returning from the SELECT
public dynamic OrderID=null;
public dynamic CustomerID=null;
public dynamic CompanyName=null;
public dynamic Address=null;
public dynamic City=null;
}
इस उदाहरण में DBA की SELECT क्वेरी सिर्फ "कमांड टेक्स्ट" में डाली गई है, और परिणाम सिटी द्वारा फ़िल्टर और ऑर्डर किए गए हैं।
बेशक, यह एक सरल उदाहरण है, आपका डीबीए शायद आपको अधिक जटिल स्क्रिप्ट देगा, लेकिन आपको यह विचार मिल रहा है: बस एक सहायक परिणाम वर्ग जोड़ें, जिसमें सेलेक्ट क्लॉज से सभी फ़ील्ड शामिल हों और फिर आप सीधे इसका उपयोग कर सकते हैं ।
तुम भी इस तरह एक संग्रहीत कार्यविधि से परिणाम ले सकते हैं और Linq में इसका उपयोग कर सकते हैं। जैसा कि आप देख सकते हैं, इस उदाहरण में मैं डेटा प्रकार के बारे में परवाह नहीं करता हूं और dynamic
इसे व्यक्त करने के लिए उपयोग करता हूं ।
तो यह वास्तव में रैपिड प्रोग्रामिंग के बारे में है जो डेटा का तेज़ी से विश्लेषण करने में सक्षम है। आपको विभिन्न कारणों से अपने वास्तविक आवेदन में ऐसा नहीं करना चाहिए (एसक्यूएल इंजेक्शन, क्योंकि आप शुरुआत से ही ईएफ का उपयोग कर सकते हैं)।
LinqPad में ग्राफिक ड्रा, भाग 1
नीचे दिए गए उदाहरणों का उपयोग करने के लिए, प्रेस F4और जोड़ने System.Windows.dll
, System.Windows.Forms.dll
, WindowsFormsIntegration.dll
, PresentationCore.dll
और PresentationFramework.dll
अपने LINQPad कार्यक्रम के लिए और भी नाम स्थान जोड़ने System.Windows.Shapes
।
1 उदाहरण के लिए बस एक लाइन खींचता है:
var myLine = new Line();
myLine.Stroke = System.Windows.Media.Brushes.LightSteelBlue;
myLine.X1 = 1; myLine.X2 = 50;
myLine.Y1 = 1; myLine.Y2 = 50;
myLine.StrokeThickness = 2;
PanelManager.DisplayWpfElement(myLine, "Graphic");
2 उदाहरण से पता चलता है कि कैसे आप PanelManager का उपयोग करके LINQPad में ग्राफिक प्रदर्शित कर सकते हैं। आम तौर पर LinqPad केवल Wpf वस्तुओं का समर्थन करता है। इस उदाहरण का उपयोग करता है System.Windows.Forms.Integration.WindowsFormsHost
एक बनाने के लिए Windows.Forms.PictureBox
उपलब्ध है (यह से प्रेरित था इस ):
// needs (F4): System.Windows.dll, System.Windows.Forms.dll,
// WindowsFormsIntegration.dll, PresentationCore.dll, PresentationFramework.dll
void Main()
{
var wfHost1 = new System.Windows.Forms.Integration.WindowsFormsHost();
wfHost1.Height=175; wfHost1.Width=175; wfHost1.Name="Picturebox1";
wfHost1.HorizontalAlignment=System.Windows.HorizontalAlignment.Left;
wfHost1.VerticalAlignment=System.Windows.VerticalAlignment.Top;
System.Windows.Forms.PictureBox pBox1 = new System.Windows.Forms.PictureBox();
wfHost1.Child = pBox1;
pBox1.Paint += new System.Windows.Forms.PaintEventHandler(picturebox1_Paint);
PanelManager.StackWpfElement(wfHost1, "Picture");
}
public string pathImg
{
get { return System.IO.Path.Combine(@"C:\Users\Public\Pictures\Sample Pictures\",
"Tulips.jpg"); }
}
// Define other methods and classes here
public void picturebox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
// https://stackoverflow.com/a/14143574/1016343
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(pathImg);
System.Drawing.Point ulPoint = new System.Drawing.Point(0, 0);
e.Graphics.DrawImage(bmp, ulPoint.X, ulPoint.Y, 175, 175);
}
इससे निम्नलिखित ग्राफिक (पैनल आइटम "ग्राफिक" और "चित्र" ऊपर दिए गए उदाहरणों द्वारा जोड़े जाएंगे):
यदि आप नॉर्थविंड डेटाबेस से छवियों को प्रदर्शित करना चाहते हैं , तो आप निम्न कार्य कर सकते हैं:
छवि फ़ाइल नाम को "नॉर्थविंडपिक्स.जेपीजीपी" में बदलें, फिर दूसरे उदाहरण के मुख्य () विधि की शुरुआत में निम्न कोड जोड़ें :
var img = (from e in this.Employees select e).FirstOrDefault().Photo.ToArray();
using (FileStream fs1 = new FileStream(pathImg, FileMode.Create))
{
const int offset=78;
fs1.Write(img, offset, img.Length-offset);
fs1.Close();
}
यह कर्मचारी तालिका से पहला रिकॉर्ड पढ़ेगा और चित्र प्रदर्शित करेगा।
अधिक जानने के लिए निम्न लिंक देखें:
WPF LinqPad कस्टम विज़ुअलाइज़र में आकृतियाँ और मूल आरेखण
नोट: आप पैनलमैनगर के बिना भी इसे प्राप्त कर सकते हैं, साथ ही निम्न उदाहरण, जिसे मैंने यहां दिखाया था:
// using System.Drawing;
using (var image=new Bitmap(100, 100))
using (var gr = Graphics.FromImage(image))
{
gr.FillRectangle(Brushes.Gold, 0, 0, 100, 100);
gr.DrawEllipse(Pens.Blue, 5, 5, 90, 90);
gr.Save();
image.Dump();
}
इसे .Dump()
प्रदर्शित करने के लिए यह कमांड का उपयोग कर रहा है। आप image.Dump()
कई बार आह्वान कर सकते हैं और यह छवि को बढ़ा देगा।
LinqPad में ग्राफिक ड्रा, भाग 2
इस पोस्ट से प्रेरित निम्नलिखित उदाहरण दिखा रहा है कि लिनक्पैड 5 में एक सरल फ़ंक्शन प्लॉटर को C # 7 का उपयोग करके कैसे लागू किया जाए:
void Main()
{
fnPlotter(x1: -1, x2: 1, fn: (double x) => Math.Pow(x, 3)).Dump();
}
public static Bitmap fnPlotter(double x1=-3, double x2=3, double s=0.05,
double? ymin=null, double? ymax=null,
Func<double, double> fn = null, bool enable3D=true)
{
ymin = ymin ?? x1; ymax = ymax ?? x2;
dynamic fArrPair(double p_x1 = -3, double p_x2 = 3, double p_s = 0.01,
Func<double, double> p_fn = null)
{
if (p_fn == null) p_fn = ((xf) => { return xf; }); // identity as default
var xl = new List<double>(); var yl = new List<double>();
for (var x = p_x1; x <= p_x2; x += p_s)
{
double? f = null;
try { f = p_fn(x); }
finally
{
if (f.HasValue) { xl.Add(x); yl.Add(f.Value); }
}
}
return new { Xs = xl.ToArray(), Ys = yl.ToArray() };
}
var chrt = new Chart(); var ca = new ChartArea(); chrt.ChartAreas.Add(ca);
ca.Area3DStyle.Enable3D = enable3D;
ca.AxisX.Minimum = x1; ca.AxisX.Maximum = x2;
ca.AxisY.Minimum = ymin.Value; ca.AxisY.Maximum = ymax.Value;
var sr = new Series(); chrt.Series.Add(sr);
sr.ChartType = SeriesChartType.Spline; sr.Color = Color.Red;
sr.MarkerColor = Color.Blue; sr.MarkerStyle = MarkerStyle.Circle;
sr.MarkerSize = 2;
var data = fArrPair(x1, x2, s, fn); sr.Points.DataBindXY(data.Xs, data.Ys);
var bm = new Bitmap(width: chrt.Width, height: chrt.Height);
chrt.DrawToBitmap(bm, chrt.Bounds); return bm;
}
यह परिणाम पैनल में विंडोज फॉर्म प्रदर्शित करने के लिए LinqPad की क्षमता का उपयोग कर रहा है।
जोड़े संदर्भ (प्रेस ) : , , और इन विधानसभाओं से सभी नामस्थान जोड़ें।
F4
System.Drawing.dll
System.Windows.Forms.dll
System.Windows.Forms.DataVisualization.dll
अतिरिक्त संकेत / आगे पढ़ने:
Visual Studio में LinqPad का उपयोग करना चाहते हैं ? यहां बताया गया है कि आप ऐसा कैसे कर सकते हैं ।
LinqPad को "पोर्टेबल ऐप" के रूप में होना चाहिए ? यहाँ पढ़ें कि कैसे करना है।
LinqPad के लिए जो की वेबसाइट हमेशा एक उत्कृष्ट स्रोत है। LinqPad के अंदर, Help -> What's New
आपको नए कार्यों और विधियों के बारे में संकेत देता है। LINQPad फोरम भी सहायक संकेत दिए हैं।
इसके अलावा बहुत मददगार: Linq (पैड) डीबगिंग के बारे में यह लेख।
अपने बैच स्क्रिप्ट में LINQ क्वेरी चलाने केlprun.exe
लिए उपयोग करें । अधिक जानकारी के लिए इस लेख को पढ़ें । उदाहरण के लिए:
इस उदाहरण में, क्वेरी एक साधारण LINQ अभिव्यक्ति है। बेशक, आप प्रोग्राम मोड को सक्रिय करने के लिए जटिल प्रश्नों को तैयार कर सकते हैं ।
echo Customers.Take(100) > script.txt
lprun -lang=e -cxname=CompanyServer.CustomerDb script.txt
-lang=program
आप विस्तार के तरीके लिख सकते हैं और उन्हें स्टोर कर सकते हैं LinqPad के बाईं ओर मेरी क्वेरी टैब : पेड़ के अंतिम आइटम को मेरा एक्सटेंशन नाम दिया गया है ; एक फ़ाइल खोलने के लिए उस पर डबल क्लिक करें, जहां आप अपने सभी प्रश्नों के लिए उपलब्ध एक्सटेंशन लिख सकते हैं। बस उन्हें सार्वजनिक स्थैतिक वर्ग में रखें MyExtensions
, और Main()
अपने एक्सटेंशन के लिए परीक्षण शामिल करने के लिए विधि का उपयोग करें।
डंप एक वैश्विक विस्तार विधि है और SubmitChanges DataContext ऑब्जेक्ट से आता है जो एक System.Data.Linq.DataContext ऑब्जेक्ट है।
एलपी केवल डंप और जुदा जोड़ता है जहां तक मुझे पता है। हालाँकि मैं अत्यधिक रिफ्लेक्टर में इसे देखने की सलाह दूंगा कि इसमें और क्या-क्या इस्तेमाल किया जा सकता है। अधिक दिलचस्प चीजों में से एक LINQPad.Util नेमस्पेस है, जिसमें आंतरिक रूप से LINQPad द्वारा उपयोग किए जाने वाले कुछ उपहार हैं।
.Dump()
स्रोत संपादक में किसी अन्य विधि पर क्लिक करें या "प्रतिबिंबित" करने के लिए F12 दबाएँ । यह अब टूल में बनाया गया है!
मेरे पिछले उत्तर में StackOverflow पाठ की सीमा तक पहुँच गया , लेकिन अभी भी LinqPad में अधिक शांत एक्सटेंशन हैं। उनमें से एक जिसका मैं उल्लेख करना चाहता हूं:
.Dump()
)LinqPad के 5.42 बीटा संस्करण के बाद से आप जावास्क्रिप्ट कार्यों को एम्बेड कर सकते हैं और उन्हें सीधे अपने सी # कोड से कॉल कर सकते हैं। हालाँकि इसकी कुछ सीमाएँ हैं (JSFiddle के साथ तुलना में), यह LinqPad में कुछ जावास्क्रिप्ट कोड का जल्दी परीक्षण करने का एक अच्छा तरीका है।
उदाहरण:
void Main()
{
// JavaScript inside C#
var literal = new LINQPad.Controls.Literal("script",
@"function jsFoo(x) {
alert('jsFoo got parameter: ' + x);
var a = ['x', 'y', 'z']; external.log('Fetched \'' + a.pop() + '\' from Stack');
external.log('message from C#: \'' + x + '\'');
}");
// render & invoke
literal.Dump().HtmlElement.InvokeScript(true, "jsFoo", "testparam");
}
इस उदाहरण में, jsFoo
एक पैरामीटर के साथ एक फ़ंक्शन तैयार किया जाता है और चर में संग्रहीत किया जाता है literal
। फिर, यह .Dump().HtmlElement.InvokeScript(...)
पैरामीटर पारित करके प्रस्तुत किया और बुलाया जाता है testparam
।
जावास्क्रिप्ट फ़ंक्शन external.Log(...)
LinqPad की आउटपुट विंडो में टेक्स्ट को आउटपुट करने के लिए उपयोग करता है, औरalert(...)
करने पॉपअप संदेश प्रदर्शित करने के ।
आप निम्न विस्तार वर्ग / विधियों को जोड़कर इसे सरल बना सकते हैं :
public static class ScriptExtension
{
public static object RunJavaScript(this LINQPad.Controls.Literal literal,
string jsFunction, params object[] p)
{
return literal.Dump().HtmlElement.InvokeScript(true, jsFunction, p);
}
public static LINQPad.Controls.Literal CreateJavaScript(string jsFunction)
{
return new LINQPad.Controls.Literal("script", jsFunction);
}
}
फिर आप पिछले उदाहरण को निम्नानुसार कॉल कर सकते हैं:
// JavaScript inside C#
var literal = ScriptExtension.CreateJavaScript(
@"function jsFoo(x) {
alert('jsFoo got parameter: ' + x);
var a = ['x', 'y', 'z']; external.log('Fetched \'' + a.pop() + '\' from Stack');
external.log('message from C#: \'' + x + '\'');
}");
// render & invoke
literal.RunJavaScript("jsFoo", "testparam");
इसका एक ही प्रभाव है, लेकिन पढ़ने में आसान है (यदि आप अधिक जावास्क्रिप्ट ;-) करने का इरादा रखते हैं)।
एक और विकल्प, यदि आपको लैम्ब्डा के भाव पसंद हैं और आप हर बार जब आप इसे कॉल कर रहे हैं तो स्ट्रिंग नाम के रूप में फ़ंक्शन नाम निर्दिष्ट करना पसंद नहीं करते हैं, आप यह कर सकते हैं:
var jsFoo = ScriptExtension.CreateJavaScript(
@"function jsFoo(x) { ... }");
ScriptExtension.RunJavaScript(() => jsFoo, "testparam");
बशर्ते आपने हेल्पर फंक्शन जोड़ा हो
public static object RunJavaScript(Expression<Func<LINQPad.Controls.Literal>> expr,
params object[] p)
{
LINQPad.Controls.Literal exprValue = expr.Compile()();
string jsFunction = ((MemberExpression)expr.Body).Member.Name;
return exprValue.Dump().HtmlElement.InvokeScript(true, jsFunction, p);
}
वर्ग के लिए ScriptExtension
। यह आपके द्वारा उपयोग किए जाने वाले चर नाम को हल करेगा (यहाँ jsFoo
) जो कि जावास्क्रिप्ट फ़ंक्शन के समान ही होता है (ध्यान दें कि चर नाम को हल करने के लिए लैम्ब्डा अभिव्यक्ति का उपयोग कैसे किया जाता है, यह nameof(paramName)
फ़ंक्शन के अंदर का उपयोग करके नहीं किया जा सकता है )।
कभी-कभी यह आपके द्वारा डंप किए गए पाठ को एक नई पंक्ति में डालने के बजाय इसे अधिलेखित करने के लिए उपयोगी होता है , उदाहरण के लिए यदि आप लंबे समय से चल रहे क्वेरी का प्रदर्शन कर रहे हैं और इसकी प्रगति आदि दिखाना चाहते हैं (नीचे प्रोग्रेसबार भी देखें)। यह एक का उपयोग करके किया जा सकता है DumpContainer
, आप इसे नीचे दिखाए अनुसार उपयोग कर सकते हैं
उदाहरण 1:
void Main()
{
var dc = new DumpContainer("Doing something ... ").Dump("Some Action");
System.Threading.Thread.Sleep(3000); // wait 3 seconds
dc.Content += "Done.";
}
ध्यान दें कि कुछ और जटिल वस्तुओं के लिए, आपको dc.UpdateContent(obj);
इसके बजाय उपयोग करना पड़ सकता है dc.Content=...
।
उदाहरण 2:
void Main()
{
var dc = new DumpContainer().Dump("Some Action");
for (int i = 10; i >= 0; i--)
{
dc.UpdateContent($"Countdown: {i}");
System.Threading.Thread.Sleep(250);
};
dc.UpdateContent("Ready for take off!");
}
प्रोग्रेसबार का उपयोग करके प्रगति को दर्शाया जा सकता है:
उदाहरण:
void Main()
{
var prog = new Util.ProgressBar("Processing").Dump();
for (int i = 0; i < 101; i++)
{
Thread.Sleep(50); prog.Percent = i;
}
prog.Caption = "Done";
}
यह पहले डंप उदाहरण के समान है, लेकिन इस बार एक अच्छा प्रगति बार एनीमेशन दिखा रहा है।
क्या आप जानते हैं कि आप LinqPad में यूनिट टेस्ट लिख सकते हैं? उदाहरण के लिए, आप xUnit ढांचे का उपयोग कर सकते हैं। यह LinqPad के NUGET सपोर्ट के जरिए F4- डायलॉग क्लिक में उपलब्ध है Add NUGET....। यहाँ एक चरण-दर-चरण विवरण दिया गया है कि LinqPad V5 या V6 के साथ xUnit का उपयोग कैसे करें।
अगर मुझे और पता चलता है, तो मैं इस उत्तर को अपडेट करूंगा