var result = await query.select( p => new { Id = p.Id , Title = p.Xname } ).ToListAsync();
var companys = new List<Company>();
var result = await query.select( p => new { Id = p.Id , Title = p.Xname } ).ToListAsync();
var companys = new List<Company>();
namespace ApplicationTest01.Utilities { public class StringHelper { } }
namespace ApplicationTest01.Utilities { public class StringHelper { public string StringConcatenate(string firstPhrase, string secondPhrase) { return firstPhrase + secondPhrase; } } }
namespace System { public static class StringHelper { public static string StringConcatenate(string firstPhrase, string secondPhrase) { return firstPhrase + secondPhrase; } } }
namespace System { public static class StringHelper { public static string StringConcatenate(this string firstPhrase, string secondPhrase) { return firstPhrase + secondPhrase; } } }
public ActionResult Index() { "1234".StringConcatenate("567"); string s1 = "dotnet"; string s2 = "tips"; s1.StringConcatenate(s2); return View(); }
namespace System.Web.Mvc { public static class EngineFilter { public static RazorViewEngine DisableVbhtml(this RazorViewEngine engine) { return engine; } } }
namespace System.Web.Mvc { public static class EngineFilter { public static RazorViewEngine DisableVbhtml(this RazorViewEngine engine) { return engine; } private static string[] FilterOutVbhtml(string[] source) { return source.Where(s => !s.Contains("vbhtml")).ToArray(); } } }
namespace System.Web.Mvc { public static class EngineFilter { public static RazorViewEngine DisableVbhtml(this RazorViewEngine engine) { engine.AreaViewLocationFormats = FilterOutVbhtml(engine.AreaViewLocationFormats); engine.AreaMasterLocationFormats = FilterOutVbhtml(engine.AreaMasterLocationFormats); engine.AreaPartialViewLocationFormats = FilterOutVbhtml(engine.AreaPartialViewLocationFormats); engine.ViewLocationFormats = FilterOutVbhtml(engine.ViewLocationFormats); engine.MasterLocationFormats = FilterOutVbhtml(engine.MasterLocationFormats); engine.PartialViewLocationFormats = FilterOutVbhtml(engine.PartialViewLocationFormats); engine.FileExtensions = FilterOutVbhtml(engine.FileExtensions); return engine; } private static string[] FilterOutVbhtml(string[] source) { return source.Where(s => !s.Contains("vbhtml")).ToArray(); } } }
ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine().DisableVbhtml());
//dynamic reflection
PropertyInfo property = typeof (MyClass).GetProperty("Name");
MethodInfo method = typeof (MyClass).GetMethod("SomeMethod");
public string TextBoxFor<T>(Expression<Func<T,object>> expression);
<%= this.TextBoxFor(model => model.FirstName); %>
public PropertyInfo GetProperty<T>(Expression<Func<T, object>> expression)
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression == null)
throw new InvalidOperationException("Not a member access.");
return memberExpression.Member as PropertyInfo;
}
public class AddressMap : DomainMap<Address>
{
public AddressMap()
{
Map(a => a.Address1);
}
}
public interface IMyService { void foo(); void bar(); } public class MyService : IMyService { public void foo() { Console.Write("foo"); bar(); } public void bar() { Console.Write("bar"); } }
//using Castle.DynamicProxy; public class Interceptor : IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine("Intercepted: " + invocation.Method.Name); invocation.Proceed(); } }
//using System; //using Castle.DynamicProxy; //using StructureMap; class Program { static void Main(string[] args) { ObjectFactory.Initialize(x => { var dynamicProxy = new ProxyGenerator(); x.For<IMyService>() .EnrichAllWith(myTypeInterface => dynamicProxy.CreateInterfaceProxyWithTarget(myTypeInterface, new Intercept())) .Use<MyService>(); }); var myService = ObjectFactory.GetInstance<IMyService>(); myService.foo(); } }
Intercepted foo foo Intercepted bar bar
Intercepted foo foo bar
public class MyService : IMyService { public virtual void foo() { Console.Write("foo"); bar(); } public virtual void bar() { Console.Write("foo"); bar(); } }
// جایگزین روش پیشین در متد Main x.For<IMyService>() .EnrichAllWith(myTypeInterface => dynamicProxy.CreateClassProxy<MyService>(new Intercept())) .Use<MyService>();
private string name = string.Empty;
public string Name
{
get { return this.name; }
set
{
if (value == null)
{
this.name = "";
return;
}
this.name = value;
}
}
public IList<string> GetCultures()
{
//...
}
public static class LanguageExtender
{
public static string GetSafeStringValue(this XElement input)
{
return (input == null) ? string.Empty : input.Value;
}
public static DateTime GetSafeDateValue(this XElement input)
{
return (input == null) ? DateTime.MinValue : DateTime.Parse(input.Value);
}
}
Install-Package GMap.Net
عنوان | توضیحات |
Marker | یک نشانه گذار که برای مشخص کردن یک محل بر روی نقشه به کار میرود. این علامت گذار شامل خصوصیتهایی چون نقطهی قرارگیری، آیکن، عنوان و انیمیشنی برای نحوهی نمایش آن میباشد. همچنین شامل یک خصوصیت دیگر از نوع InfoWindow است که به شما امکان نمایش یک پنجرهی توضیحات را نیز بر روی مارکر میدهد. این محتوا میتواند به صورت HTML نمایش یابد. |
Circle | در صورتیکه بخواهید ناحیهای دایرهای شکل را بر روی نقشه مشخص کنید، کاربرد دارد. با دادن نقطهی مرکزی و شعاع میتوانید دایره را ترسیم کنید. همچنین شامل خصوصیات ظاهری چون رنگ داخل و حاشیهها و میزان شفافیت نیز میباشد. |
Rectangle | به رسم یک مستطیل میپردازد و تنها لازم است دو مختصات را به آن بدهید و بر اساس این دو نقطه، ناحیهی مستطیلی شکل ترسیم میگردد. در صورتیکه نقاط بیشتری را به آن اضافه کنید، فقط دوتای اولی در نظر گرفته میشوند. این گزینه شامل خصوصیات ظاهری نیز میگردد. |
Polyline | برای ترسیم مسیرها به صورت چند ضلعی به کار میرود و الزامی به بستن مسیرها نیست. دارای خصوصیات ظاهری نیز میباشد. |
polygon | کاملا شبیه Ployline است؛ با این تفاوت که یک چند ضلعی بسته است و میتواند داخل آن با رنگ پر باشد. برای بستن این چند ضلعی لازم نیست تا کاری انجام دهید. خود کلاس، نقطهی اول و آخر را به هم وصل میکند. |
خصوصیات آیتمهای بالا، شامل موارد زیر میشود:
نام خصوصیت | توضیحات |
Id | در سازندهی هر کدام به طور اجباری قرار گرفته است. این id برای زمانی است که بخواهید با استفاده از جاوااسکرپیت با آن ارتباط برقرار کنید. |
Editable | با فعال کردن این خاصیت، به کاربر این اجازه را میدهید که بتواند روی Overlay ویرایش انجام دهد. |
StrokeWeight | ضخامت لبهها را مشخص میکند. |
StrokeColor | رنگ لبه را مشخص میکند. |
StrokeOpacity | میزان شفافیت لبه را بین 0 تا 1 مشخص میکند. |
FillColor | بعضی از المانها مانند چند ضلعیهای بسته و مستطیل که ناحیهی داخلی دارند، شامل این گزینه هستند و رنگ داخل این ناحیه را مشخص میکنند. |
FillOpacity | میزان شفافیت خصوصیت بالا را از 0 تا 1 مشخص میکند. |
Points | با استفاده از این خاصیت میتوانید مختصات را با استفاده از کلاس Location به آن اضافه کنید. برای دایره خصوصیت Point وجود دارد. |
Radius | برای دایره کاربرد دارد. با مقدار نوع Int میتوانید شعاع آن را مقدار دهی کنید. |
public class MiladTower { public GoogleMapApi TestMarker() { var map=new GoogleMapApi(true); var location = new Location(35.7448416, 51.3753212); map.SetLocation(location); map.SetZoom(17); map.SetMapType(MapTypes.ROADMAP); map.SetBackgroundColor(Color.Aqua); map.ZoomControlVisibilty(true); map.ZoomOptions = new zoomControlOptions() { Position = Position.TOP_LEFT, ZoomStyle = ZoomStyle.SMALL }; Marker marker=new Marker("mymarker1"); marker.InfoWindow=new InfoWindow("iw1") { Content = "<b>Milad Tower</b><i>in Tehran</i><br/>Milad Tower is the highest tower in iran,many people and tourists visit it each year, but it's so expensive that i cant afford it as iranian citizen<br/>please see more info at <a href=\"https://en.wikipedia.org/wiki/Milad_Tower\"><img width='16px' height='16px' src='https://en.wikipedia.org/favicon.ico'/>wikipedia</a>" }; marker.MarkerPoint = location; map.Markers.Add(marker); var circle=new CircleMarker("mymarker2"); circle.FillColor = Color.Green; circle.FillOpacity = 0.6f; circle.StrokeColor = Color.Red; circle.StrokeOpacity = 0.8f; circle.Point = location; circle.Radius = 30; circle.Editable = true; circle.StrokeWeight = 3; map.Circles.Add(circle); Rectangle rect=new Rectangle("rect1"); rect.FillColor = Color.Black; rect.FillOpacity = 0.4f; rect.Points.Add(new Location(35.74728723483808, 51.37550354003906)); rect.Points.Add(new Location(35.74668641224311, 51.376715898513794)); map.Rectangles.Add(rect); Polyline polyline=new Polyline("poly1"); polyline.Points.Add(new Location(35.74457043569041, 51.373915672302246)); polyline.Points.Add(new Location(35.74470976097927, 51.37359380722046)); polyline.Points.Add(new Location(35.744378863020074, 51.37337923049927)); polyline.StrokeColor = Color.Blue; polyline.StrokeWeight = 2; map.Polylines.Add(polyline); Polygon polygon=new Polygon("poly2"); polygon.Points.Add(new Location(35.746494844665094, 51.374655961990356)); polygon.Points.Add(new Location(35.74635552250061, 51.37283205986023)); polygon.Points.Add(new Location(35.74598109297522, 51.372681856155396)); polygon.Points.Add(new Location(35.7454934611854, 51.37361526489258)); polygon.FillColor = Color.Black; polygon.FillOpacity = 0.5f; polygon.StrokeColor = Color.Gray; polygon.StrokeWeight = 1; map.Polygons.Add(polygon); return map; } }
@section javascript { @{ var map = new MiladTower().TestMarker(); @map.ShowMapForMvc("mapdiv") } } <br/><br/> <div id="mapdiv" style="width:600px;height:600px;"></div>
public ActionResult MiladJs() { var output = new MiladTower().TestMarker().GiveJustJs("mapdiv"); Response.ContentType = "text/javascript"; return Content(output); }
@section javascript { @{ var map = new MiladTower().TestMarker(); @map.CallJs() <script type="text/javascript" src="@Url.Action("MiladJs","Home")"></script> } } <br/><br/> <div id="mapdiv" style="width:600px;height:600px;"></div>
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <LangVersion>8.0</LangVersion> <NullableContextOptions>enable</NullableContextOptions> </PropertyGroup> </Project>
CS8632: The annotation for nullable reference types should only be used in code within a ‘#nullable’ context. CS8627: A nullable type parameter must be known to be a value-type or non-nullable reference type. Consider adding a ‘class’, ‘struct’ or type constraint.
<PropertyGroup> <LangVersion>preview</LangVersion> <Nullable>enable</Nullable> </PropertyGroup>
public class Person { public string FirstName { get; set; } public string MiddleName { get; set; } public string LastName { get; set; } public Person(string first, string last) => (FirstName, LastName) = (first, last); public Person(string first, string middle, string last) => (FirstName, MiddleName, LastName) = (first, middle, last); public override string ToString() => $"{FirstName} {MiddleName} {LastName}"; }
public string? MiddleName { get; set; }
public static class NullableReferenceTypes { //#nullable enable // Toggle to enable public static string Exemplify() { var vahid = new Person("Vahid", "N"); var length = GetLengthOfMiddleName(vahid); return $"{vahid.FirstName}'s middle name has {length} characters in it."; static int GetLengthOfMiddleName(Person person) { string middleName = person.MiddleName; return middleName.Length; } } }
var middleName = person.MiddleName;
static int GetLengthOfMiddleName(Person person) { var middleName = person.MiddleName; return middleName?.Length ?? 0; }
public static class NullableReferenceTypes { #nullable disable // Toggle to enable
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <LangVersion>8.0</LangVersion> <NullableContextOptions>enable</NullableContextOptions> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> </PropertyGroup> </Project>
<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
string name = null; // ERROR string? name = null; // OK!
public class Person { public Address? Address { get; set; }; public string Country => Address?.Country; // ERROR! }
public class Person { public Address? Address { get; set; }; public string? Country => Address?.Country; // OK! }
var node = this; // Initialize non-nullable variable while (node != null) { node = null; // ERROR! }
Node? node = this; // Initialize nullable variable while (node != null) { node = null; // OK! }
public class Person { public string Name { get; set; } // ERROR! }
public class Person { public string? Name { get; set; } }
public class Person { public string Name { get; set; } public Person(string name) { Name = name ?? throw new ArgumentNullException(nameof(name)); } }
public class Person { public string Name { get; set; } = string.Empty; // -or- public string Name { get; set; } = ""; }
String.Empty Array.Empty<T>() Enumerable.Empty<T>()
public class Person { public Address Address { get; set; } = new Address(); }
Chat c = new Chat(); ChatLog m = new ChatLog(); public Guid NewObjects(Guid Id) { return Id; } public Guid idChat { get ; set; } public void CreateChat() { Guid Id = Guid.Parse(Context.ConnectionId); NewObjects(Id); idchat=Id; c.ChatId = Id; c.Time = 25; c.UserId = "87EC3AD1 - 53D1 - 4649 - 8CF3 - 2CD5ADB1938C"; var chat = db.Chats.FirstOrDefault(c => c.ChatId == Id); if (chat == null) { db.Chats.Add(c); db.SaveChanges(); } db.Dispose(); } public void broadcastMessage(string name, string message, Guid Id) { m.ChatText = message; m.Id = Id; m.ChatDate = DateTime.Now; m.UserId = "87EC3AD1 - 53D1 - 4649 - 8CF3 - 2CD5ADB1938C"; db.ChatLogs.Add(m); db.SaveChanges(); db.Dispose(); Clients.All.Msg(name, message,m.Id); }
Install-Package SQLite.CodeFirst
public class Person { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public virtual ICollection<PhoneBook> Numbers { get; set; } }
public class PhoneBook { public int Id { get; set; } public string Field{ get; set; } public string Number { get; set; } public virtual Person Person { get; set; } }
public class Context:DbContext { public Context():base("constr") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); var initializer = new InitialDb(modelBuilder); Database.SetInitializer(initializer); } public DbSet<PhoneBook> PhoneBook { get; set; } public DbSet<Person> Persons { get; set; } }
public class InitialDb:SQLite.CodeFirst.SqliteCreateDatabaseIfNotExists<Context> { public InitialDb(DbModelBuilder modelBuilder) : base(modelBuilder) { } protected override void Seed(Context context) { var person = new Person() { FirstName = "ali", LastName = "yeganeh", Numbers = new List<PhoneBook>() { new PhoneBook() { Field = "Work", Number = "031551234" }, new PhoneBook() { Field = "Mobile", Number = "09123456789" }, new PhoneBook() { Field = "Home", Number = "031554321" } } }; context.Persons.Add(person); base.Seed(context); } }
<connectionStrings> <add name="constr" connectionString="data source=.\phonebook.sqlite;foreign keys=true" providerName="System.Data.SQLite" /> </connectionStrings>
The ADO.NET provider with invariant name 'System.Data.SQLite' is either not registered in the machine or application config file, or could not be loaded
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite.EF6" /> <remove invariant="System.Data.SQLite" /> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> </DbProviderFactories> </system.data>
public MainWindow() { InitializeComponent(); var context=new Context(); var list= context.Persons.ToList(); var s = ""; foreach (var person in list) { s += person.FirstName + " " + person.LastName + " has these numbers:" + Environment.NewLine; foreach (var number in person.Numbers) { s += number.Field + " : " + number.Number + Environment.NewLine; } s += Environment.NewLine; } MessageBox.Show(s); }
فرض کنید که میخواهیم یک برنامه برای یک فروشگاه نوشیدنی (مانند coffee shop) بنویسیم ، این فروشگاه در ابتدای کار ممکن است ، منوی سادهای جهت ارائه به مشتری داشته باشد. برای مثال ممکن است که فقط 3 یا 4 محصول داشته باشد. بنابراین ممکن است ما برنامهای را که میخواهیم برای این مشتری بنویسیم به صورت زیر طراحی کنیم:
که بسیار طبیعی و درست میباشد. اما حالا در نظر بگیرید که این فروشگاه در آینده ممکن است محصولات خود را افزایش بدهد و یا حالاتی که ممکن است این محصولات با هم ادغام شوند را در نظر بگیرید. برای مثال ممکن است شما بخواهید که قهوهتان را با شیر نوش جان کنید و یا ....
بنابراین تعداد این حالات را در نظر بگیرید که در آینده ممکن است چقدر زیاد بشود:
خوب پس چهکاری ما میتوانیم برای نگهداری این برنامه انجام بدهیم؟ یکی از راههایی که ممکن است به فکر ما برسد این است که روش بالا روش احمقانه ای است. چرا ما باید به همهی این کلاسها نیاز داشته باشیم. ما میتوانیم که چاشنیها را در کلاس اصلی نگهداری کنیم و کلاس محصولاتمان را از کلاس اصلی به ارث ببریم اجازه دهید تا این کار را با هم انجام بدهیم
خوب با این روش ما n کلاس تشکیل شده در رویکرد اول را فقط به 5 کلاس تبدیل کردیم. خوب این روشی بسیار ایدهال به نظر میرسد. اما ممکن است در آینده که تعداد چاشنیهای ما بالا میرود و همچنین تعداد محصولاتمان نیز ممکن است بیشتر شود مجبور شویم که تعداد این کلاسها را بیشتر کنیم، و یا فکر کنید که ما میخواهیم هریک از چاشنیهایمان، یک قیمت را نسبت بدهیم. بنابراین مجبوریم که تمامی اینها را در کلاس پایه اضافه کنیم؛ بله درست است، ما با کلاس پایهی حجیمی روبرو میشویم که بیشتر خواص و یا متدهای آن برای زیر کلاسهای دیگر مناسبت نیستند. خوب آیا روش بهتری برای جلوگیری از این مشکل داریم؟ بلی.
خوب ما به این مسئله به این صورت نگاه میکنیم که شروع میکنیم با نوشیدنیها و آنها را با چاشنیها در زمان اجرا تزیین (Decorate) میکنیم؛ نه کامپایل.
برای مثال اگر مشتری ما یک نوشیدنی DarkRoast با Mocha و Whip خواست، سپس ما :
1- یک شی از DarkRoast ایجاد میکنیم .
2- آن را با یک شی از Mocha تزئین میکنیم.
3- آن را با یک شی از Whip - تزیین میکنیم.
4- متد Cost() را صدا میزنیم و یک Delegation را برای اضافه کردن قیمت چاشنیها در نظر میگیریم.
بسیار خوب؛ اما ما عملیات تزئین یک شی را چگونه انجام میدهیم و delegation ما چگونه عمل میکند .
یک اشاره : به شیء تزئین کننده، مانند یک Wrappers فکر کنید. اجاز بدهید ببینم که چه طور این کار را انجام میدهیم.
1- یک شی از DarkRoast ایجاد میکنیم.
3- آن را با یک شی از Whip تزیین میکنیم
4- حالا زمان محاسبه قیمت محصول برای مشتری فرا رسیده است. ما این کار را را با صدا زدن بیرونیترین Decorator(Whip) انجام میدهیم و شی whip به کمک Delegate مابقی توابع cost را صدا میزند.
public abstract class Beverage { string description ="unknow beverage"; public String getDescription(){ return description; } public abstract double cost(); } public abstract class CondimentDecorator extends Beverage { public abstract string getDescription(); } public class Espersso extends Beverage{ public Espersso() { description="Espersso"; } public double cost(){ return 1.99; } } public class HouseBelend extends Beverage { public HouseBelend() { description="HouseBelend"; } public double cost() { return .89; } } public class mocha extends condimateDecorator { Beverage beverage; public mocha(Beverage beverage) { this.beverage=beverage; } public string getDescription(){ return beverage.getdescription() + "Mocha"; } public double cost(){ return .20 +beverage.cost } } // Now Use These classes in Final form Beverage beverage=new Espersso(); //Customers want a coffe with double milk and whip beverage=new mocha(beverage); beverage=new mocha(meverage); beverage=new whip(beverage); system.out.println(beverage.getDescription() + "$" +beverage.cost());