Thursday, December 30, 2010
Lambda expression common syntax-CSharp
There are multiple ways of expressing lambdas, depending on the exact scenario - some examples:
// simplest form; no types, no brackets
Func f1 = x => 2 * x;
// optional exlicit argument brackets
Func f2 = (x) => 2 * x;
// optional type specification when used with brackets
Func f3 = (int x) => 2 * x;
// multiple arguments require brackets (types optional)
Func f4 = (x, y) => x * y;
// multiple argument with explicit types
Func f5 = (int x, int y) => x * y;
The signature of the lambda must match the signature of the delegate used (whether it is explicit, like above, or implied by the context in things like .Select(cust => cust.Name)
You can use lambdas without arguments by using an empty expression list:
// no arguments
Func f0 = () => 12;
Ideally, the expression on the right hand side is exactly that; a single expression. The compiler can convert this to either a delegate or an Expression tree:
// expression tree
Expression> f6 = (x, y) => x * y;
However; you can also use statement blocks, but this is then only usable as a delegate:
// braces for a statement body
Func f7 = (x, y) => {
int z = x * y;
Console.WriteLine(z);
return z;
};
Note that even though the .NET 4.0 Expression trees support statement bodies, the C# 4.0 compiler doesn't do this for you, so you are still limited to simple Expression trees unless you do it "the hard way"; see my article on InfoQ for more information.
// simplest form; no types, no brackets
Func
// optional exlicit argument brackets
Func
// optional type specification when used with brackets
Func
// multiple arguments require brackets (types optional)
Func
// multiple argument with explicit types
Func
The signature of the lambda must match the signature of the delegate used (whether it is explicit, like above, or implied by the context in things like .Select(cust => cust.Name)
You can use lambdas without arguments by using an empty expression list:
// no arguments
Func
Ideally, the expression on the right hand side is exactly that; a single expression. The compiler can convert this to either a delegate or an Expression tree:
// expression tree
Expression
However; you can also use statement blocks, but this is then only usable as a delegate:
// braces for a statement body
Func
int z = x * y;
Console.WriteLine(z);
return z;
};
Note that even though the .NET 4.0 Expression trees support statement bodies, the C# 4.0 compiler doesn't do this for you, so you are still limited to simple Expression trees unless you do it "the hard way"; see my article on InfoQ for more information.
เขียนโดย
abcomp01
ที่
5:36 PM
0
ความคิดเห็น
Email ThisBlogThis!Share to XShare to FacebookShare to Pinterest
Calculate relative time
const int SECOND = 1;
const int MINUTE = 60 * SECOND;
const int HOUR = 60 * MINUTE;
const int DAY = 24 * HOUR;
const int MONTH = 30 * DAY;
if (delta < 0)
{
return "not yet";
}
if (delta < 1 * MINUTE)
{
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
}
if (delta < 2 * MINUTE)
{
return "a minute ago";
}
if (delta < 45 * MINUTE)
{
return ts.Minutes + " minutes ago";
}
if (delta < 90 * MINUTE)
{
return "an hour ago";
}
if (delta < 24 * HOUR)
{
return ts.Hours + " hours ago";
}
if (delta < 48 * HOUR)
{
return "yesterday";
}
if (delta < 30 * DAY)
{
return ts.Days + " days ago";
}
if (delta < 12 * MONTH)
{
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return months <= 1 ? "one month ago" : months + " months ago";
}
else
{
int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return years <= 1 ? "one year ago" : years + " years ago";
}
* 2 hours ago
* 3 days ago
* a month ago
เขียนโดย
abcomp01
ที่
5:35 PM
0
ความคิดเห็น
Email ThisBlogThis!Share to XShare to FacebookShare to Pinterest
Subscribe to:
Posts (Atom)