1 名前:デフォルトの名無しさん [2007/08/26(日) 12:42:25 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part41 pc11.2ch.net/test/read.cgi/tech/1184840053/ 過去スレは>>2-5 あたり。
400 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 15:04:40 ] interfaceでは大げさすぎる場合も多いし、例えばイベントハンドラを インタフェースとして実装した場合、同じWidgetを複数個持とうとするとに インタフェースが衝突する、といった問題が生じる。Javaではこれを解決 するのに一々ゴテゴテと無名クラスを記述する羽目になり、実に馬鹿馬鹿しい限りだ。 ラムダ式が無くとも、delegateであれば上記の問題は普通に解決することが 出来る。 まあ、処理を汎用化したり(例えば描画ルーチンに、PixelをPutする ルーチンだけdelegateとして与えられるようにすれば、汎用になる)、 テーブルジャンプっぽく使ったり(メニュー等のindexとdelegateの配列を 結びつけたりする)、意思決定と実行のタイミングが分かれている場合に、 意思決定→delegate変数に保存→delegateを用いて実行といったことをやったり (実行が何度も行われる際に、無駄な条件分岐を完全に取り除くことが出来る)、 色々と応用範囲は多い。
401 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 15:17:17 ] delegate使うとエディットコンティニューでやり直しになるのがデメリット
402 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:37:05 ] 久々にThreadPool.GetMaxThreads()を実行してみたらワーカースレッドが500、I/Oスレッドが1000になってた。 前はもっと少なかった気がするんだけど・・・なぜでしょうか?
403 名前:385 mailto:sage [2007/09/06(木) 19:32:29 ] なるほどーみなさんいろいろ使ってますね デリゲート道、精進します ありがとうございました
404 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:04:16 ] >402 前は少なすぎたせいでスレッドプールが一杯になって例外が起きるケースがあったのでので.NET2.0から事実上無制限といえる値に増やされた。 なにげに呼んだクラスが内部でスレッドプールを使っててスレッドプールの上限で例外吐かれたりしても対処しようがないじゃん。
405 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:10:45 ] ClassAのイベントにメソッドを紐付けしてるClassBがシリアル化可能じゃないと ClassAまでシリアル化できなくなっちゃうけど、これって何か回避方法ないかな? あと、デリゲートにインスタンスメソッド登録するということは、 デリゲートに参照を持たれる(つまりGCが働かない)こととやっぱり等価になるの?
406 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:20:37 ] 当たり前 っていうかイベント結びつけたままシリアライズしたいって いったいどんなときなの?
407 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:22:28 ] ああひょっとしてシリアライズさせない方法が分からないってことか? メンバにつける属性で制御できるよ
408 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:43:28 ] でもNonSerializedAttributeってイベントには付けられないと思うんですが。。
409 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:56:27 ] >>405 デリゲートを明示的に宣言してそのデリゲートにNonSerializedつければいいらしい。 ↓参照 www.thescripts.com/forum/thread245864.html
410 名前:409 mailto:sage [2007/09/06(木) 21:01:10 ] [field: NonSerialized]でもできるみたいだな こっちのほうがスマートか。
411 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:09:45 ] >>409-410 ありがと。 しかし、そんなマンマの回答よく短時間に見つけられるもんだね関心しちゃうよ
412 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:44:51 ] 部下にほしいね。 すみません師匠にほしいです。
413 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:56:13 ] このスレには結構、神クラスのスキルのひとがいるいよね。 どんな立場の人なのかきになるわ。マイクロソフト直々のサポート部隊が 書き込んでいるんじゃないかと思ってしまうくらいだ。
414 名前:デフォルトの名無しさん [2007/09/06(木) 21:59:52 ] やまだはぷろぐらむの天才だ。 きょうもすごいぷろぐらむをつくる。 int i = new int() あれ、なにかへんだぞ。 intはたしか・・・ Int16 やまだくんはまだ満足しない。 iというなまえはかぶるかもしれないからあんぜんじゃない! Int16 _USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER 完璧なソースコードの誕生だ!
415 名前:デフォルトの名無しさん [2007/09/06(木) 22:02:31 ] >>413 そのクラスの人間なんて見たときねーよ
416 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:02:47 ] すみません。どれが自作自演でしょうか?
417 名前:デフォルトの名無しさん [2007/09/06(木) 22:03:48 ] やまだだけどなんでもそうだんにのるよ!!
418 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:05:47 ] >>414 jが必要になったらどうする。
419 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:06:12 ] やまだくんはネームスペースをだな
420 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:06:28 ] 田中は山田のイヂワルな上司だ。 今日も嫌がらせを部下達にして楽しむ。 「iというなまえはかぶるかもしれないからあんぜんじゃない! 「Int16 _USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER 「完璧なソースコードの誕生だ! あれ、山田が何か楽しそうだぞ。 イヂワルしてやれ! 「山田君、このメソッドの名前は[_USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER]にしてくれ 会議で決まったのだ!
421 名前:デフォルトの名無しさん [2007/09/06(木) 22:06:31 ] >416 じえんはないけどえいえんはあるよ!
422 名前:デフォルトの名無しさん [2007/09/06(木) 22:12:35 ] たなかさんめそっどめいのせんすないからきらいだ! そうだ。こういうときは・・・おーばーろーどがあるじゃないか! やまだはそっとたなかのめそっど名のぷれふぃっくすに OVERROAD_ をつけたした。 これでなまえがかぶることはない。
423 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:15:09 ] スレが壊れだした
424 名前:デフォルトの名無しさん [2007/09/06(木) 22:15:21 ] >418 よくじつにまわすか、ぷれふぃっくすにSTATIC_とかつければかいけつだよ(^^)
425 名前:デフォルトの名無しさん [2007/09/06(木) 22:17:18 ] >423 すまない。ガチでこんなコードの修正依頼にイラついて書いてしまった。 後悔はしていない
426 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:19:11 ] マでやれ
427 名前:デフォルトの名無しさん [2007/09/06(木) 22:22:43 ] for(LOOPCOUNTER_[LOOPCOUNTER_1,LOOPCOUNTER_2]=58;END==TRUE;LOOPCOUNTER_1**) { } やまだすごくね?
428 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:23:33 ] 名前空間の無い言語はきついな
429 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:24:51 ] END==TRUEってなんぞ
430 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:25:40 ] >>428 どちらかというとセンスのないプロ…
431 名前:デフォルトの名無しさん [2007/09/06(木) 22:33:45 ] ちなみに言語はC#だぜW
432 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:35:04 ] ENDがTRUEの間ループをまわすの? 普通に発狂するわ
433 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:39:10 ] もっとやまだのコードがみたい
434 名前:デフォルトの名無しさん [2007/09/06(木) 22:39:56 ] ディフォルトTRUE スイッチFALSEとコメントある。 わからない事もない
435 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:44:32 ] ディフォルトって何?
436 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:45:54 ] マでやれ
437 名前:デフォルトの名無しさん [2007/09/06(木) 22:48:14 ] やまだソース今度ZIPであげるわ
438 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:48:38 ] なんで大文字なんだろ
439 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:49:42 ] 小文字だと予約語などにぶち当たるからだろ。 それかOLD BASICの名残。
440 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 23:08:58 ] まだLOOP==TRUEの方が理解できる
441 名前:デフォルトの名無しさん [2007/09/06(木) 23:56:29 ] ブレークポイント設定してもデバッグができなくなる現象が突然でました。 どの辺確認すればいいのでしょう?構成はDebugでやってますが
442 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:01:03 ] ブレークポイントまでいってない説
443 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:08:40 ] リビルドすれば治る説
444 名前:デフォルトの名無しさん [2007/09/07(金) 00:10:56 ] ブレークポイントはForm_Load内なので、到達してるんです。 性格にはブレークポイントに到達して、デバッグモードになるのに凄い時間がかかって デバッグモード後はF10で1ステップ進ませると、デバッグモード解除されてしまいます
445 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:21:14 ] Form_Loadのブレークポイントの後に続く文があるのに デバッグモード解除されるんだったら、 多分VSがぶっ壊れてるんだと思うよ 再インスコじゃね
446 名前:デフォルトの名無しさん [2007/09/07(金) 00:31:52 ] 不思議なことに、あるプロジェクトでしか現象出ないんだけど、 とりあえず朝一で再インストールしてみます
447 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:37:35 ] >444 デバッグのオプションのネイティブのチェックを外して.NETのみをデバッグするようにしたらどうなる?
448 名前:デフォルトの名無しさん [2007/09/07(金) 00:40:18 ] >>447 すんません。ソースが会社なんで、明日やってみます。thx
449 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:27:48 ] 「〜〜〜は開始されませんでした」みたいなエラーメッセージがでて デバッグ開始が異常に遅くなるときあるよね。
450 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 13:13:13 ] >>378 kwsk
451 名前:デフォルトの名無しさん [2007/09/07(金) 15:01:14 ] ソリューションのクリーンとか試してみた?
452 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:39:10 ] 怪しいアプリに邪魔されてた事とかあるな
453 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:05:00 ] 質問です。 TextBoxコントロールの枠線の色は変更できますか? できそうにない感じなのですが、そうすると自分で線を描くしかないかと 思うのですが、 Graphics g = this.CreateGraphics(); と取得してコレに対してDrawLineをしてみているのですが、 線が表示されません。 アプローチが間違っているのか、足りないおまじないがあるのか…。 どなたかお知恵をお貸しいただければ幸いです。
454 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:49:42 ] >453 まずその描画はOnPaintでやるべき。 なんとなく、Panelとかの上にTextBoxを載っけてPanelとかに枠線描いた方が楽じゃない?
455 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:59:40 ] >>453 いわゆるオーナードローっぽいことがやりたいのならControlPaintを使うようだから 詳細はMSDNを見るといい が、>>454 に同意だな
456 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 20:19:15 ] >>454 > まずその描画はOnPaintでやるべき。 TextBoxBase 以下は OnPaint が無視されたような気がする。
457 名前:デフォルトの名無しさん [2007/09/07(金) 20:52:07 ] >450 2003までのCPPはマネージとアンマネージはクラス分けされ、同一コード内にはかけても、そこからメモリへの受け渡しが辛かった。 2005はマネージとアンマネージを並べてかける。 つまり int A=42 printf(A.Tostring()); みたいな事ができる。
458 名前:デフォルトの名無しさん [2007/09/07(金) 20:56:41 ] 何かしょぼいが解る人にはマジで!と叫ぶようなコード。
459 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:15:38 ] >>453 やってみると意外と面倒だね。 枠の幅が1でよければ、BorderStyle =BorderStyle.FixedSingleにしておいて WM_PAINT捕まえてそこで枠を描画すればできる。
460 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:44:08 ] public string フィールドしかないクラスから、全フィールドを連結した 文字列をこさえたい。リフレクション使えばできるかと思ったら、 Type.GetFileds() はフィールドの宣言順を保証しないと言う。 どうすればできる? あきらめるしかない?
461 名前:デフォルトの名無しさん [2007/09/07(金) 21:44:35 ] >453 ピクチャボックスに色を塗る。 テキストをフラット枠線無しにしてピクチャの上に載せる これが一番時間がかからない。 グラフィックで書くのも良いけど、速度は体感できない程度しか変わらない
462 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:47:44 ] >>460 そもそもCILにコンパイルされた時点で宣言順なんて保証されないと思うが。 まああきらめた方がいいと思うよ(仮にできたとしても)。
463 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:50:44 ] >>461 ぴったり1ピクセル分ずらすのって、むずかしくない?
464 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:55:20 ] >>460 Order属性とか自分で定義して全部のフィールドに[Order(2)]みたいに付けといて その順番で連結すれば? それなら余計なメンバを増やしたり動作をいじったりせずにリフレクションだけでできるよ
465 名前:デフォルトの名無しさん [2007/09/07(金) 21:58:07 ] >463 サイズプロパティに打つんだよ。 マウスだとちょっとズレるかもだから
466 名前:デフォルトの名無しさん [2007/09/07(金) 22:01:35 ] >460 ヒント IList delegate
467 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:07:41 ] >>466 そんなめんどくさいことするくらいなら初めから連結メソッドを定義するだろw
468 名前:460 mailto:sage [2007/09/07(金) 22:10:44 ] >>464 カスタム属性か。まあ今も Excel から自動生成してるクラスなんで、 それならできそうです。 >>466 plz one more.
469 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:12:06 ] >462 確かに宣言順は保証されないんだが、 宣言順に初期化されるという保証があるので事実上宣言順に並んしまうという状態。 それを利用してリフレクションを使って順番通りに文字列をなんかするなんてソースが会社に大量にあって動いている困った状態。 どうにかして宣言順に並んでいないケースって意図的に作れないかな? 順番は保証されてないから動かない可能性があるって言っても動いてるからって理由で修正を拒まれて困ってる。
470 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:14:45 ] >468 自動生成クラスなら文字列連結メソッドも自動生成した方がいい。 自動生成クラスが何かのケースで実際に動かして動かないことが発覚するリフレクションより コンパイル時に動かないコードになってることが分かる方がいいよ。
471 名前:460 mailto:sage [2007/09/07(金) 22:56:31 ] >>470 んんん。良くわからんのだが、リフレクションは信用ならないということ? 連結メソッドにしろリフレクションしろ、コンパイルを通した上で、テスト ケースもこなすと思うのだが。
472 名前:453 mailto:sage [2007/09/07(金) 23:33:24 ] >>454 やっぱり重ねるのが楽でしょうか…。 ありがとうございました^^ >>455 了解しました、MSDN見てみます。 ありがとうございました^^ >>456 な!? マジですか!? 処理追ってみます。 >>459 おお、その方法よさそうですね、試してみます^^ ありがとうございました^^ >>461 やはり載せる案多数ですね…。 ありがとうございます^^ とりあえず今日は退勤してまいりましたので、明日にでもいろいろやってみようかと思います。 みなさんありがとうございました^^
473 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:36:50 ] リフレクションは保障されてない メソッドは保障されてるってことだろ? わざわざリフレクション使う内容かどうかわからないし。
474 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:47:59 ] でもこの場合属性を連番で付けるだけなら失敗のしようがないだろ
475 名前:デフォルトの名無しさん [2007/09/08(土) 00:00:35 ] このスレ見てるとC#おもしろそうですね。 アセンブリしかできませんが、挑戦してみようかな
476 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:03:32 ] 君見る目があるね
477 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:05:03 ] >>475 今の流れはどちらかと言うと不毛な話ばっかりだと思ったが。 どこらへんが面白かったか教えてちょ! 正直c#は面白い。
478 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:08:33 ] F#はもっと面白いよ(´・ω・`)
479 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:42:40 ] >471 ある日、誰かがメンテをしてそのクラスを手でちょっとだけ修正を入れて 何気なくフィールドを追加しただけなのに挙動が変わったなんてことが起きるかもしれない。 せっかくの連番の属性も意味もわからないままコピペされて番号が重複したりするかもしれない。 そういうときに限ってテストケースの存在も無視される。 普通のメソッドになってれば少なくともそのメソッドの挙動は直接メソッド自体を書き換えられないと変わらないだろ。 マクロで普通のコードを生成できるのに、 リフレクションで処理しやすいようなクラスを用意するってのは本末転倒だろ。 C#のリフレクションはJavaなんかより割と速いけど普通にメソッドを叩くよりかは明らかに遅くなるだろうし。
480 名前:デフォルトの名無しさん [2007/09/08(土) 01:09:54 ] DataGridVewに行を追加したいのですがどうすればいいのでしょうか?
481 名前:デフォルトの名無しさん [2007/09/08(土) 01:46:22 ] asciiファイルからshift-jisで読み込んで、dataGridViewに表示させてるんですが、 この表示された値(2バイト文字)をコピーしてエクセルに貼り付けると文字化けしています。 (テキストファイルなどへのコピーは平気) エクセルへのコピーも問題なく行うにはどうればいいのでしょう?
482 名前:480 [2007/09/08(土) 02:55:09 ] 自己解決しました
483 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 03:42:07 ] そのくらい自己解決してもらわないと困る
484 名前:460 mailto:sage [2007/09/08(土) 08:26:15 ] >>479 自動生成クラスを手でいじったり NUnit かけずに済ます文化がこちらには ないんだが、言わんとしてることはわかった。ありがとう。
485 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 10:06:40 ] dictionaryのキーとして専用の構造体を使うとき、 等値比較演算子を自分で実装しないといけないの? 試してみたら自動でやってくれてるみたいだけど
486 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 10:59:15 ] リフレクション使うのでかなり遅いけど、それでもいいのなら
487 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:14:24 ] 構造体なら値比較?
488 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:37:18 ] >>487 デフォルトだとValueType.Equalsが使われる。 ValueType.Equalsだが、プリミティブ型のみから構成される構造体なら ビット比較を使うっぽい。 参照型を含んでいたりするとリフレクションでメンバごとに再帰比較してる模様。 これが遅いと言われている。 pc11.2ch.net/test/read.cgi/tech/1173763436/161-185
489 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:41:43 ] >>488 >参照型を含んでいたりするとリフレクションでメンバごとに再帰比較してる模様。 いまのCLRならその部分をLCGで実行時生成して キャッシュしておくこともできそうだな。 キャッシュの寿命管理が面倒そうだけど、 直近の16エントリぐらい保持しておけばそこそこヒットしそうだ。
490 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 14:01:32 ] 素直に IEqualityComparer 実装しようよ
491 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 14:09:10 ] 自作の構造体なら、わざわざDictionaryなんかに頼らなくても 自分とペアになるオブジェクトをプロパティで持たせた方が簡単で早いじゃん。 ・・・・・・と俺は思っちゃうんだが、これってやっぱり単細胞過ぎる発想かな。
492 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 14:10:11 ] >>491 肝心のハッシュテーブルはどうするんだw
493 名前:492 mailto:sage [2007/09/08(土) 14:12:39 ] ああ、ごめん無視して 俺のほうが単細胞だったようだorz
494 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 18:57:52 ] >>488 ValueType.Equalsを使うならボクシングが発生するよね それならプリミティブ型のみでもやっぱり自分で比較した方が速いのかな
495 名前:デフォルトの名無しさん [2007/09/08(土) 23:48:32 ] comboboxにあるクラスのインスタンスを設定したいのですがどうすればいい?
496 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:51:32 ] ComboBox.Tag を使いなはれ
497 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:51:33 ] ValueTypeにそのクラスを設定すればいいだけじゃん その程度のこともしらない人がつくったアプリなんて使いたくも無いw
498 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:41:29 ] >>494 JITでボクシングの部分はたいてい取り除かれているらしい。 さらにインラインかもありえるらしい。 ただJITの結果は調べられないからほんとかどうかは知らない。
499 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:59:44 ] >>498 >ただJITの結果は調べられないからほんとかどうかは知らない。 ボクシングが起きてるかどうかはCLR Profilerで分かるんじゃない? GCヒープにその値型が確保されてればどっかでボクシングは起きてるてことで。
500 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 02:10:22 ] デバッガでアタッチしたら見えるんじゃねーの。 ってか取り除かれるのはかなり限定された状況だけじゃない?
501 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 05:03:43 ] >>469 問題が起きたら直すでおk 世の中そんなもんだ。
502 名前:デフォルトの名無しさん [2007/09/09(日) 11:42:40 ] 文字列に記述したプログラムを解析して結果を返したいけどいい方法はない? jscript.netのevalはNGです。 自分で書いた独自のメソッドを呼べないので。。 public string myMethod(string s) { return "hoge"; } 文字列に if(myMethod("hoge")=="hoge") "あ","い") としておき 結果の "あ" を返す方法 文字列中にmyMethodがいつ来るかはわからないです。
503 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:23:16 ] まあやっぱりJScript.NETのevalだな myMethodは静的にすれば元アセンブリ参照で呼べるだろ
504 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:36:05 ] >>502 IronPython
505 名前:デフォルトの名無しさん [2007/09/09(日) 12:37:51 ] 教えてください。 ArrayList で foreach を使う事について ループ内部でIndexof を使用してIndexを求める場合、 foreach を使用せずに最初からインデックスを指定して回すやり方が普通なのかどうか 常識的に考えると後者が普通だと思うのですが foreach を使用したほうが、コードが若干短くなるし、 コード上では多少効率が割るそうですが、オプティマイズされたCLRが吐かれるような気もしますし
506 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:45:06 ] ArrayListの中身を変更したいんならindexで回す 参照オンリーならforeachでいいんじゃないのか Array<T>やList<T>ならForEachメソッドなんてのもある
507 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:05:00 ] >>506 ありがとうございます ところで、2003 にはList<T>は無いみたいです...
508 名前:デフォルトの名無しさん [2007/09/09(日) 13:08:21 ] ペイント系のアプリを書こうと思ってとりあえずPaint.NETを 使ってみたが、とてもじゃないが金を取れるソフトではありませんね やはり、商用だとC/C++がいいのですかね
509 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:18:51 ] そりゃ金とってないソフトだ品
510 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:35:56 ] >>508 おまいさんは金を取ることの意味を勘違いしてるな。 The Old New Thingsでも立ち読みしてこい。 ttp://www.amazon.co.jp/dp/4756150004
511 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:57:37 ] >>508 みたソフトが悪い あれはMITのヲタク学生が書いた駄作だよ
512 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:05:24 ] またまたArrayListについて教えてください ArrayListにオブジェクトをセットして セットするオブジェクト: int Key, string Name1, string Name2, ... そのArrayListに対して、例えば、Key = 3 は何番目なのかを メソッドだけで、処理できますか? Contain と IndesOf と、比較用のメソッドをオーバーライド?すればできそうな気もしていますが 良くわかりません
513 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:26:55 ] なにを言っているんのかよく分からんが IndexOfでとれるだろ。。unboxingされて値が同じなやつが返るだろうけど
514 名前:512 mailto:sage [2007/09/09(日) 14:29:21 ] >>513 比較の際に、同一オブジェクトではなく、プロパティのKeyのみで比較したいのです
515 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:33:23 ] >>512 EqualsとGetHashCodeをoverrideする。またはHashtableでも使え。 それがいやならC#2.0のList<T>にはFindメソッドとかあるぞ。
516 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:35:30 ] ますます何を言ってるのかわからん intなら値で比較されるだろ もしかして key1, string1_1, string1_2, key2, string2_1, string2_2, ... みたいな構造をArrayListで作ろうとしてるの? HashTable使えよ。。。
517 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:42:57 ] >>512 こういうことがしたいの? public class Item { public int Key; public string Name1; public string Name2; public string Name3; } ArrayList al = new ArrayList(); // 入力 int index = 0; foreach (Item item in al) { if( item.Key == 3 ) break; ++index; } if (index == al.Count) Console.WriteLine("みつかりませんでした"); else Console.WriteLine("{0}番目", index);
518 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:44:43 ] 孔子は言った。 考えるだけで学ぶことをしようとしない人間は間違いを犯しやすい。
519 名前:512 [2007/09/09(日) 14:58:56 ] ちょっとだけ違います。 ArrayList al = new ArrayList(); // 入力 Item addOrReplaeceItem = new Item(); // 追加または、更新しようとする要素(オブジェクト) addOrReplaceItem.Key = 2; addOrReplaceItem.Name1 = "new name1"; int index = 0; foreach (Item item in al) { if( item.Key == addOrReplaceItem.Key ) ; { ((Item)al[index]).Name1 = addOrReplaceItem.Name1; // あれば、入れ替え break; } ++index; } if (index == al.Count) { Console.WriteLine("みつかりませんでした"); al.Add (addOrReplaceItem); // 無ければ、追加 } こんな感じです。 宜しくお願いします。
520 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:59:19 ] >>505 あほなこと言ってないで素直にインデックスで回すか、 自前でインデックスカウントしとけ。 同じ値とか複数あったらどうすんだ? 無いとしても効率悪くなるだけ。 そんな器用な最適化ができるわけなかろう。
521 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:01:13 ] いっそDataSet/DataTableを使ったらどうだ。
522 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:01:30 ] ふらっと逝け
523 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:22:45 ] >>519 「メソッドだけで」とか難しいこと考えずに 全部書くか自分でメソッド作ることをおすすめする。 どうせList<T>使えるようになったら組み直しなんだし。 難しいことやるのは慣れてからでいいよ。
524 名前:512 [2007/09/09(日) 16:11:52 ] ありがとうございます。
525 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 02:22:48 ] DataGridViewでコントロール+Cを押したときのクリップボードに 値を渡すのを防ぎたいんですがどうすればいいでしょう?
526 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 02:24:53 ] clipboardcopymode = Disable でできました。。どうもです。
527 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 03:46:34 ] SDJEditorを使ってみた やはり、.NETではこの程度が限界か?
528 名前:デフォルトの名無しさん [2007/09/10(月) 06:36:45 ] >>503 すみません この発言読み飛ばしてました。 静的にすればアセンブリ参照で呼べるというのを解釈すると new をしないようなstaticなメソッドにしてDLLとして作成。 呼び出し元プログラム側で、参照の設定をしてあげるという のでしょうか? この静的にするということは、タイプセーフではないという ことになりますか?今回ASP.NETで作成したいのですが。。 >>509 IronPaython は動的言語ということで私も考えたのですが 具体的にどうすればよいのかが浮かびませんでした。 それにC#から呼び出したいのでオーバヘッドが発生する気がします。
529 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 08:55:33 ] 組み込みスクリプト感覚で使うつもり? それ危なくない?
530 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 12:46:34 ] > 静的にするということは、タイプセーフではないということになりますか? なんで? > C#から呼び出したいのでオーバヘッドが発生する気がします。 eval とか言ってるのにオーバーヘッドw まあ全体に ASP.NET でやるには怖すぎる処理だわな
531 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 13:01:49 ] 限定された構文でよかったら自分でインタープリタを作る手もあるし、 その手のライブラリもあるだろう。 evalと同等とかC#の関数で出来ることを全部やりたいなら、 CodeDOMやらそれなりに危険なことをしないと無理。 話はそれるがC#3.0のExpression<Func<>>の仕組みをつかって、 eval的なことが出来そうな気がする。 いまのところDLinq用だが、どう見てもLispのクォートを狙ってるとしか思えない。
532 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:43:40 ] >>531 本題とはずれるけど、C# 3.0 のラムダ式の話、 C# 3.0 は F# からいろいろ輸入したって話らしいから、 F# の(大元をたどればもちろん LISP の) quote 由来だろうね。 LISP だと、データとプログラムを区別しないってのを、 .NET Framework だと、ラムダ式を デリゲートに代入したときはプログラムとして、 Expression 型に代入したときはデータとして扱う というコンセプトみたい。
533 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:49:29 ] >>532 DLRも見てみると面白いよ。 ASTからILへの汎用変換エンジンになりつある。 CodeDOMは死相が出ちゃったけど DLRはRubyとPythonという目標がある以上、 ある程度のところまで作り込むんじゃないかな。 ちなみにExpression Treeの裏話。 ttp://d.hatena.ne.jp/siokoshou/20070709 ま た D o n B o x か !
534 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:55:38 ] すんません。 HTML中で16進形式(5桁:ex."𠮟")で指定されたサロゲートペア文字を 正しく変換する楽な方法ってないですか? HttpUtility.HtmlDecodeだと、下位4桁までしか認識しないようで、困っております。 string s = HttpUtility.HtmlDecode("𠮟"); foreach (char c in s) Console.WriteLine(string.Format("{0:X4}",(int)c)); --出力(こんな値が入ってて欲しい)-- D842 DF9F --出力(でもこうなっちゃってる orz)-- 0B9F
535 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:07:19 ] 正規表現使えば
536 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:19:54 ] ども。"&amp;"とかも"&"として取得したいんで、 できればメソッド一発でできたらなぁ、と思ったんですが、 やっぱそこだけ別に処理するしかないスかね。
537 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:29:04 ] 数値文字参照だけ置換してあとはHttpUtilityに任せる というのをひとつのメソッドにすればメソッド一発だよ
538 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:54:18 ] 気になったのでざっと調べた感じ、HTML4.01の扱える文字集合はISO/IEC 10646-1らしい。 いわゆるUCS-4なんだが、-1はBMPしか扱わないそうな。-2がそれ以外の文字。
539 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:32:11 ] BitmapオブジェクトがDispose()されたことをBitmapオブジェクトの外部から知ることはできるでしょうか。 ローカルメモリオブジェクト内のDIBをもとに作成したBitmapオブジェクトが破棄されるまではローカルメモリオブジェクトを解放せずにおき、Bitmapオブジェクトが破棄された段階でローカルメモリオブジェクトを解放するようにしたいのです。 DIBをマネージメモリにコピーしてからImage.FromStream()でImageオブジェクトを生成し、すぐさまローカルメモリオブジェクトを解放する、という方法なら安全確実なのですが、いかんせん遅いのです。
540 名前:デフォルトの名無しさん [2007/09/11(火) 05:44:01 ] >>503 >まあやっぱりJScript.NETのevalだな >myMethodは静的にすれば元アセンブリ参照で呼べるだろ やってみたけど無理でしたよ! やっぱりできないのでは? DLL側に public class MultiplyClass { public static long Multiply(long x, long y) { return (x * y); } } としてコンパイル、それを呼び出し側で参照の追加。 string exp = "MultiplyClass.Multiply(10, 5)"; Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine(); long result = (long)Microsoft.JScript.Eval.JScriptEvaluate( exp, ve); そうすると 変数 'MultiplyClass' が宣言されていません。 結局、作成したクラスはスコープの範囲外でした。
541 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:22:54 ] >>538 なるほど。HttpUtility.HtmlDecodeのバグというわけではないわけですね。 わざわざありがとうございます。