C#

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

C#

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

反変性と共変性

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

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

IL C#

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

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"がプロパティとして定…

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は出来ない。 但し、ランタイムでこけてくれるので、この辺ではまり…

 SqlCommandとSCOPE_IDENTITY()

かなりはまりこんだので、メモ。以下みたいなコードを書いた場合、SCOPE_IDENTITY()はDbNullを返してしまう。 以下前提。 HogeというTableにINSERTする。 SqlCommandはcmdとして、どこかで定義済み。 Parameterもどこかで定義済み。 DbNullが返る例 cmd.CommandText =…

で、考えてみた

C#

なら、汎用的な部分括りだして、実行処理用のフレームワークっぽい何か作れないか?と思ったわけで。 そんな感じで作ってみたら、一応何となくできあがったので、備忘録的にメモ。 コンセプト こんな風に書けたら、便利よねってコトで。。。 処理定義部分 //処理する際…

コマンドライン処理のめんどくささ

C#

ドトネトだと、実行時の引数はstring[]で貰ってこれるわけですが、この処理が意外と面倒。個人的に何が面倒かというと、 その文字列*1がパラメータなのか、スイッチなのか判別しなきゃだめ //こんな感じで、argsに入ってくる。 //Input: piyo.exe /i hoge.txt /o pi…

つーわけで

年を越しちゃったり、キーボード*1がご臨終を迎えたり*2、新しいキーボード買ってみたり*3と色々ありましたが、去年、ここらへんで言ってたチェッカが実験レベルで、できあがりました。以下は作ってみた雑感。 どんな感じに作ったかというと、 HybridChekcer…

なんとなーくなのですが

ここ最近いじってるC++のTemplateとC#のGenericの違いが違和感になってるのだなというのが、わかってきた。 TemplateとGeneric - 時計屋の雑記帳である程度は書いてるんですが、主に制約の条件からもう少し二つを考察してみます。 違和感の大元 boostのConce…

Template再び

昨日の訂正をちょっと しておかなければならないことがあり、、、あるリンク元のコメントにてyieldに対するコメントがあったんですが、IEnumerator.Next()でしか使わないという、誤った認識の元にあのような脚注を書いてしまいました。 orz 上記のような場合…

TemplateとGeneric

C++のTemplateをいじってみて、思想と言うかコンセプトに結構差があると思ったのでメモ。 そもそも論でC++のTemplateってば 多分、defineマクロをその祖としてる気がする。classがstructを祖として、simula風の味付けを加えたモノであるように。だから、コン…

ガーベジコレクタの憂鬱*1

C#

C++ばっかりいじってて、ちょいとストレスがたまり気味なので、自分のおうち*1で遊ぶついでに、ガベージコレクタの厄介な問題をまとめてみようかと思い。。。 簡単にいかないモノを簡単に 〜起〜 説明してみる。 実際、ガベージコレクタが内部で何をしているのかを説…

いあ混乱する類のモンじゃないんだけど

なんか、割と言語間の考え方の差というか思想の差が出ていておもしろいと思ったので一応メモ。 とりあえずリストなぞを... 言語 どっから考え方を借りてきたか 区間 アクセスした要素の変更の可否 リバースできるか ランダムアクセスできるか メンバアクセスの…

Propertyの有無

ご注意 当人の言語遍歴が、VBA(Excel)->VB6->VB.Net->C#1.0->C#1.1->C#2.0->C#3.5*1 と、Propertyがあって当然の世界にずっと生きてきたので、その辺割り引いてみて下さいませ。また、あくまで、以下はあたしの考えであって、スタイルは人それぞれだと思ってます。。。…

で、そとのまとめ(その1)

3種類の表現方法があれば、戻り値も色々とかけるのは道理なワケで、上のように書き方が1種類に定まらない上に、戻りの型によって戻ってきたオブジェクトの意味も違って来るのが問題になる。以下にざくりとまとめてみる。*1このまとめに使うサンプルコード #includ…