[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 05/09 14:37 / Filesize : 4 KB / Number-of Response : 12
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとC#,C♯,C#(初心者用) Part29



1 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:56:35 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ

ふらっとC#,C♯,C#(初心者用) Part28
pc11.2ch.net/test/read.cgi/tech/1211688164/

2 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:58:25 ]
[プログラム板] C#, C♯, C#相談室 Part47
pc11.2ch.net/test/read.cgi/tech/1214038282/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
pc11.2ch.net/test/read.cgi/tech/1211453941/

Live2
pc11.2ch.net/test/read.cgi/tech/1203674757/

初心者のためのプログラミング言語ガイド Part9
pc11.2ch.net/test/read.cgi/tech/1210941509/

3 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:59:15 ]
参考サイト。まずはここで検索してから。
www.google.co.jp/
homepage3.nifty.com/midori_no_bike/CS/
www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
dobon.net/vb/dotnet/
jeanne.wankuma.com/tips/
www.labasp.net/CsharpNote/


4 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 23:09:47 ]
>>1


5 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 01:33:02 ]
>>1


6 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 02:20:41 ]
ジェネリックのwhere節で型パラメタをintやshortやlongなどの整数型に限って
それらの型同士の四則演算をするにはどうすればいいですか?

7 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 02:34:39 ]
無理
Expressionクラス使って無理矢理やれないこともないけど

8 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 02:52:11 ]
static T Add<T>(T a, T b) where T : struct {
var paramA = Expression.Parameter(typeof(T), "a");
var paramB = Expression.Parameter(typeof(T), "b");
var body = Expression.Add(paramA, paramB);
var lamdba = Expression.Lambda<Func<T, T, T>>(body, paramA, paramB).Compile();
return lamdba(a, b);
}
こんなかんじ
このまま使ったら毎回メソッド生成してとんでもなく遅いはずだからlamdbaはキャッシュしてね

9 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 04:47:19 ]
型パラメータの指定の方は、staticコンストラクタで

switch(typeof(T)) {
  case typeof(int):
  case typeof(short):
  case typeof(long):
    break;
  default:
    throw new Exception();
    // どうせ TypeInitializationException にされるが、
    // TypeParameterException とか作ってもいい
}

とかすると、where句で表現できない制限でも
インスタンスを生成/staticメンバを参照しようとした時点でエラーにできる

四則演算の方は、同じくstaticコンストラクタで>>8のデリゲートまでを生成して、

static T Add<T>(T a, T b) {
  return AddFunc(T, T); // AddFunc is Func<T, T, T>
}

とか

10 名前:9 mailto:sage [2008/07/23(水) 04:48:36 ]
あと、俺は前に全ての演算をラップするクラスを作ったりしたな

定義されていない演算は使おうとすると例外投げたり、
元の型と相互に暗黙の型変換できるようにしたりして

// a, b is T
Operand<T> _a = a;
Operand<T> _b = b;
T c = _a + _b;
T d = _a << 8;

というふうにジェネリックで使えるようなやつ



11 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:52:59 ]
なるほど
ありがとうございます






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<4KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef