কারও কাছে কি লিনকিপ্যাড এক্সটেনশন পদ্ধতি এবং পদ্ধতিগুলির সম্পূর্ণ তালিকা রয়েছে, যেমন?
.Dump()
SubmitChanges()
কারও কাছে কি লিনকিপ্যাড এক্সটেনশন পদ্ধতি এবং পদ্ধতিগুলির সম্পূর্ণ তালিকা রয়েছে, যেমন?
.Dump()
SubmitChanges()
উত্তর:
লিনকুইপ্যাড দুটি এক্সটেনশন পদ্ধতি (লিনকুইপ্যাড। এক্সটেনশনে) সংজ্ঞায়িত করে, যথা Dump()
এবং Disassemble()
। Dump()
লিনিকপ্যাডের আউটপুট ফর্ম্যাটারটি ব্যবহার করে আউটপুট উইন্ডোতে লিখেছে এবং আপনাকে একটি শিরোনাম নির্দিষ্ট করতে দিতে ওভারলোড হয়েছে:
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
পৃথক করা () কোনও IL
স্ট্রিংয়ে আউটপুট ফিরে আসার জন্য যে কোনও পদ্ধতিকে বিযুক্ত করতে পারে :
typeof (Uri).GetMethod ("GetHashCode").Disassemble().Dump();
এই দুটি এক্সটেনশন পদ্ধতি ছাড়াও লিংকপ্যাড.উটিলে কিছু কার্যকর স্ট্যাটিক পদ্ধতি রয়েছে। এগুলি স্বতঃপূরণে নথিভুক্ত রয়েছে এবং এর মধ্যে রয়েছে:
লিনকিউপ্যাড হাইপারলিংক ক্লাসও সরবরাহ করে। এর দুটি উদ্দেশ্য রয়েছে: প্রথমটি হ'ল হাইপারলিঙ্কগুলি প্রদর্শন করা:
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();
আপনি লিনকপ্যাডে আপনার নিজের এক্সটেনশন পদ্ধতিগুলিও লিখতে পারেন। 'আমার প্রশ্নগুলি' এ যান এবং 'আমার এক্সটেনশানস' নামক কোয়েরিটি ক্লিক করুন। এখানে সংজ্ঞায়িত যে কোনও ধরণের / পদ্ধতিগুলি সমস্ত প্রশ্নের অ্যাক্সেসযোগ্য:
void Main()
{
"hello".Pascal().Dump();
}
public static class MyExtensions
{
public static string Pascal (this string s)
{
return char.ToLower (s[0]) + s.Substring(1);
}
}
৪.৪46 (.02) এ নতুন ক্লাস এবং পদ্ধতি চালু করা হয়েছে :
অতিরিক্তভাবে, হাইপারলিংক শ্রেণি এখন একটি অ্যাকশন প্রতিনিধিকে সমর্থন করে যা আপনাকে লিঙ্কটি ক্লিক করার সময় ডাকা হবে, আপনাকে কোডটিতে এটিতে প্রতিক্রিয়া জানাতে এবং কেবল বাহ্যিক ওয়েবপৃষ্ঠাগুলিতে লিঙ্ক না দিয়ে অনুমতি দেবে।
DumpContainer
আউটপুট উইন্ডোতে এমন একটি ব্লক যুক্ত করে যা এর সামগ্রীগুলি প্রতিস্থাপন করতে পারে a
বিঃদ্রঃ! মনে রাখুন উপযুক্ত স্পট নিজেই।.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()
যথাযথ জায়গায় ইউটি.প্রোগ্রেস বার অবজেক্টটি মনে রাখবেন ।
এটি ব্যবহার করতে:
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()
করতে পারেন ।
অবশেষে আমি আপনাকে দেখাব যে কীভাবে আপনি পরিবর্তনগুলি স্থায়ী করতে পারেন (যেমন সন্নিবেশ করান, আপডেট করুন, লিনকুই কোয়েরিগুলি মুছুন ) SubmitChanges()
বা SaveChanges()
পাশাপাশি আপনি কীভাবে লিনকপ্যাডের অভ্যন্তরীণ সংযোগ অবজেক্টটি অ্যাক্সেস করতে পারবেন।
এবং এটির বৃত্তাকারটি জানাতে, আমি আপনাকে দেখাব যে কীভাবে আপনি লিনকপ্যাডের ভিতরে সাধারণ 2 ডি গ্রাফিক তৈরি করতে পারেন (অঙ্কন রেখা, বিটম্যাপস বা ফাংশন )।
সুতরাং, এখানে লিনকপ্যাড বৈশিষ্ট্যগুলি অন্তর্নির্মিত সংগ্রহ রয়েছে ( সরঞ্জামটির সাথে আমার নিজের অভিজ্ঞতা থেকে):
(উপরের লিঙ্কপ্যাড v5.03.08 এ উপলব্ধ প্যারামিটারগুলি)
সমস্ত লিনকপ্যাড ব্যবহারকারী .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
, 2nd উদাহরণ বিপরীত (নোট এটি নির্দিষ্ট করে উপলব্ধ পরামিতি মাত্র 2) আছে। ভেরিয়েবলগুলি y
এবং z
পৃথকভাবে লুকানো যায় না, কারণ এগুলি শীর্ষ স্তরে নেই।
নিম্নলিখিত পরামিতি উপলব্ধ ( সমস্ত alচ্ছিক ):
description
[স্ট্রিং] - বস্তুর ডাম্প করার জন্য একটি বিবরণ সরবরাহ করেdepth
[ইনট?] - কতগুলি গভীর অবজেক্টস পুনরাবৃত্তিভাবে পরিদর্শন করা হয় তা সীমাবদ্ধ করেtoDataGrid
[bool] - সত্য হলে, আউটপুটটি রিচটেক্সটের পরিবর্তে ডেটাগ্রিড হিসাবে ফর্ম্যাট হয়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
তবে আপনার আগ্রহী হলেই তার বিশদটি প্রকাশ করুন ।ডাম্প সম্পর্কে আরও উন্নত বিষয়গুলি এখানে এবং সেখানে পাওয়া যাবে ।
এটি লিনকপ্যাড এক্সটেনশন নয়, বরং একটি নেট নেট ক্লাস, তবে যেহেতু এটি দরকারী, তাই আমি এটি যেকোনভাবে উল্লেখ করব। আপনি আপনার স্ক্রিপ্টগুলিতে ব্যবহার করতে পারেন এমন প্রচুর দরকারী তথ্য পেতে পারেন:
Environment.UserDomainName.Dump();
Environment.MachineName.Dump();
Environment.UserName.Dump();
Environment.CurrentDirectory.Dump();
Environment.SystemDirectory.Dump();
এনবি অর্জনের জন্য Domain\UserName
আমি System.Security.Principal.WindowsIdentity.GetCurrent().Name
বরং ব্যবহার করব Environment.UserDomainName+@"\"+Environment.UserName
।
( নতুন: লিনকপ্যাড সংস্করণ v4.45.05 (বিটা) থেকে উপলব্ধ )
Util.WriteCsv (Customers, @"c:\temp\customers.csv");
এটি Customers
সিএসভি ফাইলে টেবিলের সামগ্রীটি লিখবে c:\temp\customers.csv
। এছাড়াও আপনি একটি চমৎকার উদাহরণ কীভাবে ব্যবহার করবেন তা জানতে পারেন Util.WriteCsv
এবং তারপর Linqpad এর ফলাফলের উইন্ডোতে যে CSV তথ্য প্রদর্শন এখানে ।
সংকেতগুলি:
কোয়েরির মতো একই ডিরেক্টরিতে থাকা কোনও সিএসভি ফাইল পেতে / তৈরি করতে, আপনি ব্যবহার করতে পারেন:
var csvFile=Util.CurrentQueryPath.Replace(".linq", ".csv");
যদি টেবিলটি বড় ObjectTrackingEnabled = false;
হয় তবে মেমরিতে ক্যাশ এড়ানোর জন্য আপনি CSV লেখার আগে ব্যবহার করুন।
আপনি যদি কমা-বিচ্ছিন্ন ফাইলের পরিবর্তে এক্সএমএল ফর্ম্যাটে কোনও টেবিল আউটপুট করতে চান তবে আপনি এটি করতে পারেন:
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"
কোনও এক্সএমএল ফাইল থেকে মান রয়েছে যা কোয়েরির মতো একই নাম রয়েছে এবং একই পথে রয়েছে। পরীক্ষা করে দেখুন এই আরো কোড নমুনার জন্য লিঙ্ক।
var pwd = Util.GetPassword("UserXY");
এটি লিনকপ্যাডের অন্তর্নির্মিত পাসওয়ার্ড পরিচালক থেকে পাসওয়ার্ড পুনরুদ্ধার করবে। তৈরি ও পাসওয়ার্ড পরিবর্তন করুন, খুলতে "পাসওয়ার্ড ম্যানেজার" মেনু আইটেম মধ্যে "ফাইল" মেনুতে LinqPad করুন। আপনি যদি সি # কোড চালানোর সময় কোনও পাসওয়ার্ড সংরক্ষণ না করে থাকেন তবে পাসওয়ার্ডের জন্য জিজ্ঞাসা করে একটি পাসওয়ার্ড ডায়ালগ খোলে এবং সেভ পাসওয়ার্ড চেকবক্সটি পরীক্ষা করে এটি ফ্লাইতে তৈরি এবং সংরক্ষণ করার পছন্দ থাকে (উদাহরণস্বরূপ, পাসওয়ার্ড "ব্যবহারকারীর জন্য" সংরক্ষণ করা হবে, এবং পরে আপনি পাসওয়ার্ড ম্যানেজারে এই এন্ট্রিটি খুঁজে পেতে পারেন )।
সুবিধাগুলি হ'ল আপনি লিনকস্ক্রিপ্টগুলিতে পাসওয়ার্ডটি সুরক্ষিতভাবে, উইন্ডোজ ব্যবহারকারী প্রোফাইলে আলাদাভাবে এবং এনক্রিপ্ট করাতে সংরক্ষণ করতে পারেন (এটি %localappdata%\LINQPad\Passwords
ফাইল হিসাবে সঞ্চিত থাকে)। লিনকপ্যাড পাসওয়ার্ডটি সুরক্ষিত করতে উইন্ডোজ ডিপিএপিআই ব্যবহার করে।
এছাড়াও, পাসওয়ার্ডটি কেন্দ্রীয়ভাবে সংরক্ষণ করা হয়, সুতরাং আপনার যদি এটি পরিবর্তন করতে হয় তবে আপনি এটি মেনুতে করতে পারেন এবং এটি তত্ক্ষণাত আপনার তৈরি সমস্ত স্ক্রিপ্টগুলিতে প্রযোজ্য।
মন্তব্য:
আপনি যদি পাসওয়ার্ডটি সংরক্ষণ করতে না চান এবং কেবল একটি পাসওয়ার্ড ডায়ালগ আনতে চান তবে আপনি দ্বিতীয় প্যারামিটারটি নিম্নরূপ ব্যবহার করতে পারেন:
var pwd = Util.GetPassword("UserXY", true);
এটি পাসওয়ার্ড ডায়ালগটিতে সংরক্ষণ করা পাসওয়ার্ড চেকবক্সটি চেক করবে না (তবে, ব্যবহারকারী এখনও এটি পরীক্ষা করতে সক্ষম এবং যাইহোক সংরক্ষণ করতে চয়ন করুন)।
আপনার যদি পাসওয়ার্ডটি একটিতে সংরক্ষণ করার প্রয়োজন হয় তবে আপনি SecureString
এই সহায়ক ফাংশনটি ব্যবহার করতে পারেন (এনবি: এক্সটেনশন পদ্ধতিটি .ToSecureString()
ব্যবহার করতে, দয়া করে স্ট্যাকওভারফ্লোতে এই লিঙ্কটি অনুসরণ করুন - এটি আপনাকে প্রয়োজনে এটি আবার রূপান্তর করতেও অনুমতি দেয়):
System.Security.SecureString GetPasswordSecure(string Name, bool noDefaultSave=true)
{
return Util.GetPassword(Name, noDefaultSave)
.ToSecureString();
}
এই পদ্ধতিটি কমান্ড প্রসেসরের মতো কাজ করে। আপনি উইন্ডোজ কনসোল থেকে আপনার জানা সমস্ত কমান্ড শুরু করতে পারেন।
উদাহরণ 1 - dir:
Util.Cmd(@"dir C:\");
এটি ডিরেক্টরিটির প্রয়োজন ছাড়াই ফলাফলের ফলাফল .Dump
দেয়। এটি একটি ভেরিয়েবলে সংরক্ষণ করার সুবিধা রয়েছে যে আপনি এটিতে আরও লিনক কোয়েরি ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:
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
লিনকের ক্যোয়ারী ইঞ্জিনের সম্পূর্ণ নমনীয়তা আপনি ব্যবহার করতে পারছেন এমন আপনার সাথে থাকা ওয়াইল্ডকার্ডগুলির চেয়ে এটি আরও নমনীয় ।
উদাহরণ 2 - পাঠ্য সম্পাদক:
আপনি নোটপ্যাডে এই জাতীয় ফাইল খুলতে পারেন:
var filePath=@"C:\HelloWorld.txt";
Util.Cmd(@"%systemroot%\system32\notepad.exe", filePath);
কোনও URL থেকে চিত্রগুলি প্রদর্শন করে Dis উদাহরণ:
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
লিনকপ্যাডগুলি সংহত অগ্রগতি বার আপডেট করতে ব্যবহার করতে পারেন , উদাহরণস্বরূপ:
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 এর অংশ হিসাবে ": 1234" এর মতো বন্দর নামগুলি পাস করতে হয়)।
কনসোল থেকে ইনপুট পড়ে। উদাহরণ:
int age = Util.ReadLine<int> ("Enter your age");
এর প্রতিশব্দ হিসাবে Util.ReadLine<string>()
, আপনি Console.ReadLine()
পাশাপাশি ব্যবহার করতে পারেন ।
তবে আরও আছে! আপনি নিম্নলিখিত স্নিপেটের সাহায্যে একটি সাধারণ জেএসএন পার্সার তৈরি করতে পারেন - বেশ কার্যকর, উদাহরণস্বরূপ আপনি যদি ফ্লাইতে কোনও জেএসএন স্ট্রিংটি বিশ্লেষণ করতে এবং পরীক্ষা করতে চান। একটি পাঠ্য সম্পাদক ব্যবহার করে নীচের স্নিপেটটি JSONAnalyzer.linq হিসাবে সংরক্ষণ করুন এবং তারপরে এটি লিনকপ্যাডে খুলুন (এটি ফ্লাইতে সহজেই রেফারেন্স যুক্ত করতে হবে):
<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
এটিকে একটি বিষয় হিসাবে দুর্দান্তভাবে প্রদর্শন করতে ফাংশনটি ব্যবহার করবে - এবং সমস্যাগুলি ঠিক করার জন্য আপনি পর্দায় পার্সারের ত্রুটি বার্তা পাবেন। এজেএক্স ডিবাগ করার জন্য খুব দরকারী।
আপনার স্ক্রিপ্টের মধ্যে যদি ফলাফলগুলি উইন্ডো সাফ করার প্রয়োজন হয় তবে ব্যবহার করুন:
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
}
}
(এফ 4 টি চাপতে এবং মাইক্রোসফ্ট.ভিউজুয়াল বেসিক.ডিল এবং এটির কাজ করার জন্য এর নেমস্পেস যুক্ত করতে ভুলবেন না)
( নতুন: লিনকপ্যাড সংস্করণ v4.52.1 (বিটা) থেকে উপলব্ধ )
আপনাকে অন্য লিঙ্কপ্যাড স্ক্রিপ্টটি আপনার স্ক্রিপ্টের মধ্যে থেকে বা আপনার নিজস্ব। নেট প্রোগ্রাম বা উইন্ডোজ পরিষেবাদির (লিনিকপ্যাড 4-এএনসিপিইউ সংস্করণটি উল্লেখ করে LINQPad.exe
) চালানোর অনুমতি দেয় । কমান্ড লাইন সরঞ্জাম 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
আপনি যদি লিনকটিওএসকিউএল ব্যবহার করছেন তবে আপনি স্থায়ী পরিবর্তনগুলি ( সন্নিবেশ / আপডেট / অপারেশন মোছার জন্য ) করতে চাইতে পারেন । যেহেতু ডাটাবেস প্রসঙ্গটি স্পষ্টভাবে লিনকপ্যাড দ্বারা তৈরি SubmitChanges()
করা হয়েছে, নীচে প্রদর্শিত প্রতিটি পরিবর্তনের পরে আপনাকে কল করতে হবে ।
(লিনকপ্যাড-) নর্থউইন্ড ডাটাবেসের জন্য উদাহরণ :
সন্নিবেশ
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();
দ্রষ্টব্য: পূর্ববর্তী উদাহরণগুলির জন্য বৈধ ID পেতে, আপনি ব্যবহার করতে পারেন:
var cID = (from c in Categories
where c.CategoryName.Contains("Seafood")
select c).FirstOrDefault().CategoryID;
var pID = Products.Count()+1;
আপনি তাদের আহ্বান আগে।
আপনি যদি সত্তা ফ্রেমওয়ার্ক ব্যবহার করছেন , আপনি পাশাপাশি পরিবর্তনগুলি স্থায়ী করতে চাইবেন ( সন্নিবেশ / আপডেট / অপারেশন মোছার জন্য )। যেহেতু ডাটাবেস প্রসঙ্গটি স্পষ্টভাবে লিনকপ্যাড দ্বারা তৈরি SaveChanges()
করা হয়েছে, নীচে প্রদর্শিত প্রতিটি পরিবর্তনের পরে আপনাকে কল করতে হবে ।
উদাহরণগুলি মূলত লিনকটিওএসকিউএল এর আগের মত একই , তবে এর 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();
দ্রষ্টব্য: পূর্ববর্তী উদাহরণগুলির জন্য বৈধ ID পেতে, আপনি ব্যবহার করতে পারেন:
var cID = (from c in Categories
where c.CategoryName.Contains("Seafood")
select c).FirstOrDefault().CategoryID;
var pID = Products.Count()+1;
আপনি তাদের আহ্বান আগে।
ইন 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();
এখন লিনকপ্যাডে একটি স্কেল সার্ভার সংযোগ যুক্ত করুন এবং এই উদাহরণটি চালানোর জন্য নর্থউইন্ড ডাটাবেস যুক্ত করুন।
নোট: আপনি যদি বর্তমানে নির্বাচিত সংযোগটির ডাটাবেস এবং সার্ভারটি পেতে চান তবে আপনি এই কোড স্নিপেট ব্যবহার করতে পারেন:
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();
}
এমনকি আপনি রূপান্তর করতে পারেন myDS
মধ্যে Linq, নিচের প্রশ্নগুলোর প্রদর্শনী উত্তর কিভাবে এটা করবেন: Linq সঙ্গে .NET 4 গতিশীল শব্দ ব্যবহারের নিস উদাহরণ
আরও একটি উদাহরণ: ধরা যাক আপনার ডিবিএ আপনাকে একটি এসকিউএল কোয়েরি দেয় এবং আপনি লিনকপ্যাডের ফলাফলগুলি বিশ্লেষণ করতে চান - অবশ্যই এসকিউএল-তে নয়, লিন্কে। তারপরে আপনি নিম্নলিখিতটি করতে পারেন:
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;
}
এই উদাহরণে ডিবিএর SELECT কোয়েরিটি কেবল কমান্ড পাঠ্যে "ফেলে দেওয়া" হয়েছে এবং ফলাফলগুলি ফিল্টার করে এবং সিটি দ্বারা আদেশ করা হয়।
অবশ্যই এটি একটি সরল উদাহরণ, আপনার ডিবিএ সম্ভবত আপনাকে আরও জটিল স্ক্রিপ্ট দেবে, তবে আপনি ধারণাটি পেয়ে যাচ্ছেন: কেবল একটি সমর্থনকারী ফলাফলের শ্রেণি যুক্ত করুন যা SELECT ধারা থেকে সমস্ত ক্ষেত্র রয়েছে এবং তারপরে আপনি সরাসরি এটি ব্যবহার করতে পারবেন ।
এমনকি আপনি এইভাবে কোনও সঞ্চিত প্রক্রিয়া থেকে ফলাফলটি নিতে এবং এটি লিন্কে ব্যবহার করতে পারেন। যেমন আপনি দেখতে পাচ্ছেন, এই উদাহরণে আমি ডেটা টাইপ এবং dynamic
এটি প্রকাশ করার জন্য ব্যবহার করি না।
দ্রুত তথ্য বিশ্লেষণ করতে সক্ষম হতে দ্রুত প্রোগ্রামিং সম্পর্কে এটি সত্যই। বিভিন্ন কারণে আপনার আসল অ্যাপ্লিকেশনটিতে এটি করা উচিত নয় (এসকিউএল ইঞ্জেকশন, কারণ আপনি প্রথম থেকেই ইএফ ব্যবহার করতে পারেন ইত্যাদি)।
লিনকপ্যাডে, গ্রাফিক আঁকুন, অংশ 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");
2nd উদাহরণ দেখায় কিভাবে আপনি PanelManager ব্যবহার করে LinqPad গ্রাফিক প্রদর্শন করতে পারেন। সাধারণত লিনকপ্যাড কেবল ডাব্লুপিএফ অবজেক্টকে সমর্থন করে। এই উদাহরণটিতে ব্যবহার 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);
}
এটি নিম্নলিখিত গ্রাফিক তৈরি করবে (প্যানেল আইটেমগুলি "গ্রাফিক" এবং "চিত্র" উপরের উদাহরণগুলির সাথে যুক্ত করা হয়েছে):
যদি আপনি চাই প্রতি Northwind ডাটাবেস থেকে চিত্রগুলি প্রদর্শনের, : আপনি নিম্নলিখিতগুলি করতে পারেন
পরিবর্তন ইমেজ ফাইল নাম "NorthwindPics.jpg", তারপর শুরুতে নিম্নলিখিত কোড যোগ 2nd উদাহরণ মেন () মেথড:
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();
}
এটি কর্মচারীদের টেবিল থেকে প্রথম রেকর্ডটি পড়বে এবং ছবিটি প্রদর্শন করবে।
আরও জানতে নিম্নলিখিত লিঙ্কগুলি দেখুন: ডাব্লুপিএফ লিনকপ্যাড কাস্টম ভিজুয়ালাইজারগুলিতে
আকার এবং বেসিক অঙ্কন
দ্রষ্টব্য: প্যানেল ম্যানেজার ছাড়াও আপনি এটি অর্জন করতে পারেন, নীচের উদাহরণ হিসাবে, যা আমি এখানে দেখেছি তা দেখায়:
// 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()
একাধিকবার আবেদন করতে পারেন এবং এটি চিত্র সংযোজন করবে।
লিনকপ্যাডে, গ্রাফিক আঁকুন, অংশ 2
নিম্নলিখিত পোস্টটি, এই পোস্টটি দ্বারা অনুপ্রাণিত, সি # 7 ব্যবহার করে কীভাবে লিনকপ্যাড 5-এ একটি সাধারণ ফাংশন প্লটটার প্রয়োগ করতে হবে তা দেখিয়ে দিচ্ছে:
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;
}
এটি ফলাফল প্যানেলে উইন্ডোজ ফর্মগুলি প্রদর্শন করতে লিনকপ্যাডের সক্ষমতা ব্যবহার করছে।
যোগ রেফারেন্স (প্রেস ) : , , এবং এই সমাহারগুলি থেকে সব নামব্যবধান যোগ করুন।
F4
System.Drawing.dll
System.Windows.Forms.dll
System.Windows.Forms.DataVisualization.dll
অতিরিক্ত ইঙ্গিত / আরও পড়া:
লিনাকপ্যাড ভিজ্যুয়াল স্টুডিওতে ব্যবহার করতে চান ? আপনি এটি কীভাবে করতে পারেন তা এখানে ।
একটি "পোর্টেবল অ্যাপ" হিসাবে লিনকপ্যাড থাকা দরকার ? কিভাবে এটি করতে এখানে পড়ুন ।
লিনকপ্যাডের জন্য জো-এর ওয়েবসাইট সর্বদা একটি দুর্দান্ত উত্স। লিঙ্কপ্যাডের অভ্যন্তরে, Help -> What's New
আপনাকে নতুন ফাংশন এবং পদ্ধতি সম্পর্কে ইঙ্গিত দেয়। LinqPad ফোরাম এছাড়াও সহায়ক নির্দেশ রয়েছে।
এছাড়াও খুব সহায়ক: লিনক (প্যাড) ডিবাগিং সম্পর্কে এই নিবন্ধ।
আপনার ব্যাচের স্ক্রিপ্টগুলিতে LINQ ক্যোয়ারী চালানোরlprun.exe
জন্য ব্যবহার করুন । আরও তথ্যের জন্য এই নিবন্ধটি পড়ুন । উদাহরণস্বরূপ:
এই উদাহরণে, ক্যোয়ারীটি একটি সাধারণ লিনকিউ এক্সপ্রেশন। অবশ্যই, আপনি প্রোগ্রামের মোডটি সক্রিয় করতে ব্যবহার করে জটিল প্রশ্নগুলি প্রস্তুত করতে পারেন ।
echo Customers.Take(100) > script.txt
lprun -lang=e -cxname=CompanyServer.CustomerDb script.txt
-lang=program
আপনি এক্সটেনশন পদ্ধতি লিখতে পারেন এবং সেগুলি লিনকপ্যাডের বাম দিকে আমার প্রশ্নগুলি ট্যাবে সংরক্ষণ করতে পারেন : গাছের শেষ আইটেমটির নাম দেওয়া হয়েছে আমার এক্সটেনশনস ; এমন কোনও ফাইল খোলার জন্য এটিতে ডাবল ক্লিক করুন যেখানে আপনি আপনার সমস্ত প্রশ্নের জন্য উপলব্ধ এক্সটেনশন লিখতে পারেন। এগুলি কেবল সর্বজনীন স্ট্যাটিক শ্রেণিতে রাখুন MyExtensions
এবং Main()
আপনার এক্সটেনশনের পরীক্ষাগুলি অন্তর্ভুক্ত করার জন্য পদ্ধতিটি ব্যবহার করুন ।
ডাম্প একটি গ্লোবাল এক্সটেনশন পদ্ধতি এবং সাবম্যাচেন্সগুলি ডেটা কনটেক্সট অবজেক্ট থেকে আসে যা একটি System.Data.Linq.DataContext অবজেক্ট।
এলপি কেবল যতটা অবগত আমি কেবল ডাম্প এবং বিচ্ছিন্ন করে। যদিও আমি এটি ব্যবহারের জন্য আরও কী আছে তা দেখার জন্য এটি প্রতিচ্ছবিতে এটি খোলার সুপারিশ করব। আরও আকর্ষণীয় বিষয়গুলির মধ্যে একটি হ'ল লিনিকপ্যাড U ইউটিউন নেমস্পেস যার মধ্যে লিনিকপ্যাড অভ্যন্তরীণভাবে কিছু গুডি ব্যবহার করেছে।
.Dump()
উত্স সম্পাদকের অন্য যে কোনও পদ্ধতিতে ক্লিক করুন বা " প্রতিবিম্বিত করতে" F12 টিপুন । এটি এখন সরঞ্জামের মধ্যে নির্মিত!
আমার আগের উত্তরে স্ট্যাকওভারফ্লো পাঠ্যের সীমাতে পৌঁছেছে, তবে লিনকপ্যাডে আরও শীতল এক্সটেনশন রয়েছে। এর মধ্যে একটির সাথে আমি উল্লেখ করতে চাই:
.Dump()
)লিনকপ্যাডের সংস্করণ 5.42 বিটা থেকে আপনি জাভাস্ক্রিপ্ট ফাংশনগুলি এম্বেড করতে পারেন এবং তাদের সরাসরি আপনার সি # কোড থেকে কল করতে পারেন। যদিও এর কিছু সীমাবদ্ধতা রয়েছে (জেএসফিডেলের সাথে তুলনা করা) তবে লিনকপ্যাডে কিছু জাভাস্ক্রিপ্ট কোড দ্রুত পরীক্ষা করার এটি একটি দুর্দান্ত উপায়।
উদাহরণ:
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(...)
লিনকপ্যাডের আউটপুট উইন্ডোতে পাঠ্য আউটপুট ব্যবহার করতে এবং 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";
}
এটি আগে ডাম্প উদাহরণের মতো, তবে এবার একটি দুর্দান্ত অগ্রগতি বার অ্যানিমেশন দেখাচ্ছে।
আপনি কি জানেন যে আপনি লিনকপ্যাডে ইউনিট পরীক্ষা লিখতে পারেন? উদাহরণস্বরূপ, আপনি xUnit কাঠামো ব্যবহার করতে পারেন। এটি লিনকপ্যাডের NUGET সহায়তার মাধ্যমে F4- মাধ্যমে - ডায়ালগ ক্লিকে উপলব্ধ Add NUGET....। লিনকপ্যাড ভি 5 বা ভি 6 এর সাথে কীভাবে এক্স ইউনাইট ব্যবহার করবেন তা এখানে ধাপে ধাপে বর্ণিত রয়েছে ।
আমি যদি আরও আবিষ্কার করি তবে আমি এই উত্তরটি আপডেট করব