C#

.net、コードの動的実行

C#

public static Assembly Compile(string src) { var snip = new CodeSnippetCompileUnit(src); var codedom_option=new Dictionary<string, string>(); codedom_option.Add("CompilerVersion", "v3.5"); using (var provider = new Microsoft.CSharp.CSharpCodeProvider(code</string,>…

言語内DSLでHTMLをスマートに記述する

C#

昨日のつづき。 演算子オーバロードかわいいかわいい!と言ってるうちにこんなのができた。 string html=HtmlBuilder.Begin(t=> t.html/( +t.head/( +t.title["my home page"] +t.meta("description","myhomepage")) +t.body/( +t.h1["WELCOME!!!"] +t.ul/t.…

C#、言語内DSLでHTML構築、の試案

C#

生成ターゲット: <html> <head><title>hoge</title></head> <body> <h1>hoge</h1> <p><strong>hoge</strong></p> <p class="hoge" id="the_text">this is the text</p> <ul> <li>item1</li> <li>item2</li> <li>item3</li> </ul> </body> </html> var list=new[]{"item1","item2","item3"}; //plan a HtmlBuilder.Begin(s=>{ s.htm…

拡張メソッドでNUnitを快適にする

C#

public static class Extention { public static void should_be<T>(this T th,T expected) {Assert.AreEqual(th,expected);} } で、 //before Assert.AreEqual(obj.DoSomething(),"result"); Assert.That(obj.DoSomething(),Is.EqualTo("result")); //2.4の新</t>…

アスペクトほしいよー、とかなんとか。

C#

ことの発端。 TextWriter writer=new SomeTextWriter("hogehoge"); tw.Write( Something() ); tw.Write( AnotherSomething() ); なんてコードがあって。 デバッグのために、Writeされた内容を表示したくなったとしよう(というか、したんですよ)。 string con…

C#でWSSE認証する

参照:はてなフォトライフAtomAPIとは - はてなキーワードサービスによってnonce/digestをbase64エンコードしたりしなかったりするらしい。はてなのはする。 準備する情報 string username="hogehoge"; string password="pass"; DateTime created=DateTime.No…

ActiveRecord.netを作ってみたよ

――まあタイトルは釣りで、「作りかけてみたよ」ってなもんですがね。.net2.0のジェネリクスとリフレクションを駆使してRuby on RailsのActiveRecord風にORマッピングするというもくろみ。 元ネタは生産性を向上させるメタオブジェクト技術 - 分裂勘違い君劇…

定義した順にメンバをとりだすことはできないんだろうか

namespace Sandbox { class Hoge { public int mem1; public char mem2 { get { return 'a'; } } public void mem3() { } public string mem4; public double mem5(int i) { return 0.0; } public int mem6 { get { return 0; } set { } } } class Program {…

XmlSerializerでTimeSpanがシリアライズできないのは嫌がらせか何かですか?

C#

http://friends.newtelligence.net/clemensv/PermaLink,guid,46715ffd-2470-4396-a63c-f037ecd2fa0a.aspx というわけで対処としてはTimeSpanなパブリックメンバにXmlIgnore属性をつけて、あらためてstringなメンバをパブリックで追加と。ああ嫌らしい。

CodeDOMにおいて、static externなメソッド(P/Invoke用の)を定義する方法はないのか

The Old .NET Questions Forum - Another CodeDom Questionによると、ないようだ。FUCK. CodeSnippetTypeMemberを使えばどうにかなる気がする。

楽にunmanaged dllをダイナミックローディングしたい

http://www.codeproject.com/csharp/dynamicinvokedll.asp ダイナミックローディングにはこんな方法があるよ、と。ここから妄想。たとえば interface IHoge { void Hage([MarshalAs(...)]string str); int Fuga(int,int); }なんてインタフェースだけ定義して…

カスタム属性を関数の戻り値に適用する方法

c#

これ以外と知られてないと思いますよ!というか使う機会がほとんどないし。 class Hoge { [SomeAttr] //SomeAttrはHogehogeメソッドに適用される。では、メソッドの戻り値(string)に属性を適用するには? string Hogehoge() {} }MSDN:属性の対象 (C#) clas…

nimpl

C# VS

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>nimpl</Title> <Shortcut>nimpl</Shortcut> <Description>throw NotImplementedException</Description> <Author>gnarl</Author> </header></codesnippet></codesnippets>

genericは結構エロイ

C#

src: class A<T> where T : A<T> { static A() { Console.WriteLine("init:" + typeof(T).Name); } } class AA : A<AA> { } class BB : A<BB> { } class CC : A<Program> { } //err! class Program { static void Main(string[] args) { AA a = new AA(); BB b = new BB(); } } disp</program></bb></aa></t></t>…

調子に乗ってS式評価機を

もはやantlrと何の関係もない……!

ANTLRの練習としてS式構築機を

まずデータ構造を定義してだな(割愛)、あとはパーサを改造して、

ANTLRの練習としてS式パーサをつくってみる

試行錯誤した結果grammerはこんなふうになった。 options { language = "CSharp"; namespace = "Parser"; // encapsulate code in this namespace } class SExprParser extends Parser; options { k = 2; } sexpr : atom | list | QUOTE sexpr ; list : OPAR…

Visual studioでANTLRを使用した開発を行なうためのおぼえがき

すっきりした方法がみつからないので、とりあえずNANTをつかって自動化している。 //exec_antlr.build //default.build このふたつをプロジェクトdirにいれておいて、ビルドイベントで cd $(ProjectDir) nant を実行。生成された./generated内のファイルは手…

ANTLRメモ

ドキュメントはここ。