1 名前:デフォルトの名無しさん [2007/08/26(日) 12:42:25 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part41 pc11.2ch.net/test/read.cgi/tech/1184840053/ 過去スレは>>2-5 あたり。
247 名前:デフォルトの名無しさん [2007/09/03(月) 01:53:14 ] >>239 それはあくまで作る側の屁理屈 使う側からすれば、生産性なんてどうでもいい あなたが、よく使うアプリケーションが次バージョンから.NETで書かれたらどう思う? LightWaveが.NETなんかで書かれたら俺は間違いなくMAXへ移行する
248 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:57:26 ] >>247 えーとね、生産性悪くなるとコストがかかるんだよ。 それは製品価格に反映されたり、次バージョンで実装される機能が少なくなったりすることになるんだよ。
249 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:05:21 ] >>247 なんでアセンブラでつくらねーんだっていってみろ。
250 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:06:39 ] まあ、問題は、場合によっては普通にLL言語にさえ後れを取る C#がバランス上最適解かどうかだろうなw
251 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:06:52 ] 製品の値段に直結するぞ。 機能も少なくなるぞ。 品質が下がることもあるぞ。
252 名前:デフォルトの名無しさん [2007/09/03(月) 02:07:02 ] けど、C#が使えないのは事実 C#しかつかないやつはVC++で開発してる部署に行ったらほぼ終わり
253 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:07:34 ] >場合によっては普通にLL言語にさえ後れを取る 絶対にLL言語に遅れをとらない言語ってなんだよw
254 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:09:30 ] VC++しかつかないやつは他の言語で開発してる部署に行ったらほぼ終わり
255 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:14:15 ] >>246 ・300kのIO速度の計算をスルー ・300kのSJISから内部コードの変換(UTF-16やutf8)コストもスルー ・(C#)2000行の無駄なnew StringBuilderとToString、+演算子置き換えで高速化 正規表現のベンチになってないよ
256 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:17:16 ] >>255 うん、正確な正規表現のベンチのつもりで書いたのではないよ それが求めるものなら自分でやってくれ IO処理は「どの言語でも」やっている ユニコードへの変換も「どの言語でも」やっている オーバーヘッドの大きそうなフォーマット処理も、PerlやPythonでもやっている 概ね、カリカリに書かずに適当に同じレベルで「普通に」書きなぐったものだ 特に何かをひいきしたつもりは無い そうやって書いたものが、スクリプトが案外速かった(C#より速い)ってのが 重要ね。
257 名前:256 mailto:sage [2007/09/03(月) 02:28:23 ] ちなみにC++も三種類書いてみたが大して速くなかったね。 ソースを見れば分かるが、LL言語で書くよりずっと複雑でトリッキーで エラーを産みがちなコードになるというのに。 こんな仕事はLL言語向きだ。他の解は馬鹿げている。そう思ったよ。 そして、そういう仕事は案外多いのだと思う。
258 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:37:29 ] プロセスの生成負荷も考慮されてない… C#、C++、Perl、Pythonではエンジンの起動時間は大きく違うし、 いくらなんでも、これで決めつけるのは早計だと思うが。 俺のPCでは、C#の方がPerlより速かったり遅かったりだった。 一瞬すぎて測れない。 Core 2 Duo E6600, 2GB, Win Vista Super Fetchがどこまで効いているかはわからない。 明日kwsk調べようかな。
259 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:45:50 ] 正規表現の処理の話をしてるときにこれはない
260 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 02:46:28 ] つうか試してないけどコンパイルしないほうが早かったりしてよw
261 名前:256 mailto:sage [2007/09/03(月) 02:54:56 ] >>258 入力ファイルデカくしてみそ 二回目以降はキャッシュが効くし、入力が十分デカければ起動時間は誤差の範疇に 持ち込めると思うが ちなみに俺の環境はXP、Pentium M(1.7GHz), RAM 500Mだからずっとショボい >>259 純粋に正規表現エンジンの性能を計りたいんなら、そうだね 俺がやったのは、正規表現を用いた典型的なPerlの使い捨てスクリプトレベルの 仕事を各種の言語で書いてみた、それだけのことで、やっている仕事自体は どの言語でも同じだよ
262 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 03:15:34 ] せめてマッチ対象文字列は、メモリに確保しておかないとベンチにならんだろw
263 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 05:29:41 ] 起動が早い言語の勝負じゃないからな
264 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 09:15:08 ] >161 ご回答ありがとうございます。 そんなことを頻繁にするかどうかは知らんよ。 俺がちゃんとわかってる人かどうかは あんたが決めることじゃねえよ。スキルチェックでもしてくれ。
265 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 10:34:36 ] プログラマーなんだから、C++とC#両方使えるようになろうや。
266 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 11:35:59 ] C++なんぞ使ってると脳みそが腐るぜ
267 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 11:39:14 ] C++使ってる奴がまだ居たなんて・・・
268 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 12:30:18 ] C++は使えませんが、C++でできています。
269 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 12:58:35 ] C++はC++でできています
270 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 13:29:49 ] gccがgccでコンパイルできるようになりました、というのは結構画期的なことだったらしいが
271 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:01:15 ] foreachループ変数が書き込み禁止だってことを今更ながら知ったのだが・・・ なんでこんな制限があるんだ? コレクションに変更を加えるわけじゃないし問題ないと思うんだけど。
272 名前:デフォルトの名無しさん mailto:age [2007/09/03(月) 15:49:14 ] C#で変数名に変数を使うやり方ってどうやるんですっけ? test_i(i=1,2,3・・・)みたいな。
273 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 15:54:20 ] 配列を使いましょう
274 名前:デフォルトの名無しさん [2007/09/03(月) 16:06:14 ] >>271 たとえば string[] strArray = new str[]{"a","b","c"] foreach(string str in strArray) { s="d" } ってやってもstrArrayには反映されない。 foreachの列挙子はIEnumerableの実装いかんによっては、何を 参照しているのか全く保障されない。 IEnumeratorは上記の例のようにコピーを返してくるかも知れない。 あと、IEnumuratorの実装クラスは「列挙」できればよく、要素の概念 を持たないものだってあるからね。 MSDNのIEnumerableのサンプルをみてみそ。
275 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 16:30:21 ] >>271 「変数の使いまわし」ができないようにするのが最近の流行だから。 バグが減ると信じられてる。
276 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 16:36:34 ] foreachって実際は while(strEnumerator.MoveNext()) { string str = strEnumerator.Current; ... } こんな感じでしょ 代入しても無意味というか、元が配列だったりすると 書き換えられるという錯覚を与えかねない というか配列のforeachは for(int i = 0; i < strArray.Length; ++i)... に置き換える最適化がされるらしいから 実際に書き換えられちゃうんでそうするとforeachの意味が変わっちゃう
277 名前:271 mailto:sage [2007/09/03(月) 16:55:47 ] >>274 >>276 foreach変数ってIEnumeratorの実装に関わらずスタック上に置かれるものでは。 構文上もそこで宣言してるわけだし、直接書き換えられると誤解される余地もないと思うけど。 >>275 それで余分な変数を導入する方が場合によっては可読性が落ちると思うんだけどなあ。 というかforeach変数だけ禁止しても意味がないような・・・
278 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 17:01:33 ] >>277 たしか、usingとかfixedとかで宣言した変数も使いまわしできないな。
279 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 17:55:02 ] むしろforが例外か
280 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:45:58 ] >>271 は単に参照型と値型の区別がついてないというか、データがメモリにどう 配置されるかのイメージがつかめてないだけの気がする。 >>275 は意味不明だと思う。 繰り返し変数はもとの変数のビットイメージのコピーであってもとの変数そのものではない。 これが理解できていれば271はそもそも愚問であって、こんな疑問は抱きようがないんじゃないか?
281 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:55:24 ] その後の流れをちゃんと読めよw 271はforeachでコレクションの内容を変更したいんじゃなくて、例えば //引数に与えられた値+2を返すメソッド int Plus2(int value){ value += 2; return value; } みたいなことをforeachの繰り返し変数でもやりたいんだろ
282 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:13:55 ] int Plus2(int value){ return value + 2; } でいいじゃん
283 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:20:09 ] なんという正論
284 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:20:50 ] >>282 頭悪そうだな・・・
285 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:22:57 ] まあ281の例えも悪いよ。 変に例える必然性なんて全然ないのにね。
286 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:24:32 ] というか、+2と決めうちなのにメソッド作る意味があるか?
287 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:26:09 ] 281の方が頭悪そうだ
288 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:26:40 ] >>271 あるいは逆にコレクションに変更を加えようとしてミスるプログラマが出るのを予防するためだな。 D言語ではforeachの制御変数には明示的にrefキーワードをつけないと、代入できないようになってる。
289 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:30:55 ] それどんな感じで列挙子を実装するの?
290 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:33:54 ] >>288 そんなアホグラマは正直無視でいい・・・ と思うのは俺だけ? だってそんなこといったら仮引数だって変更不可にするべきじゃん
291 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:42:45 ] >>289 int opApply(int delegate(ref T));というメンバ関数を実装する。 www.kmonos.net/alang/d/statement.html#ForeachStatement >>290 Dでは仮引数にinキーワード(あるいは、finalキーワード)を追加することによって、仮引数への代入が制限されますよ。 要するに、最近は酔っ払いでも使えるような言語設計が流行っているのだ。
292 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:50:44 ] フェイルセーフがあるのは結構な事じゃないか
293 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 21:01:28 ] いつも酔っぱらってこーでぃんぐしてるからありがたい
294 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 21:45:38 ] 参照型の場合 foreach (Hoge h in Hoges) { h = new Hoge(); // はダメでも h.Member = 123; // は全然OKだから あまりガードにはなってないよね。
295 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 21:55:27 ] …なんか勘違いしてないか?
296 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:11:00 ] >>295 なんかって何?一言主さん
297 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:13:01 ] フェイルセーフがいいならC++のconstなんか真っ先に導入しなきゃダメだろ キャッチしなきゃいけない例外も必要だろ C#はそういうのが意図的に外されてるんだな 意味ないから
298 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:15:50 ] VC++(2005)のMS拡張構文ではconstのあるなしで調整できるようだ。 // cl /EHsc #include <vector> #include <iostream> int main() { std::vector<int> v; v.push_back(1); v.push_back(3); v.push_back(5); for each(int r in v) { r++; // OK std::cout << r << std::endl; } for each(const int r in v) { r++; // Error std::cout << r << std::endl; } }
299 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:18:01 ] >>297 いや、チェック済み例外は明らかに設計ミス。
300 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:21:40 ] しかしネットワークなんかだと、 絶対に間違いが起きる可能性がある処理はあるわけじゃない そういうのをどうやって実装すればいいの
301 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:27:25 ] そんなのインテリセンスなりナンチャラペットの水準でサポートすれば 済むことじゃないの? まあ、それ以前にドキュメントをちゃんとして欲しいよねw
302 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:09:05 ] constもチェック済み例外も問題の根は同じ。不必要に実装に結び付く(透けて 見せる)シグニチャである点。
303 名前:デフォルトの名無しさん [2007/09/03(月) 23:15:15 ] >>277 あんた、単なる素朴な疑問かと思ってたけど 真正のあほだな
304 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:16:10 ] VC# ExpressEditionダウンロードしたんだけど オフラインでMSDN見ることってできないんですか?
305 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:21:54 ] ふらっとに行くべき
306 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:31:16 ] >>302 意味がよくわからないから詳しく説明してくれ
307 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 01:41:01 ] >>290 に同意。費用対効果の低いフェースセーフ要らないぽ constだので縛ってもバグは斜め上からやってくるね。 sealedつけてたのにsealed外されるとか。 foreachといえば、配列に関してはfor文と同等の速度が出ますが、こういう情報はどこにあるのでしょうか? パフォーマンスガイドラインに重いループではforeachよりforって書いてあったので わざわざ変えたのに・・悲しい。
308 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 02:21:04 ] 英語だけどパフォーマンスの話題はここが詳しいかな msdn2.microsoft.com/en-us/library/ms998547.aspx 1.1に基づいてるからまだforが速いって書かれてはいるが・・・ msdn2.microsoft.com/en-us/library/aa137140.aspx ここにもパフォーマンスの記事が結構たくさんあるね 特にKnow What Things Costは命令ごとのコスト表が載ってて面白いかも
309 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 02:52:52 ] >>307 2.0だとforeachのほうが若干早くなってますね。 foreach (int v in ar) csum += v; for (int i=0; i < 10000; i++) csum += ar[i]; これを下のように書くとforeachと同じスピードになるからそういう最適化をしてるのでしょう。 fixed (int *sp = &ar[0]) { int *ep = sp + 10000; for (int *p = sp; p < ep; p++) csum += *p + j; } ただ、foreachの制御変数が読み取り専用なのは、フェイルセーフのためなのか、 最適化のためなのかは判断がつきません。
310 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 07:54:38 ] アンセーーーーーフ!! なるほど、「処理を直接記述されると最適化できないが 抽象度を高くすると最適化しやすい」というやつか forよりforeachの方が早い LINQも早くなるという しかしループ変数への代入を許すとこの最適化が出来なくなるわけか
311 名前:デフォルトの名無しさん [2007/09/04(火) 09:28:17 ] アンマネージドのコードと同期をとりたく、 EventWaitHandle.Handle プロパティで ネイティブのハンドルを取得しようと思ったのですが、 「古い形式です」と起こられてしまいます(警告)。 新しい形式ではどのように書くのでしょうか?
312 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 09:37:04 ] >>311 MSDNにずばり書いてあるから、まず自分で調べるくせをつけろ。
313 名前:デフォルトの名無しさん [2007/09/04(火) 09:37:06 ] あ、 EventWaitHandle.SafeWaitHandle.DangerousGetHandle() でいいみたい。 Safeなんだか、Dangerousなんだか。
314 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 10:15:09 ] >>313 DangerousGetHandle()は必要? MSDNでは、 >このクラスを使用すると、派生クラスのインスタンスでラップされたアンマネージ リソースを >識別するハンドル (オペレーティング システム ハンドルなど) をアンマネージ コードに >渡すことができます。 となってるし、使用例にあるWindowsAPIの呼び出しサンプル見ても、IntPtrの代わりに使ってる。 というか従来のIntPtrの代わりに使うべきもののように見える。 DangerousGetHandle()はデバッグのためにハンドル値を16進でダンプしたいとかの特殊用途のために 残してあるんじゃないか。
315 名前:デフォルトの名無しさん [2007/09/04(火) 11:08:29 ] >>314 なるほど。ほんとだ。 ハンドルは、PVOIDだろ、と、 [DllImport("native.dll")] public static extern void NativeFunc(System.IntPtr hHandle); して、Handleプロパティから渡していたので、、 替わりにSafeWaitHandle使えと言われても、型が違ってこまってました。 [DllImport("native.dll")] public static extern void NativeFunc(SafeWaitHandle hHandle); こうすればいいんですね。
316 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 12:42:53 ] デンジャラスなんてついてるメソッド使いたくないお
317 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 13:35:00 ] IntPtrで問題が発生したら泣き寝入りするお
318 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:41:40 ] >>316-317 正直、「ボキュはキモヲタだお」って言ってるようにしか聞こえない。 そういうの気色悪いと思わない自分を気色わるいと感じるべきだ。
319 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:48:43 ] どうか、次のVBをC#に直して下さい。 Label1.Text = Replace(Session("body"), vbCrLf, "<br />") ----------------------------------------------- VBの本の中にソースが載っていたのですが、 この1文が、どうにもわかりません。 そのコード意味は、どうやらセッションというデーター内の改行を HTMLの改行に変換するっぽいのですが・・・。(推測) ちなみに、他の行は自力で調べましたが肝心のこのコードが分りませんし、 C#でどう書けば良いのか分りません。 賢者の方々、どうか愚者の私にご指導をお願い申し上げます
320 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:54:20 ] >>319 少しはググるとか努力しろよ VB.NET固有の関数をC#で使用するには? www.atmarkit.co.jp/fdotnet/dotnettips/254vbfunc/vbfunc.html でも、それただの部分文字列の置換でしょ? String.Replaceか正規表現で代用できるでしょ。
321 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:54:33 ] >>319 zoosir.hp.infoseek.co.jp/tips/string/string03.htm C#だと省略可能引数(Optional)が無いから、全部書く必要があるらしい。
322 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:35:51 ] >304 MSDNも普通にフリーとして公開されてなかったか?
323 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:54:39 ] csc.exeやvbc.exeって開発環境がなくてもインストールされるものなんですか? C:\windows\Microsoft.NET\framework\以下にあるのでそんな気がしますが。
324 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:57:13 ] はい。実行時に使用する場合もあるので、全ての環境に含まれています
325 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:03:35 ] >>324 おお、そうだったんですか。 これで安心してCodeDomが使えます。
326 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:17:14 ] 標準添付はcsc/vbc/jscの三つ、だったかな確か clは非標準だよね 標準なのにドマイナーなのがひとつ
327 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:09:57 ] Control.Invoke系のメソッド呼ぶとどっかで内部的にファイナライザが必要になるっぽいな。 ループの中から呼んだりして大丈夫なんだろうか。 何千何万って呼んだらなんか嫌なことになりそうな気がする。
328 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:15:47 ] ここは散文を書くところではない。 説明調の、他人に意味がちゃんと通じる文章書けよ
329 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:23:22 ] え、ファイナライザのコストが高いことを説明しろってこと? それは説明するまでもないと思ったけど。 何が通じてないのかわからん。 Invoke系のメソッドってのはInvoke、BeginInvokeのことだよ それらを呼んだら内部的に生成されるオブジェクトでファイナライザが呼ばれるっぽいんで嫌だなって話。
330 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:37:10 ] 何をみてそう思ったの?
331 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:38:28 ] >何が通じてないのかわからん。 読む側の立場に立って自分の文章推敲できない人間はたいていそうだ。 ついでに、ファイナライザのコスト? 意味がわからない。 デリゲートを処分するコストがそんなかかるのかね? 仮にかかるとして、コストとは「時間当たりのCPUの使用量」のことだと思うが、 どのみちmsのオーダーでInvokeとか不可能だから意味がないだろう。
332 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:39:31 ] >それは説明するまでもないと思ったけど。 いったいどんな頻度でControl.Invokeなんかを実行する気だ?
333 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:44:23 ] >>327 再描画を伴わないControl.Invokeの使い道って あんまり思いつかないんだけどどうだろ? 経験上、何千何万って単位でControl.Invokeを呼ぶと 再描画コストが恐ろしいことになる。 WinFormsなら1秒間に10回ぐらいの更新でいいんじゃないかね? まあそれ言い出すとTimerでいいじゃんて話も多いんだけど。
334 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:44:31 ] >>330 CLR Profilerで見れるよ。 >>331 msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndotnet/htm/dotnetgcbasics.asp この辺でも読んでくれ。 なんでデリゲートが出てくるのかわからんが・・・ >>332 別スレッドでなんかの処理中にUIを更新するために呼んだりしない? まあ何万は言いすぎかも。
335 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:04:23 ] >>322 ヘルプから見れるキーワードとか目次がMSDNなんですか?
336 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:05:13 ] >>334 読んでくれって、どこにもお前さんが主張しているような類のことは書いてないだろw
337 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:10:27 ] >334 CLR Profilerで見れるよ。 Control.Invokeを使ったらファイナライザが実行されたってこと?EndInvokeしてても?
338 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:13:32 ] ファイナライザのコストが高い(高くなりうる)ということ自体はわかるが、 Control.Invokeで実行されるというファイナライザを持つオブジェクトが内包するオブジェクトとか。 Control.Invokeを実行する通常の頻度とかから考えて、それが問題になるほどコストが高いとは思えん ということだよ。 「ファイナライザのコストが高い」という表現自体をそのまま疑ってるんじゃない。 ついでにEndInvokeしたらファイナライザは実行されないんじゃないの?普通に考えて。 と思っただけで、まあこれはプロファイラで確認してそうなってるってんならそうなのかもしれん。
339 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:17:46 ] >>335 VS2005 Expressのヘルプに標準で何が入っているかは知らないが、MSDNライブラリはこれ。 ttp://www.microsoft.com/downloads/details.aspx?FamilyID=b8704100-0127-4d88-9b5d-896b9b388313&DisplayLang=ja 2.5Gバイトほどあるから注意してくれ。
340 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:22:22 ] ファイナライザはそれを行わなければならないものが一つでもあると GCを二回行わなければならず単純計算でGCにかかる時間が倍になるんじゃなかったか
341 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:27:36 ] >>337 >>338 EndInvokeしても呼ばれるみたい。 やっぱgen0でちゃちゃっと回収されるから問題が少ないってことなのかな? 具体的にはControl.ThreadMethodEntryってオブジェクトだけど ファイナライザの処理自体はシンプルだけど他のオブジェクトへの参照は割とごっそり保持してるみたいだな。 まあ他に代替手段があるわけじゃなしどうこういっても仕方ないんだけどね。
342 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:42:58 ] おお?なんだこの意味なしFinalizeはw いらねーじゃねーかよ。
343 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:48:44 ] >他のオブジェクトへの参照は割とごっそり保持してるみたいだな。 そんなに困らないオブジェクトが多いけどな。 まあ引数とか戻り値はクリアしてほしいところだが
344 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 01:58:26 ] だいたい、GEN1までで回収できたら、負荷的にはまあそんなに大きくはならないようだな。 GUIアプリだし、特にControl.Invokeなんて同期実行なんだから、まあ普通はまずGEN1ですべて回収できるだろう。
345 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 02:05:06 ] SuppressFinalizeを書き忘れてるんじゃないか
346 名前:319 mailto:sage [2007/09/05(水) 11:20:12 ] >>321 賢者 一応、下記ソースに変更出来ました。 的確な助言、ありがとうございました。 if ((string)(Session["Body"]) == null) { Label1.Text = "<br />"; } else { Label1.Text = ((string)(Session["Body"])).Replace("\r\n", "<br />"); }
347 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 11:24:43 ] 暇があったら as 演算子を調べとくといいよ
348 名前:319 mailto:sage [2007/09/05(水) 11:45:52 ] >>347 神へ ご助言の通り、as演算子をしらべました。 お陰でたまに出るエラーがなくなりました。 さすがは神ですね。 即レスにも関わらず、100%的中でした。 なぜ、私がたまに出る意味が理解できないエラーで苦労している所を お察し出来たのか愚民にはわかりませんが、 貴方の英知で、救われました。 再びお礼を申し上げます。 string s = (string)(Session["Body"]) as string; if (s == null) { Label1.Text = "<br />"; } else { Label1.Text = ((string)(Session["Body"])).Replace("\r\n", "<br />"); }
349 名前:319 mailto:sage [2007/09/05(水) 12:08:38 ] ※すみません。下記に訂正しました。 string s = (string)(Session["Body"]) as string; if (s == null) { LabelBody.Text = "<br />"; } else { LabelBody.Text = s.Replace("\r\n", "<br />") + "<br />"; }
350 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 12:18:23 ] まだキャストしてんじゃん。 string s = Session["Body"] as string; じゃないとエラーでるっしょ
351 名前:319 mailto:sage [2007/09/05(水) 12:22:14 ] >>350 いいえ。 今の所、何もエラーがでませんが? でも、助言ありがとう。
352 名前:デフォルトの名無しさん [2007/09/05(水) 12:39:14 ] >351 エラーは出ないけど string m = ((string)"Hello") とはやらないだろって事じゃない?
353 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 12:59:04 ] >>352 うん。私もそう思ったので、助言どおりに直しました。 だから、「助言ありがとう」とカキコしたよ。(^^
354 名前:デフォルトの名無しさん [2007/09/05(水) 13:34:37 ] foreachを書き込みしたいっていう人は具体的に何をしたいの? 1. foreachのループの中でコレクションの書き換えをしたい。 2. foreachのループ変数を書き換えることによって、ループの制御をしたい 1.なら foreachのループ変数はコレクションの要素とは無関係な場合もある。 そもそも、IEnumerableには「要素」の概念はないし、arrayみたいにIListを実装した インデックスを通じて要素にアクセスできるコレクションとは限らない。 2なら、ループのカウンタはIEnumerableの内部でループ変数とは別に 管理されているから、無駄(というか、おそらく何も起きない)。 だと思うんだけれど、ほかに何か書き込み許容するといいことってありますかね?
355 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 13:54:18 ] 今更その話か ちゃんと読めとしか言いようがないが、1でも2でもない(つーか2は意味がわからんが) あえて例を出すならこんなことがしたいんでしょ foreach (string str in input) { str = str.Trim().ToLower(); if (str.Length == 0) throw new exception("Invalid"); Console.WriteLine(str); }
356 名前:デフォルトの名無しさん [2007/09/05(水) 14:15:34 ] >>355 なるほど、そういうことか。全然議論が見えてなかった。 Console.WriteLine(str.Trim().ToLower()); でも書き込み禁止だとエラー出るのかな??? 355さんの例みたいに条件分岐したいような場合は たとえ書き込み禁止じゃなくても、可読性のために仮変数おいたほうが いいとおもうけど…。
357 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 14:15:34 ] >>353 object o = 1; string s = (string)o as string;
358 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 14:29:43 ] えーっとだな… それはなんだ?
359 名前:デフォルトの名無しさん [2007/09/05(水) 15:28:55 ] C#からC++のクラスライブラリを利用するには、 ttp://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_03.html のように、publicメンバすべてをラップしか、方法ありませんか?
360 名前:デフォルトの名無しさん mailto:age [2007/09/05(水) 15:30:10 ] dt=$.split(' \n');dt[dt.length]='';for(i=0;undefined!=dt[i];i+=2){write(dt[i-i%2+1].replace('jp.','').replace('www.',''));br();write(dt[i-i%2]);br();}
361 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 15:36:46 ] >>359 使うメンバだけラップすれば良いよ。 COM 化するって手もある。
362 名前:359 [2007/09/05(水) 15:53:00 ] >>361 なるほどCOMって手も。。 説明まちがえた。 すべてのメンバか使うメンバだけって、ところが問題じゃなく、 いちどC++/CLIでラップしなければいけないのかどうか、知りたかった。 ラップするのはここではC++/CLIだが、 直接C#でラッパを書いて、マネージドのクラスライブラリを作ることは 可能ですか?
363 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:01:12 ] >>362 C++/CLI でラッパを書く、C++ で COM 化するのいずれも避けるには?ってことですか。 ヘッダファイルとオブジェクトファイル(あるいはソースコード)で供給されるような普通の 良くあるクラスライブラリの場合、そもそもライブラリ側のコードを呼び出す手段が無い ですよね。 dllexport されているクラスなら MSVC の ABI に従って呼び出してあげれば動くでしょうけど、 そういうライブラリはあまりないし、割に合わないような気がする。
364 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:34:36 ] 今ハードウェアとやりとりをしなければならないので、PInvoke を使って DLL にアクセスしています。 この DLL の Open 関数を構造体を引数として呼んであげると、この構造体の中にデータが入って 返ってくるというものです。 で問題はこの構造体のメンバに構造体の配列が入っており、この構造体の配列を取得することが できません。( 構造体の他の int のメンバは取得できています。以下でいうところの ID ) このような構造体下の構造体を取得することはできないのでしょうか。 struct Parent { public int ID; public Data[]; } struct Data { public int RawData; public int Length; }
365 名前:359 [2007/09/05(水) 16:38:33 ] >>363 すみません、最後の、 dllexport されているクラスなら(snip)動くでしょうけど、 について、もすこし教えてください。dllexportすれば、 C#から直接呼べますか?
366 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:59:15 ] >>365 exportする側は msdn2.microsoft.com/ja-jp/library/a90k134d (VS.80).aspx あたりを参照 メンバ関数がどういう名前でexportされるかはコンパイラ依存。 dll 生成時の出来る lib を見て自分で調べる。 仮想メンバ関数は vtbl 経由でアドレスを取得。 MSVC の 呼び出し規約は基本 __cdecl ですが this を ecx に入れて呼ばなきゃないので、 そこだけは C++ というかアセンブラの補助が必要ですね・・・
367 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 17:00:01 ] あなたがCでDLLExportされたC++クラスのコンストラクタを起動し、 vtblに格納されているか少なくとも名前マングリングされたthisコールの メンバ関数を起動し、スローされた例外を上手いこと取り扱い、最後に デストラクタを起動して破棄できるのなら、C#でもきっと出来るだろう。
368 名前:デフォルトの名無しさん [2007/09/05(水) 18:36:48 ] 大人しくEXEキックしてコンソールで取り込めば?
369 名前:359 [2007/09/05(水) 19:13:34 ] >>366 367 368 みなさん。ありがとうなんとなく理解した。 [DllImport("native.dll")] extern static void Hoge()で、 C#から、Cの関数は呼べる仕組みがあるし(マーシャリングもあるし)、 マネージドであるC++/CLIからは、C++/Native のオブジェクトをnewできるし、 なので、C#からC++/Nativeにアクセスできる方法も実はあるんじゃないかと、 ちょっと期待して質問してました。
370 名前:デフォルトの名無しさん [2007/09/05(水) 21:11:06 ] >369 これはマジレス キャストやアンマネージDLLを使うならVB.NETがいい。 VBFixedArrayにDECLAREで処理するDLLをC#で呼ぶ。 アンマネージVBが噛むと処理が激重だから、処理が軽いもの限定だけど。 FORTRAN C C++ で構造体処理するDLLも一発でいくよ
371 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 21:12:58 ] VB 使うくらいなら俺は C++/CLI を選ぶぜ
372 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 21:29:01 ] エクセルとか操るならVBの方がずっと楽だと思うけど、 アンマネージdllの関数呼ぶ手間はあんまり変わらないんじゃない?
373 名前:デフォルトの名無しさん [2007/09/05(水) 21:32:03 ] >371 C++/CLIでやるのもありだな。2003ですまない
374 名前:デフォルトの名無しさん [2007/09/05(水) 21:34:15 ] >372 それはVB.NETじゃなくないか?
375 名前:359 [2007/09/05(水) 21:38:27 ] >>370 ラッパをVBで書く? >>371 私もなんとなく同意。 やりたいことは、ネイティブなC++クラスライブラリを、 マネージド(C#)から使えるクラスライブラリにしたい。です。 結局C++/CLIでくるむ方法を取ることになりそうで検討中ですが、、 publicなクラス → ラッパクラス interface → ?? publicなメンバ関数 → 全部ラッパ publicなメンバ変数 → プロパティ #define定数 → static const な定数 struct → ?? enum → ?? どのように書き換えたらいいか、わからないとこ満載だ。 どなたか、??のところを教えてください。
376 名前:デフォルトの名無しさん [2007/09/05(水) 21:41:15 ] バイナリーを読む場合ポインタTOストラクチャを使うC#に対してVBは一発で入るよ? 同じかな?
377 名前:デフォルトの名無しさん [2007/09/05(水) 21:43:47 ] >375 それなら2005を買ってみな。 ヘッダ読めばそのまま動く
378 名前:デフォルトの名無しさん [2007/09/05(水) 21:48:34 ] すまない、ちょっと言葉が足りなかった 使いたいライブラリをC++でインクルード コンパイル C#で参照設定 .NETプロジェクト これで全部使える
379 名前:デフォルトの名無しさん [2007/09/05(水) 21:52:49 ] VB.NETでラッピングする場合は、DECLAREで定義。引数は全てVARIANTのFIXEDARRAY (OBJECTだと通らないから注意) で、きちんとした型をCTYPEで渡せば動作する 楽じゃないか?
380 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 21:56:22 ] >>375 >マネージドであるC++/CLIからは、C++/Native のオブジェクトをnewできるし、 ネイティブのライブラリは実はCのランタイムライブラリが裏で色々サポートしているので newの部分だけ見てても混乱するよ。 内部でCRTヒープ使ってるかもしれないし、 atexitみたいなコールバックに依存しているかもしれない。 一般論として、Cのライブラリは静的リンクなり動的リンクなりのCRTを必要とする。 そのCRTとの連携無しに、C#から 直接Cのコード使おうってのはちょっと無謀じゃないかな。 相手がDLLの場合、LoadLibraryされたときに自分でCRTの初期化やるから その辺気にする必要はないんだけど。
381 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:44:08 ] んん? そのためのC++/CLIなんだから、CRTのルールを守らず アセンブリをロードするとは思えんけど。 msdn2.microsoft.com/ja-jp/library/ms173266 (VS.80).aspx
382 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:50:54 ] >>381 C++/CLIはそれでOK。そこは同意。 よく分からないのは359が言うところのクラスライブラリが どんなファイル形式なのかかな? 1) *.h 単体 (テンプレートライブラリ) 2) *.h+*.lib 3) *.h+*.obj 4) *.h+*.dll 5) *.h+*.cpp >>>359 は >いちどC++/CLIでラップしなければいけないのかどうか、知りたかった。 とか書いている割に、どんな形態で配布されているライブラリなのか 未だに明かしていないみたいだけど。
383 名前:359 [2007/09/06(木) 01:46:34 ] >>382 わかりにくくてすんません。一番最初にあげたurlの記事の内容そのまんまで、 WIN32で書いてあるスタティックのライブラリ。 2) *.h+*.lib ってことになります。 ttp://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_03.html で、このとおりやってみようと思ったのだが、 >>375 で書いたとおり、メンバ関数をラップするだけじゃ足りなくて、 その他もろもろ細かいところすべて書き換えなきゃならなくなって。。。 ホントにこれが普通の方法なのか?もっとエレガントな方法があるのでは。 と、思ったのでした。 ちなみに、すべてではないですが、 4) *.h+*.dll の形にしたものもあります。 MFC,ATL,stlは使っていなく、CRTは使っているものとそうでないものが。 >>380 >>381 Nativeと.NET、両方が扱える言語は、C++/CLIだけで、 っていうか、C++/CLIはそのために存在している。ので、いまこそ使うときだ。 ってことですかね。
384 名前:359 [2007/09/06(木) 02:01:14 ] >>370 >>379 VB.NETはまったく未開の地だ。ちょっとみてみる。ありがとう。 >>377 >>378 ん。COMの話?
385 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:42:05 ] どうもデリゲートの使いどころがわからないんですが イベントのメソッドはわかるんですが おーデリゲートってすげー!!! っというような使用法ってどういうのですかね
386 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:48:38 ] //List<int> list; list.Sort(delegate(int x, int y){return y.CompareTo(x);});//逆順ソート
387 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 12:18:08 ] >>385 そもそもイベントはdelegateのシンタックスシュガー似すぎな一ツーの
388 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 12:40:05 ] >>386 それって匿名メソッドスゲーの例じゃないの。
389 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 12:46:03 ] C#2.0になってジェネリックや暗黙のインスタンス作成や匿名メソッドが付いて デリゲートが使いやすくなったけど、その前は単体ではあんまり積極的に使われなかったような
390 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:00:11 ] イベントとか意味わかんねえ +=と-=しかできないし なんに使うんだよ
391 名前:デフォルトの名無しさん [2007/09/06(木) 13:01:53 ] >>390 イベントのハンドリングだとおもう。
392 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:04:04 ] 普通にdelegate使った方が入れ替えられて便利じゃん 無駄なフェイルセーフだぜ
393 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:08:04 ] 一応プロパティと同じように実装の変更もできる
394 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:08:20 ] >>390 IDEによるポトペタ
395 名前:385 mailto:sage [2007/09/06(木) 13:17:22 ] >>386 >>388 そうですね匿名メソッドですね >>387 そうですか…なんかイベントの話になってきてますね んーデリゲートでこんな風にしたらすっごい便利! とかいう話ないですかね
396 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:45:38 ] void Hoge() { list.ForEach(Print); } void Print(int x){ Console.WriteLine(x); } コレクション関係以外にないかなあ
397 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:58:02 ] >>395 処理のインジェクションしたいところにはdelegateばんばん使ってます。 クラスの生成時とかにそのシチュエーションに併せて動作を変えたいとき便利。
398 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 14:00:41 ] インターフェースを実装したクラスを作るよりも楽>delegate
399 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 14:55:19 ] Action<T>は interface IHoge<T> { void Method(T arg); } とだいたい同等で class A { public Action<Foo> Action; } class A { public IHoge<Foo> Action; } これもだいたい同等 a.Action = delegate(Foo foo){ .... }; これと class FooHoge : IHoge<Foo>{ ... } a.Action = new FooHoge(...); これも大体同等 匿名メソッドなら直接かけるから一々定義したクラスを読まなくてすむので見やすい ラムダ式になるともっと便利になる 匿名メソッド使わなくても、引数さえ合えばどんなメソッドでもはまるから、 いちいちinterface実装したクラスを作らなくて済む分楽 でもやっぱり真価は匿名メソッドで出てくる
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のバグというわけではないわけですね。 わざわざありがとうございます。