با تشکر. روشهای دیگری هم برای بازگشت انواع بینام و نشان وجود دارند:
- خروجی متد را object تعریف کنیم
- خروجی متد را یک لیست از نوع dynamic (سی شارپ 4) تعریف کنیم
- خروجی متد را فقط ienumerable تعریف کنیم (نیازی به ذکر t ندارد الزاما)
با تشکر. روشهای دیگری هم برای بازگشت انواع بینام و نشان وجود دارند:
- خروجی متد را object تعریف کنیم
- خروجی متد را یک لیست از نوع dynamic (سی شارپ 4) تعریف کنیم
- خروجی متد را فقط ienumerable تعریف کنیم (نیازی به ذکر t ندارد الزاما)
let data = (“John Doe”, 42)
printf “%A” data
// Output: (“John Doe”,42)
public class Tuple<T1>
up to:
public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>
using System;
using System.Linq;
using System.Collections.Generic;
namespace TupleTest
{
class TupleCS4
{
#region Methods (4)
// Public Methods (4)
public static Tuple<string, string> GetFNameLName(string name)
{
if (string.IsNullOrWhiteSpace(name))
throw new NullReferenceException("name is empty.");
var nameParts = name.Split(',');
if (nameParts.Length != 2)
throw new FormatException("name must contain ','");
return Tuple.Create(nameParts[0], nameParts[1]);
}
public static void PrintSelectedTuple()
{
var list = new List<Tuple<string, int>>
{
new Tuple<string, int>("A", 1),
new Tuple<string, int>("B", 2),
new Tuple<string, int>("C", 3)
};
var item = list.Where(x => x.Item2 == 2).SingleOrDefault();
if (item != null)
Console.WriteLine("Selected Item1: {0}, Item2: {1}",
item.Item1, item.Item2);
}
public static void PrintTuples()
{
var tuple1 = new Tuple<int>(12);
Console.WriteLine("tuple1 contains: item1:{0}", tuple1.Item1);
var tuple2 = Tuple.Create("Item1", 12);
Console.WriteLine("tuple2 contains: item1:{0}, item2:{1}",
tuple2.Item1, tuple2.Item2);
var tuple3 = Tuple.Create(new DateTime(2010, 5, 6), "Item2", 20);
Console.WriteLine("tuple3 contains: item1:{0}, item2:{1}, item3:{2}",
tuple3.Item1, tuple3.Item2, tuple3.Item3);
}
public static void Tuple8()
{
var tup =
new Tuple<int, int, int, int, int, int, int, Tuple<int, int>>
(1, 2, 3, 4, 5, 6, 7, new Tuple<int, int>(8, 9));
Console.WriteLine("tup.Rest Item1: {0}, Item2: {1}",
tup.Rest.Item1,tup.Rest.Item2);
}
#endregion Methods
}
}
using System;
namespace TupleTest
{
class Program
{
static void Main()
{
var data = TupleCS4.GetFNameLName("Vahid, Nasiri");
Console.WriteLine("Data Item1:{0} & Item2:{1}",
data.Item1, data.Item2);
TupleCS4.PrintTuples();
TupleCS4.PrintSelectedTuple();
TupleCS4.Tuple8();
Console.WriteLine("Press a key...");
Console.ReadKey();
}
}
}
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public string FullName { get { return FirstName + " " + LastName; } } }
public string FullName { get { return FirstName + " " + LastName; } }
{ get { return your expression; } }
=> your expression;
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public string FullName => FirstName + " " + LastName; }
public string this[int number] { get { if (number >= 0 && number < _values.Length) { return _values[number]; } return "Error"; } }
public string this[int number] => (number >= 0 && number < _values.Length) ? _values[number] : "Error";
public override string ToString() { return FirstName; }
public override string ToString() => FirstName;
public int DoubleTheValue(int someValue) => someValue * 2;
public override string ToString() { if (MiddleName != null) { return FirstName + " " + MiddleName + " " + LastName; } else { return FirstName + " " + LastName; } }
public override string ToString() => (MiddleName != null) ? FirstName + " " + MiddleName + " " + LastName : FirstName + " " + LastName;
public IEnumerable<int> SmallNumbers() { for (int i = 0; i < 10; i++) yield return i; }
public IEnumerable<int> SmallNumbers() => from n in Enumerable.Range(0, 10) select n;
public IEnumerable<int> SmallNumbers() => Enumerable.Range(0, 10).Select(n => n);
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public Person() { this.FirstName = "Sirwan"; this.LastName = "Afifi"; } }
public string FirstName { get; set; } = "Sirwan"; public string LastName { get; set; } = "Afifi";
برای پراپرتیها:
public static IEnumerable<Claim> ParseClaimsFromJwt(string jwt) { var claims = new List<Claim>(); var payload = jwt.Split('.')[1]; var jsonBytes = ParseBase64WithoutPadding(payload); var keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, object>>(jsonBytes); claims.AddRange(keyValuePairs.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString()))); ExtractRolesFromJwt(claims, keyValuePairs); return claims; }
private static void ExtractRolesFromJwt(List<Claim> claims, Dictionary<string, object> keyValuePairs) { keyValuePairs.TryGetValue(ClaimTypes.Role, out object roles); if (roles != null) { var parsedRoles = roles.ToString().Trim().TrimStart('[').TrimEnd(']').Split(','); if (parsedRoles.Length > 1) { claims.AddRange(parsedRoles.Select(parsedRole => new Claim(ClaimTypes.Role, parsedRole.Trim('"')))); } else { claims.Add(new Claim(ClaimTypes.Role, parsedRoles[0])); } keyValuePairs.Remove(ClaimTypes.Role); } }
<AuthorizeView> <Authorized> <a href="Identity/Account/Logout">Logout</a> </Authorized> <NotAuthorized> <a href="Identity/Account/Register">Register</a> <a href="Identity/Account/Login">Login</a> </NotAuthorized> </AuthorizeView>
InvalidOperationException: Authorization requires a cascading parameter of type Task<AuthenticationState>. Consider using CascadingAuthenticationState to supply this. Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.OnParametersSetAsync()
<CascadingAuthenticationState> <Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true"> <Found Context="routeData"> <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> </Found> <NotFound> <LayoutView Layout="@typeof(MainLayout)"> <p>Sorry, there's nothing at this address.</p> </LayoutView> </NotFound> </Router> </CascadingAuthenticationState>
@page @using Microsoft.AspNetCore.Identity @inject SignInManager<IdentityUser> SignInManager @functions { public async Task<IActionResult> OnGet() { if (SignInManager.IsSignedIn(User)) { <p>You have successfully logged out of the application.</p> await SignInManager.SignOutAsync(); } return Redirect("~/"); } }
<AuthorizeView> <Authorized> Hello, @context.User.Identity.Name <a href="Identity/Account/Logout">Logout</a> </Authorized>
@attribute [Authorize]
<CascadingAuthenticationState> <Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true"> <Found Context="routeData"> @*<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />*@ <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"> <NotAuthorized> <p>Sorry, you do not have access to this page</p> </NotAuthorized> </AuthorizeRouteView> </Found> <NotFound> <LayoutView Layout="@typeof(MainLayout)"> <p>Sorry, there's nothing at this address.</p> </LayoutView> </NotFound> </Router> </CascadingAuthenticationState>
C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.Data.dll
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="systemData:defaultProvider" value="System.Data.SqlClient" />
</appSettings>
<connectionStrings>
<add name="Northwind"
connectionString="Data Source=(local);Integrated Security = true;Initial Catalog=Northwind"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
using System;
using WebMatrix.Data;
namespace TestMicrosoftDataLibrary
{
class Program
{
static void Main(string[] args)
{
getProducts();
Console.Read();
Console.WriteLine("Press a key ...");
}
private static void getProducts()
{
using (var db = Database.Open("Northwind"))
{
foreach (var product in db.Query("select * from products where UnitsInStock < @0", 20))
{
Console.WriteLine(product.ProductName + " " + product.UnitsInStock);
}
}
}
}
}
private static void getCustomerFax()
{
using (var db = Database.Open("Northwind"))
{
var product = db.Query("SELECT * FROM [Customers] WHERE City=@0", "Paris").FirstOrDefault();
if (product != null)
Console.WriteLine(product.Fax);
else
Console.WriteLine("not found.");
}
}
private static void ExecQuery()
{
using (var db = Database.Open("Northwind"))
{
int affectedRecords = db.Execute("UPDATE [Customers] SET fax = fax + '*' WHERE City = @0", "Paris");
Console.WriteLine("Affected records: {0}", affectedRecords);
}
}
private static void ExecSPShowResult()
{
using (var db = Database.Open("Northwind"))
{
var customer = db.Query("exec CustOrderHist @0", "ALFKI").FirstOrDefault();
if (customer != null)
{
Console.WriteLine(customer.ProductName);
}
}
}
private static void useFuncs()
{
using (var db = Database.Open("Northwind"))
{
var query = db.Query("SELECT dbo.FN_GET_CATEGORY_TREE(@0) as Rec1", 3);
foreach(var tree in query)
{
Console.WriteLine(tree.Rec1);
}
}
}
[Authorize] public class ChatHub : Hub { //... }
public class User { public int Id { set; get; } public string Name { get; set; } // سایر خواص کاربر public HashSet<string> ConnectionIds { get; set; } }
using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNet.SignalR; namespace SignalR05.Common { public class User { public int Id { set; get; } public string Name { get; set; } // سایر خواص کاربر public HashSet<string> ConnectionIds { get; set; } } public class ChatHubHub : Hub { private static readonly ConcurrentDictionary<string, User> Users = new ConcurrentDictionary<string, User>(); public override Task OnConnected() { connect(); return base.OnConnected(); } private void connect() { var userName = Context.User.Identity.Name; var connectionId = Context.ConnectionId; var user = Users.GetOrAdd(userName, _ => new User { Name = userName, ConnectionIds = new HashSet<string>() }); lock (user.ConnectionIds) { user.ConnectionIds.Add(connectionId); } } public override Task OnReconnected() { connect(); return base.OnReconnected(); } public override Task OnDisconnected() { var userName = Context.User.Identity.Name; var connectionId = Context.ConnectionId; User user; Users.TryGetValue(userName, out user); if (user != null) { lock (user.ConnectionIds) { user.ConnectionIds.RemoveWhere(cid => cid.Equals(connectionId)); if (!user.ConnectionIds.Any()) { User removedUser; Users.TryRemove(userName, out removedUser); ///Clients.Others.userDisconnected(userName); } } } return base.OnDisconnected(); } } }
Clients.AllExcept(user.ConnectionIds.ToArray()).userConnected(userName);