C#
これはOne ASP.NET Advent Calendar 2012の18日目の記事です。 昨日は、karuakunさんでASP.NET 4 WebFormでモバイルサイトを作成する場合のスクリプト結合でした。 はじめに ASP.NET Web APIにはSelf-Hostと呼ばれる機能があります。IISがなくても動くという…
勉強会で話題になっておもしろかったので、実装してみました。 カリー化 4つの引数まで対応したFuncの拡張メソッド。 public static class FuncCurry { public static Func<T1, Func<T2, TResult>> Curry<T1, T2, TResult>(this Func<T1, T2, TResult> f) { return arg1 => arg2 => f.Invoke(arg1, arg2); } public st</t1,></t1,></t1,>…
部分適用というのは、簡単に言ってしまえば、関数の型を変換する方法の1つです。たとえば、Func を Func に変換するとか。部分適用という言葉を使わずとも、これはよく行われていることで、ラムダ式を使って実現されます。わかりやすいように、型を明示して…
非同期処理が得意になりたいなぁと思います、最近。プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)の27章にAPM(Asynchronous Programming Model)のいい例が載っていたので、勉強がてらF#のMailboxProcessorに書き換えてみました。 例のプログラム…
上の補足。C#でほぼ同じものを書くとこうなります。F#のオプション型を意識していないのが主な違いです。 using System; using System.Collections.Generic; using Soma.Core; namespace ConsoleApplication3 { public class Dialect : MsSqlDialect { publi…
なんとなくやってみました。元ネタ http://d.hatena.ne.jp/okazuki/20110611/1307759414 http://gushwell.ldblog.jp/archives/52163460.html C# LINQはワンライナーで書くより変数で受けるのが好みです。 var arr = new[] {"1", "one", "2", "two"}; var key…
Soma 0.7.0.0 で C#(やVB.NET)のサポートを強化しました。このエントリではその点について紹介します。まず、Soma.Core.Dbの全メソッドがオーバーライド可能です。ですので、ちょっとフックしてアプリに共通の機能を入れたりと便利に使えます。 たとえば、…
もうひとつ紹介。 QueryOnDemandメソッドは、SQLの実行を遅延し、さらにDbDataReaderを読みながら一件一件結果を返します。大量データを扱うときに便利です。たとえば、Employeeテーブルから全件取得する次のようなコードを見てみます。 var db = new Db(new…
なぜかこんなフォーマットを使っていました。デフォルトのままなのか自分で変えてこうしたのかは覚えていない。public static void Hoge() { var action = new Action(() => { Console.WriteLine("hoge"); Console.WriteLine("foo"); }); }でも、こうしたほ…
ステートレスなビジネスロジックが一覧データと件数を同時に返すとき 件数を一時的に保持してObjectDataSourceに渡せるようにビジネスロジックを一時的にラップしてあげるといいかもしれない。 GridViewPage.cs using System.Collections.Generic; using Sys…
知らなかったよ。自分で作った任意の型にクエリ式が使えるんですね。[TestClass] public class LinqTest{ [TestMethod] public void Test() { var source = new Wrapper<int>(100); var wrapper = from n in source where n > 50 select n; Assert.AreEqual(100, </int>…
Seq.collectやSelectManyが理解しづらいので簡単なコードで整理してみました。 F# [<Test>] let ``cartesian product`` () = let numbers = seq {for i in 1 .. 3 -> i} let results = numbers |> Seq.collect (fun n1 -> numbers |> Seq.map (fun n2 -> n1, n2)) </test>…
パターンマッチグというものを使うとVisitorパターン相当のことが簡単に書けるということを聞いて、関数型プログラミングに興味を持ち始めました。というわけで最近F#をさわったりしています。 で、パターンマッチというものがどういったものかわかってきた…
NonPublicって親クラスのメンバは対象にならないんですね。ドキュメントを読んでも、そうとはわからないですが。 [TestMethod] public void TestBindigFlags() { var type = typeof(Derived); var flags = BindingFlags.Instance | BindingFlags.Public | Bi…
ちょっとずつ作っているEntity Framework拡張のO/RマッパーSoma(http://soma.codeplex.com/)ですが、更新系SQLの生成をEntity Frameworkにまかせるのをやめました。マッピングの定義はedmxにあるのでパースして自前でSQLを組み立てることにしました。理由…
下の例の2行目のようにプロパティ名で任意のオブジェクトのプロパティに「簡単に」アクセスしたいと思いました。 var value1 = hoge.Aaa; var value2 = hoge["Aaa"]; Assert.AreEqual(value1, value2); 最初、dynamicを使えばすぐできるのかと思ったら無理で…
Essential .NET ― 共通言語ランタイムの本質を読んでいるんですが、リスト6-14の例が難しく(ややこしく)てうなってしまいました。 ちょっとだけ変更していますが、大体こんなです。実行結果がすぐにわかる人はすごいです。 class Program { static void Ma…
クローズ構築型はオープン構築型にアサインできない public class A<T> { } public class B : A<string> { } [TestMethod] public void Test() { Assert.IsFalse(typeof(A<>).IsAssignableFrom(typeof(B))); // Trueになると思いがちだけどFalse } ついついやってしまい</string></t>…
そういうルールだといわれるとそれまでなんですが、ジェネリクスなメソッドがオーバーロードされている場合、呼び出すメソッドを決定するルールが不便にかんじます。たとえば次のような3つのクラスがあるとします。ポイントは、BはAのサブクラスだけどCはち…
Silverlight 4, MEF and MVVM: MEFModules, Dynamic XAP Loading and Navigation Applicationsを参考に、XAPを動的にローディングしつつも画面遷移はNavigation Frameworkをつかって簡単に別XAPのページに移動する方法を試行錯誤してみました(リンク先の例…
MetadataType属性でメタデータ用のクラスを指定します。メタデータ用のクラスには、Requiredとかバリデーションの属性を指定します。 [MetadataType(typeof(EmployeeMetadata))] public class Employee { [Key] public int Id { get; set; } public string N…
http://weblogs.asp.net/fredriknormen/archive/2009/11/28/wcf-ria-services-and-a-guide-to-use-dto-presentation-model.aspx 上のサイトをみながら試行錯誤してみました。Entity Frameworkを使うにしても使わないにしてもDTOに変換してクライアント側(Si…
ジェネリクスの型パラメータなしのSystem.Actionを使おうとするとReshaperに怒られます。コンパイルは通っているのでReshaperの問題っぽい。 Silverlightのプロジェクトでなければ問題ないんですけどねー。
日本語版のVisual Studio 2010だとMicrosoft Silverlight 4 Tools for Visual Studio 2010 RCが対応していないので、Silverlight4を試すには英語版のVisual Studio 2010を使うのがいいみたいです。いったん日本語版入れたんですけど、あきらめてアンインスト…
O/RマッパーとしてEntity FrameworkやNHibernateがフィットするアプリは確かにあると思うのですが、そうは言っても多くのアプリやプロジェクトではSQLを中心としたDaoフレームワークのほうが適していると思っています。 そういうわけで、Domaをベースにして.…
上で示した挙動がいやな場合もあるかもしれません。 そのときは、IKernelの実装クラスを作成してそれを使います。具体的にはIKernelのHandleMissingBindingメソッドをオーバーライドしてfalseを返します。 public class MissingBindingDisabledKernel : Stan…
自動登録という機能があるわけではなく、Kernel(コンテナ)に問い合わせて存在しなかったらインスタンス化したりDIしてくれるようです。これは便利。 それと、IKernelのIntercept拡張メソッドを使うと条件に引っかかるメソッドにインターセプタが適用できま…
他のテストツールとの比較がありますね。 http://xunit.codeplex.com/wikipage?title=Comparisons&referringTitle=Home SetupとTearDownの代わりが、コンストラクタとIDisposable.Disposeというのはおもしろい。 あと気に入ったのは例外のテスト。期待する例…
NUnitの後継らしいです。 http://www.codeplex.com/xunit Ninjectで使っていたのでちょっと見てみました。たとえばこんな感じで使っています。 [Fact] public void ProviderReturnsConstantValue() { var sword = new Sword(); provider = new ConstantProvi…
usingしておきます。 using Ninject; using Ninject.Extensions.Interception; using Ninject.Extensions.Interception.Attributes; using Ninject.Extensions.Interception.Infrastructure.Language; using Ninject.Extensions.Interception.Request; イン…