[cs] /language 又はビルドペインの詳細設定中にある言語バージョンに関して注意すべきforeachの挙動

このエントリは、2012/08/31現在に、実際に動かした結果に関する考察で有り、それ以上の検証は行ってないのでその点ご了承の程を。 どー言うことなのか VS2010迄は*1、λ内でforeachの要素をキャプチャする際、以下のようなサンプルを書いた場合、直感的では…

VisualStudio 2012にCodeContractsを導入する方法

VS

よーやく導入したは良いけど、結構どころで無く表題に詰まった。 コード分析≠Code Contracts エディション間の比較とか見てて、これを完全に勘違いしていたのがそもそもの原因。 あれは、コーディング規約とかの分析でCodeCopっぽいものだった。*1なので、あ…

delegateに代入された特定条件を満たしたラムダに関する一考察。

C#

ある方に相談したら、何となくわかってきたので、後でまた忘れたときのために。 で、満たすべき条件とは 閉包*1を使ってない と言う点、この条件が意味するところは、ラムダ式をStatic methodとしてコンパイル可能であるという点。逆に、閉包を使ってないの…

反変性と共変性

ここ数日、こいつで引っかかったけど、ようやく理解できたので備忘録。 コトの発端 こんなコードを書いていた。 interface ISample<in T> { void InvokeAction(Action<T> action); } そしたら、コンパイラに怒られた。 無効な分散: 型パラメーター 'T' は、'ConsoleAp</t></in>…

ILレベルでのデバッグ方法

IL

そうそう使わないけど、逆アセンブラとの兼ね合いで欲しくなることもあるので、備忘録的に。。。やり方は、難しくは無いけど若干面倒。仕込み方は以下の通り。 VisualStudio コマンドプロンプトを起動する Current directoryをコンパイルの成果物があるDirec…

ホントに、tail.は遅いのか?

IL C#

前回、前々回とF#や、C#、果てはILまで追っかけつつ検証してきた、tail.なワケですが、tail.有りと無しで果たしてどれほどの差があるのか? んでもって、条件により結果は変わってくるのか?てーコトを検証してみた。 ただ、C#では例え末尾再帰に合致したと…

tail.の復活

F# IL

昨日のエントリで、いらない子扱いされてしまって、枕に涙を塗らしていた*1tail.プレフィクス。F♯のコンパイラオプションでは明示しなければ使ったもらえず、以下のようなコードの場合でも、スタックフレームを1個除去できるかどうかだけで、ほぼあんたの居…

tail.プレフィクスがいらない子扱いされている件

C# F# IL

C♯というか、.NETのExpressionで末尾最適化がかかった形のモノが出来ないかどうか調べていて詰まったので*1F♯の末尾再帰ってコンパイルの時どうなってるのか調べてみたら表題の通りで。最も今回の例はとても単純なサンプルとなっているので、条件によっては…

Implementation of Enumerable.Cast

C#

