C#/LINQ
をテンプレートにして作成
Search in
this wiki
and
or
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
Visual Studio 2008と共にリリースされた.NET Framework 3....
コード記述の自由度を上げること自体はいい。しかし、選択...
そう考えると、以下のような記述方法を、今後どのように規...
** LINQ [#w0b27910]
var query = from cust in customers
where cust.City == "Tokyo"
orderby cust.Name ascending
select new { Name = cust.Name, Phone = cust....
上記のクエリ式は、interface IEnumerable<T>に対する拡張...
var query = customers
.Where(cust => cust.City == "Tokyo")
.OrderBy(cust => cust.Name)
.Select(cust => new { Name = cust.Name, Phone...
こうして見ると、LINQのクエリ式には、.NET Framework 3.5...
*** 型推論 [#e83d6e4a]
var s = "Hello World!";
- 変数に格納される型をコンパイラが推測するらしい。
- なので、実行時に型を決定する遅延バインディングとは異な...
- 人の目でソースを追ったり、コード解析ツール等で、型がわ...
- コンパイル時にバグを検出できる確率が低下する。
- (Guideline)LINQ文以外では、なるべく利用しない。
*** オブジェクト初期化子 [#m74dbe04]
Customer cust = new Customer() { Name = "Taro" };
- インスタンス化とプロパティ値代入の2行に分解したコードと...
- 引数付きコンストラクタのように、必要な全てのプロパティ...
*** 匿名型 [#c6638926]
var product = new { Name = "ノート", Price = 100 };
- メソッドを持たず、getプロパティのみのimmutableクラス。
-- ただし、プロパティの型をDelegateにすれば、メソッドみた...
var obj = new {
Greet=(Func<string, string>)((name) => "Hell...
};
Console.WriteLine(obj.Greet("World!"));
- 型名はコンパイラが自動で決定するので、var型である必要が...
- [Serializeable]等の属性付与ができない。
*** 拡張メソッド [#xd386d44]
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
- 特殊な静的メソッドを定義することで、既存のクラスに新し...
-- (Guideline)特定のクラスを拡張するすべての拡張メソッド...
- 上の例だと、using ExtensionMethods; することで、この拡...
-- (Guideline)名前の衝突が起きる可能性を低くするため、拡...
- カプセル化の原則に違反するような拡張をされる危険がある。
*** ラムダ式 [#me67d096]
// define in class
delegate bool MyFunc(string str);
MyFunc func = str => str == "Tokyo"
Console.WriteLine(func("Osaka"))
- 単一の結果を返す無名のメソッドを定義する
-- 匿名メソッドの進化形と考えれば、使いどころもほぼ同じで...
終了行:
Visual Studio 2008と共にリリースされた.NET Framework 3....
コード記述の自由度を上げること自体はいい。しかし、選択...
そう考えると、以下のような記述方法を、今後どのように規...
** LINQ [#w0b27910]
var query = from cust in customers
where cust.City == "Tokyo"
orderby cust.Name ascending
select new { Name = cust.Name, Phone = cust....
上記のクエリ式は、interface IEnumerable<T>に対する拡張...
var query = customers
.Where(cust => cust.City == "Tokyo")
.OrderBy(cust => cust.Name)
.Select(cust => new { Name = cust.Name, Phone...
こうして見ると、LINQのクエリ式には、.NET Framework 3.5...
*** 型推論 [#e83d6e4a]
var s = "Hello World!";
- 変数に格納される型をコンパイラが推測するらしい。
- なので、実行時に型を決定する遅延バインディングとは異な...
- 人の目でソースを追ったり、コード解析ツール等で、型がわ...
- コンパイル時にバグを検出できる確率が低下する。
- (Guideline)LINQ文以外では、なるべく利用しない。
*** オブジェクト初期化子 [#m74dbe04]
Customer cust = new Customer() { Name = "Taro" };
- インスタンス化とプロパティ値代入の2行に分解したコードと...
- 引数付きコンストラクタのように、必要な全てのプロパティ...
*** 匿名型 [#c6638926]
var product = new { Name = "ノート", Price = 100 };
- メソッドを持たず、getプロパティのみのimmutableクラス。
-- ただし、プロパティの型をDelegateにすれば、メソッドみた...
var obj = new {
Greet=(Func<string, string>)((name) => "Hell...
};
Console.WriteLine(obj.Greet("World!"));
- 型名はコンパイラが自動で決定するので、var型である必要が...
- [Serializeable]等の属性付与ができない。
*** 拡張メソッド [#xd386d44]
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
- 特殊な静的メソッドを定義することで、既存のクラスに新し...
-- (Guideline)特定のクラスを拡張するすべての拡張メソッド...
- 上の例だと、using ExtensionMethods; することで、この拡...
-- (Guideline)名前の衝突が起きる可能性を低くするため、拡...
- カプセル化の原則に違反するような拡張をされる危険がある。
*** ラムダ式 [#me67d096]
// define in class
delegate bool MyFunc(string str);
MyFunc func = str => str == "Tokyo"
Console.WriteLine(func("Osaka"))
- 単一の結果を返す無名のメソッドを定義する
-- 匿名メソッドの進化形と考えれば、使いどころもほぼ同じで...
ページ名: