C#

Scala すごい。C# は残念。

今日会社で、 using System; class Foo {} class Bar {} class Hoge { internal static Foo M(Func<int, int> f) { return null; } internal static Bar M(Func<string, string> f) { return null; } } class Piyo { internal static void A(Foo f) { Console.WriteLine("Foo"); } inte</string,></int,>…

Scala の match と XML リテラルをまねる

C#

Scala では次のようなことが可能です。 def proc(node: Node) { node match { case <hoge>{value}</hoge> => println(value) } } proc(<hoge>100</hoge>) // => 100 これを C# で真似てみました。 Scala では入れ子など色々とできるのですが、そこまでは対応できていません。 使う側は…

TestCase 属性などによるテストコードのリファクタリング

昨日のわんくまの昼休みに TDD 道場があったんですが、テストコードのリファクタリングについて賛否あったのでちょっと自分の考えをまとめておきます。 それに加え、C# と NUnit でどのようにテストコードをリファクタリングできるか、というのも紹介します…

.NET のクラスライブラリ設計

.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン (Microsoft.net Development Series)作者: Krzysztof Cwalina,Bard Abrams,藤原雄介出版社/メーカー: 日経BPソフトプレス発売日: 2009/12/24メディア: 大型本購入: 9人 ク…

アサーションのメッセージ用文字列をいい感じに組み立てる

C#

アサーションに引っかかったときに出すメッセージの構築って面倒ですよね。 Java はアサーションが文法に組み込まれているくせに、アサーションの評価に使った式を表示してくれもしないという・・・ でも C# は文法にさえ組み込まれていないのでもっとアレ・…

TDD Boot Camp の参加報告とか読んで

TDD Boot Camp には行っていないんだけど、参加者のエントリを色々読んで触発されたので思っていることをちょこっと書いておきます。 日曜日は id:a-hisame に無理言って色々と聞いた*1しね! 以下引用が多くて微妙に長文。 アクセス修飾子 デモ:cobertura…

More Effective C#

More Effective C#作者: Bill Wagner,長尾高弘出版社/メーカー: 翔泳社発売日: 2009/12/01メディア: 大型本購入: 9人 クリック: 139回この商品を含むブログ (19件) を見るを読むに当たって、注意すべきかなー、と思ったところをだらだらと。 ICloneable は実…

List を文字列化

C#

List<Char>.ToString() とかC# 3.0 以降なら LINQ やら拡張メソッドやらで OK ですね。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication { class Program { static void Main(strin…

Log4Net のラッパーをつくる

C#

備忘録の意味も込めて。 やりたいことは、 Debug 系メソッドはリリースモードでは呼出しごと削除したい いちいち LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); って書くのだるいから省略したい の 2 つ。 Debug 系のメソッドをリリ…

自動プロパティに個別にアクセス修飾子を付ける

C#