中身見たら、えらく感動したので、備忘録的に。 何が凄いか 例外の吐き方がまず秀逸。無駄なコト一切してない。また、二段構えにしてるのも秀逸。 実装 public static IEnumerable<TResult> MyCast<TResult>(this IEnumerable source) { IEnumerable<TResult> enumerable = source as IE</tresult></tresult></tresult>…

 ExpressionTree内で動的にメンバプロパティ/フィールドを呼び出す方法

前回は、戻り値無しのMemberMethodの動的呼び出しをExpressionTreeの中でしようとしたとき、どーすれば良いのか?がテーマでした。 で、今回は、じゃあProperty/Fieldを呼び出すにゃどーすれば良いのか?がお題目。 dynamicで書いてみた場合 dynamicで今日の…

 ExpressionTree内で動的にメンバメソッドを呼び出す方法

通常のλを使った場合、以下のようなコードはコンパイルエラーになる。 Expression<Action<dynamic, int>> expr = (target, arg) => target.Call(arg); こんな風に書くと以下のようなコンパイラエラーが発生してそもそもコンパイルすらしてくれない。 式ツリーは、動的な操作を含む</action<dynamic,>…

ExpressionTreeとClojure

コトの始まり ふつーのDelegateでClojureが実現可能なのは、知ってたし、中でどーなってるのか大体理解してたけど、ExpressionTreeの場合、そもそも出来るのか?出来たとして、どーなるのか?て部分が気になったので何となく調べてみた。 使ったサンプルコー…

外部キー制約その2

てーことで、前回id:NetSeed:20110421はForeignKeyAttributeを使って、リレーションシップの作成をしてみました。 で、今回は、これをちょいと手直ししていきたいと思います。 前回の問題点 前回の方法では、若干冗長な"ManufacturerId"がプロパティとして定…

基本的な外部キー制約を付けてみる

今回は、属性を使う形でので外部キー制約と、そのNavigationあたりを。 今回のモデル 図で示すと以下みたいな感じになる。 こいつのテーブルスキーマは以下の通り。 --ManufacturersTable CREATE TABLE [Manufacturers] ( [Id] int NOT NULL IDENTITY (1,1) …

継承関係の取り扱いとテーブルスキーマの分離とか

基本的なコト 調べてみると、EFは継承関係にあったとしても、何も無かったかのようにこいつらを受け入れてしまうコトがわかった。 例えば、以下のようなサンプルがあったとして public class SampleBase { [Key] [DatabaseGenerated(System.ComponentModel.D…

EnumとTimeSpanを何とかしてみる

昨日は、ce4.0 と、CLRの型の相関を検証してきたわけですが、使えなかったTimeSpanとサポートしてないと明示されてるEnumを何とか出来ないかってのが今回のお題。今のところ、考えられる方法は2つあって、どちららも、メリットとデメリットがある。今回、使…

[EntityFramework] [SQL ce 4.0] POCOによる、型の相関関係

と言うコトで、前回に続き、Entity Framework+SQL Server Compact4.0周りで。 POCOから、コードファーストで、いきなりテーブルを作成出来ちゃうってのが昨日のお題でしたが、今回は、マップ先がどーなってるのかていうのがテーマ。単純なモノは以下の通り。…

EntityFramework4.1とSQL Server Compact 4.0でCodeFirstことはじめ

id:okazukiさんの、id:okazuki:20110320:1300628620 この日記を見て、目から鱗だったので、早速やってみようと思い色々いじった結果をメモ。基本的に今まで、組み込みのDB歯科使って無くて、対象がSQLiteをSystem.Data.SQLiteで動かしていたので、ちょこっと…

いまさら、WCFで遊んでみる

だいぶ前に買って、ほったらかしていたエッセンシャルWCF:Windows Communication Foundation (Programmer’s Selection―Microsoft .net Development Series)を今更ながらに読み始めて、WCFでちょこちょこ遊んでみた。 個人的には、ローカルコンピュータ通信*1…

VBAからC#へ

仕事関係で、ExcelやらのVBAマクロをちょいちょい書いていたけど、どーにもこーにも以下のような不満があった。 とても使いやすいとは言えないIDE*1 VB6ベースの言語体系 ソース管理がとても厄介*2 後は個人的に、C♯erなので、文末に;打って怒られたり、変…

Reactive Extentionことはじめ

C# Rx

最近、Twitterでよく見かけるRxてば何なのか?と気になって少し調べてみた。 MSDN見てみたり、id:okazukiさんや、neueccさんのblogを見てみたりしながら、今のところの理解を何となくまとめてみようかと。 ただ、自分の中でもまだまだまとまってないので、散…

Genericsの中のStaticフィールドに関するコト

C#

わかってみれば、当たり前だけど、ちと疑問に思って調べたコトを備忘録的に。 まずは、以下のようなコードがあったとして、 public class Hoge<T> { public static int Value = 0; } class MainEntry { static void Main(string[] args) { Hoge<Type>.Value = 200; Ho</type></t>…

 質問に答えてみる

C#

Twitterを見ていたら、matarilloさんのblogに、C#に関する質問のエントリがあったので、自分なりの答えを書いてみたり。 ==演算子のオーバーロードを実装してEqualsメソッドと同じ処理を実行するようにしてもよい場合はどのような時か? すぐ思いつくのは、…

Binding,MemberBinding,MemberInit

MSDNの解説がいまいち理解できなかったので、自分なりにまとめてみた。 とどのつまり、下のようなコードをExpressionTreeで表現する方法といえるんじゃ無かろうかと思う。 public static Inner InnerImpl() { return new Inner() { Ival = 10 }; } public static…

初期化子に関する一考察

C# IL

ClosureのIL眺めてたとき、ちょっと気づいた。詰まることはないと思うし、動作結果が一致してるけど、コンパイラの生成するILが不一致なのでとりあえずまとめておこうかと。 今回使ったサンプルクラス public struct sampleStr { public int Val { get; set; } } …

Expression.Addに関することなど

直感的でないことがいくつかあったので、備忘録的に。 お約束 Expression.Add(Expression left,Expression right)を構築すると、NodeTypeがAddになる。 Expressionに二項演算子+を実装したλを食わせても結果は一致する。 普通はこのBinaryExpression.Methodの実装…

GCHandleの振る舞いに関するコトなど

Summary GCHandleの挙動が非直感的な部分があるので、後日はまらないためのメモ。 Pinned指定できるもの、そして出来ないもの Pinned指定できるものはある程度限られている。 以下の型以外はPinnedは出来ない。 但し、ランタイムでこけてくれるので、この辺ではまり…

コトの始まり

CallとInvokeのSematics的な差は理解できたんだけど、InvokeとQuoteがどー違うのか何が違うのか理解できなくて二日ほど詰まったw なので、後々また詰まったときのために覚え書きをかいとこうかと。ついでに、あんまり混同しようもないけど、Invoke扱うついでに比…

ということでどれくらい効率差が出てくるか?

自分ところの環境で、やって見た結果は、 通常のP/Invokeが0.082秒 リフレクションしつつの毎回呼び出しが1.05秒 デリゲート代入した呼び出しが0.075秒 DLLの動的読み込みしたのが0.10秒 と、概ねこんな感じ。 かなりいい加減なテストなので、その辺割り引いてみ…

で、やってみた

動的にすることが主目的ではないけど、やらざるえないので、System.Refrection.Emit周りのお世話になって書いたのが以下 using System; using diag = System.Diagnostics; using emit = System.Reflection.Emit; using interop = System.Runtime.InteropServic…