R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

C#3.0の新機能を使ってみる(その1)

http://blogs.wankuma.com/rti/archive/2007/11/19/109158.aspx
お疲れ様でした

の続きです。

コードの処理としては、0~9の文字のみが格納された文字列で四則演算を行うというものです。
但し、計算できるのは自然数のみで、エラー時には常にゼロを返します。
四則演算は、筆算をシミュレートしています。


var v1 = "4567";
var v2 = "123";
string r1 = StringCalc.Add(v1, v2);
string r2 = StringCalc.Subtract(v1, v2);
string r3 = StringCalc.Multiplication(v1, v2);
string r4 = StringCalc.Division(v1, v2);


こんな感じの処理で、r1~4 には、それぞれ "4690", "4444", "561741", "37" が格納されれば良い訳です。

この処理は、次のように書くことができます。
実際に使用したサンプルコードは、オブジェクト指向プログラミングという前提もあったので、複数のクラスに分散して処理を書きました。
しかし、実際には静的なメソッドにする方がわかりやすそうなので、以後はそうした前提で行こうかと思います。

筆算をシミュレートするので、確実に使うであろう処理は、指定された桁の数値を取得するという処理です。
例えば、"4567" という文字列の 2 桁目は 6 という数値であることを容易に取得できると全体的に便利です。

そこで、C#3.0 の新機能である

拡張メソッド

を使って以下のようなコードを書きます。


static class Extensions {
  public static decimal ToDecimal(this char c) {
    var r = 0m;
    if (decimal.TryParse(c.ToString(), out r)) return r;
    throw new ArgumentException();
  }
  public static decimal GetOneDigit(this string value, int digitIndex) {
    if (digitIndex < 0 || digitIndex > value.Length - 1) return 0m;
    return value[value.Length - (digitIndex + 1)].ToDecimal();
  }
}


これによって、同一の名前空間内に置いて、"4567".GetOneDegit(1) とすれば、 6 という数値が decimal 型で取得できるようになります。

(つづく)

投稿日時 : 2007年11月20日 14:57

Feedback

# re: C#3.0の新機能を使ってみる(その1) 2007/11/21 9:56 IIJIMAS

ユーティリティクラスに書いた静的メソッドを使用することに対する張メソッドを使用することのメリットってなんでしょうか。
正直、大差ないと思っているのですが…

# re: C#3.0の新機能を使ってみる(その1) 2007/11/21 9:57 IIJIMAS

すいません、脱字。。。
×張メソッド
○拡張メソッド

# C#3.0の新機能を使ってみる(その2) 2007/11/21 13:45 R.Tanaka.Ichiro's Blog

C#3.0の新機能を使ってみる(その2)

# C#3.0の新機能を使ってみる(その2) 2007/11/21 13:57 R.Tanaka.Ichiro's Blog

C#3.0の新機能を使ってみる(その2)

# re: C#3.0の新機能を使ってみる(その1) 2007/11/21 14:01 R・田中一郎

今回の例だと、文字列を数値としてみなしたい場合が多くなるので、

var s = "1234567890";
var d1 = s.GetOneDigit(3);
var d2 = s[0].ToDecimal();

と書くだけで、decimal 型の値が得られるなら、その方がすっきりする、程度のメリットじゃないかと。

それと新しいもの好きな僕をワクワクさせてくれるのもメリットw

# C#3.0の新機能を使ってみる(その3) 2007/11/28 12:10 R.Tanaka.Ichiro's Blog

C#3.0の新機能を使ってみる(その3)

# C#3.0の新機能を使ってみる(その4) 2007/11/28 18:02 R.Tanaka.Ichiro's Blog

C#3.0の新機能を使ってみる(その4)

タイトル
名前
Url
コメント