自動プロパティに個別にアクセス修飾子を付けることができたことに、今日初めて気付いた。 これができると何が嬉しいかというと、例えばこんなプログラム・・・ public interface IOutputData { // Outputは外部からsetして欲しくないので // このインターフ…

NUnit 2.5 が便利すぎる

C#

NUnit 2.5 RC - ZOETROPEの日記これみてもらえればもうほとんど言うことって残ってないんですが・・・ 一応、ちょっと補足的な情報を。 TestCase 元エントリでは引数が 3 つとなってますけど、3 つ以上も可能でした。 [TestFixture] public class AttributeT…

パーシャルクラスの使い道の一例

C#

元ねた:パーシャルクラスの使い道 パーシャルクラスの使い道としては、大きめのユーティリティクラス (StringUtil とか!) のメソッドのグループごとに分割する、とかどうだろう。 StringUtil.cs public static partial class StringUtil {} StringUtil.Sub…

オブジェクト倶楽部、コーディング規約の会の「C# コーディング標準」の駄目なところ

C#

C# のコーディング規約としては、オブジェクト倶楽部のもの (PDF) が有名だけど・・・正直、これ使いたくない。 冒頭に「このドキュメントは Java コーディング標準(オブジェクト倶楽部バージョン)、VB.NET コーディング標準を C#用に変更したもの」なんて堂…

n times・・・

C#

いやまぁ遊びだけど。 ruby とかで、 3.times { puts 'Hello, world!' } ってやつ。 class Act { public delegate void ActDelegate(); ActDelegate act; public Act(ActDelegate act) { this.act = act; } public static ActDelegate operator *(Act a, int…

あずにゃん

C#

Nyan nyan = nakano as Nyan; Twitter / decimalbloat: Nyan nyan = nakano as Nyan; なんて素晴らしいコード!その発想はなかった! これなんてこのコードの足元にも及ばない>< 追記: As nyan = nakano as Sa; ・・・C# 最強じゃね?

C#・・・.NET っぽい本を積んでみた

内容はまた後で。 タイトルしかないものは「他にいい本があるか古いか興味の対象外」、それ以外はそれ以外です。 .NET 全般とかなんとか 実践!ソフトウェアアーキテクチャ ~VisualStudioとASP.NETによる業務システム開発方法~ (.NET TECHNOLOGY)作者: 尾島良…

今じゃすっかり C#er ?

C#

C++ と C# を比べて・その1 - かおるんダイアリー C++ と C# を比べて・その2 - かおるんダイアリー今じゃすっかり C#er になりつつある自分が反応しますよ、っと。 C# では型変換がめんどう? X( C# で byte 列とか弄ったことないのでパス>< C# は型の制…

Dictionary リテラルの夢は儚く散った・・・訂正。散ってはいなかった

C#

using System; using System.Collections.Generic; namespace Dict { class Dict { public delegate void KeyValue<K, V>(out K key, out V value); public static Dictionary<K, V> Create<K, V>(params KeyValue<K, V>[] kvs) { var result = new Dictionary<K, V>(); foreach (var kv in</k,></k,></k,></k,></k,>…

流れるようなインターフェイス書いてて思ったこと

流れるようなインターフェイス書いてて、「これメソッドのグルーピングに使えるんじゃね?」って思った。 例えば Visual Studio でも Eclipse でも、補完機能って平坦なリストなんだよね。 オーバーロードは一つにまとめてくれるけど、似たような名前のメソ…

流れるようなインターフェイス

C#

なんか単に this を返せばいいって思っている人も多いようけど、ただ this を返せばそれが使いやすいかって言われると、正直微妙。 例えば、 public static class StringUtil { public static SubstrInfo Substr(this string str) { return new SubstrInfo(s…

C# で強い typedef

C#

C#と諸々 強い typedef が欲しい弱い typedef (alias) に継承は使えないけど、強い typedef には継承が使えるというか、持ってこいだと言うことに今まで全く気付いていなかった・・・ T4 Template は存在自体知らなかったけど、かなり良さそうなので早速導入…

値渡しと参照渡し (と参照の値渡し)

値渡しと参照渡しは、分かってしまえば何も難しいところはないんだけど、分かるまでにちょっとした壁があるというかなんとうか・・・ てことでちょっとまとめておきますねー 値渡し (call-by-value) と参照渡し (call-by-reference) の違い 値渡しと参照渡し…

KeyValuePairリテラル

static な可変長引数のインデクサから更に妄想して、KeyValuePairリテラルとか考えてみた。 KeyValuePair<int, int> pair1 = 10:10; KeyValuePair<int, KeyValuePair<int, int>> pair2 = 10:20:30; さらに、 (int:int) pair1 = 10:10; (int:int:int) pair2 = 10:20:30; とか。 static な可変長引数</int,></int,>…

可変長引数のインデクサって何に使うんだろ・・・

class Program { int this[params int[] args] { get { return args[args.Length - 1]; } } static void main(string[] args) { Program p = new Program(); Console.WriteLine(p[0, 1, 2, 3]); // => 3 } } うーん、何に使えるだろ?例えばこんなの? publi…

Java やってる人が C# を使うとはまること

ここでは、Java SE 5.0 以降を知っている人が C# 2.0 を使うことになった場合を考える*1 *2。 あと、ライブラリについては触れないことにする*3。 命名規約 まず、命名規約が全然違う。Java ではメソッド名にキャメル形式*4を使うけど、C# では Pascal 形式*…

CellValueChanged で無限再帰に陥らないようにする

C#

DataGridView の CellValueChanged イベントの処理コード内でその DataGridView を弄っていたりすると、無限再帰になりかねないので、 private void grd_hoge_CellValueChanged(object sender, DataGridViewCellEventArgs e) { try { grd_hoge.CellValueChan…

as soon as possible

C#

(注)元のエントリの本題とは全く関係ないです*1 *2。 Cartesian pos1AsCart = pos1 as object as Cartesian; C#と諸々 インスタンスが属するクラスをあとから変更する操作を C# で これを見て、as演算子って何個でもつなげること出来るんだなー、と思った直…

括弧過多

C#

括弧を付け過ぎても悪いことはない、って風潮が自分の周りにはあるみたい。 int r = ((int)(((byte)(255)))); 分かりにくいから括弧の対応が分かりやすいように書き直してみる。 int r = ( (int) ( ( // これと (byte) (255) ) // この括弧は何? ) ); え?…

特定の値しか許さないんだったらintじゃなくてenum

C#

今日発見したこんなコード。 /// <summary> /// ほげほげを設定する /// </summary> /// <param name="hoge">ほげほげ</param> /// <param name="location">0:左、1:中央、2:右</param> public void SetHoge(string hoge, int location) { switch (location) { case 0: leftHoge = hoge; break; case 1: centerHoge = hoge; break; case 2: …

そういえば

C# アルゴリズム データ構造 Visual Basic アルゴリズム データ構造 C#もVBも、こういう本がない*1のは意外だなぁ。 *1:これはないといってもいいよね