otu
最近のC#スレの勢いはすごいね。昔のC#ごみだクソだ、Javaのまねw が懐かしく思える
前スレの >みなさんはデリゲートばりばりですか >現場であまり使う機会がないですがみなさんどうですか 使いまくりです。デリゲート、イベント、ラムダ式等々。 余計なクラス拡張しないですんだり、そもそもクラス自体作らずに寸でよい感じ
おつかれー。 まぁ、俺はJava使いだけど、仕事で色々な言語触るようになってから、 使いやすいもん使えばいい、という感じになってきたな。 開発環境も言語も新しいもんがポンポン出てるし、あまりこだわりすぎると芸の幅を狭める。
これってJAVAよりカンタンなの?
簡単かどうかはともかく糖衣構文だらけで便利ではある
14 :
デフォルトの名無しさん :2009/06/16(火) 21:00:53
言語自体はjavaよりも若干複雑 周辺技術だらけのjavaとは違ってMS技術だけ覚えりゃ使えるから使うのは簡単
0から勉強はじめて、それなりに動く物が 作れるようになるまでに必要な勉強期間はJAVAと 比べてどうなの?
>>14 ちょっと色々やろうとしたら大差なくならんかね?
DIとかO/Rマッピングとか
>>15 0からやる人にとってはC#つかドトネトが圧倒的。
UI付きで動くから物作ってる感が全然違う。
コードだけだからなー button.height=100; VisualStudioなら これを実行する前からフォームの概観がわかるが VSないならいちいち実効しなきゃわからん!不便!
19 :
デフォルトの名無しさん :2009/06/16(火) 22:56:19
labelで文字に縁取りしたり、行間の指定をするにはどうすればよいでしょうか?
だがしょせんJavaのまね
JavaがそもそもC++とかのまねだろ
いままでいったいいくつ既存のものを乗っ取ってると思ってるんだ
乗っ取られるから悪いんだろ
出自がどうあれ便利ならそれでいいじゃん
MS全方位で戦いすぎだろ
QDOSを買い取ったときに叩いておくべきだった
28 :
19です :2009/06/17(水) 01:09:24
ぐぐって class MyTextBox : TextBox { public void SetFontHeight(int height) { this.FontHeight = height; } } class Hoge { meTextBox1.SetFontHeight(20); } というクラスで行間の変更が可能だと見つけたのですが、 このテキストボックスをフォームに表示させるにはどうすればよいのでしょうか? Desiner.csを直接編集するのでしょうか?
ビルドしたらツールボックスに出てくるだろ publicなクラスじゃないとダメかも知れんが FontHeightの解説のメモに勝手な数字入れんなって書いてるけど
30 :
19です :2009/06/17(水) 01:58:44
ありがとうございます。ビルドしたらでてきました! しかし class Hoge { MyTextBox1.SetFontHeight(20); } の”(”の部分で無効なトークン '(' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。 とでてきてしまいます・・・・ >FontHeightの解説のメモに勝手な数字入れんなって書いてるけど あぁそうなのですか・・・・
メソッド内じゃないから
>>30 こんな感じでおk
ちなみにそのコードのMyとその前の空白が全角だぞ
class Hoge {
Hoge(){
MyTextBox1.SetFontHeight(20);
}
}
>>20 初期は確かにまねだったが、今はもうまるで別物と化している
ここにきて同系統の言語とは思えない。
34 :
デフォルトの名無しさん :2009/06/17(水) 13:01:58
クラス化したフォームを メインフォームに貼り付けたいんだが VC++の時の様に出来なくて困ってます。 メインフォーム側で以下のコードなのですが、 //ユーザー定義のフォームを生成 UserCtrlFrm usrFrm = new UserCtrlFrm(); usrFrm = "ほにゃらら状態を示すフォーム"; usrFrm.Text = "usrFrm"; usrFrm.Tag = 0; usrFrm.Visible = true; usrFrm.Location = new System.Drawing.Point(tekitou.X, tekitou.Y); usrFrm.Size = new System.Drawing.Size(184, 432); //メインフォームへ結びつけ this.Controls.Add(usrFrm); 指定した座標どころか、タイトルバーの無いダイアログとして表示されてしまいます。 他に何が足りないのでしょうか?
35 :
デフォルトの名無しさん :2009/06/17(水) 13:07:30
フォームではなくユーザコントロールとして作る 張り付けるときにはデザイナが使えるからコードは不要
StartPosition タイトルバーはFormBorderStyleあたりが影響するが
KeyEventArgsクラスの KeyDataとKeyCodeってどう違うの? ボタンを押されたら何かするってので Form1_keydown(object sender,KeyEventArgs e) { if(e.KeyCode==keys.Escape) これと if(e.KeyData==Keys.Escape) これが同じ動きなんだけど。 まったく同じものを二つも用意する意味がないから 何か違うんだろうけどHelpみても違いわからない。 誰か教えて
修飾キーが組み合わされるかどうか
<title>: プログラミング</title> HTMLに出てくるこういう文字列をデコードするメソッドってありますか?
うん
41 :
39 :2009/06/17(水) 21:20:56
えーと・・・ 文字参照をデコードする方法です
HttpUtlity.HtmlDecode
できました!ありがとうございます!
44 :
19です :2009/06/18(木) 00:25:25
>>30 さん
>>31 さんありがとうございます。
class Hoge {
Hoge(){
MyTextBox1.SetFontHeight(20);
}
}
とさせていただいたのですが、MyTextBox1がコンテキスト内に存在しません。と
エラーになってしまいます。クラスの継承などよく理解していない、ながらに質問してしまってすいません。
対処というか何が問題なのかすらわかりません。
よろしければ、どなたかヒントくださいませ。
なんでHogeとか出てくんの? Form1に貼り付けてLoadイベントとかで設定するもんでしょ
Form1.Controls.Add(MyTextBox1);
誰に刺せて頂いたの?
おまいらHogeとかHogeHogeとかどれぐらい使ってる?(´・ω・`)
Hogeってどういう意味?
ジャイアンみたいな感じ?
foo, bar
>>48 Hoge,Hehe,Gege
foo,bar,baz
くらいかな、サンプルで何でも良い何かを表すときだけしかつかわないし
Hoge Fuga Mage
俺のお気に入りはPiyo
x, xx, xxx, xxxx とかよく使ったりする。 すぐ消すか、後からリネームする変数限定だけど。
fox
ほげほげ(^q^)
Hoge、Hage、Hige 後で見て分からなくなるぜ
後で見るやつに適当な名前付けんな
Hoge には「意味がない」という意味があるから適当な名前と いうわけではない。一応。
Hogeがとあるmix廃人のhandle名が由来ってのわかる人はすでに鬼籍にしかおらんのかもしらん
幽霊さんですか?
>>60 Hogeは「意味が無い」と言う意味であれば、何かに使った時点で
その何かの意味を持つので、使うこと自体が間違いである
Hageは?
Hogen Sie, bitte.
>>61 このあいだshowさんがあれこれ書いてた
てか、ウニマガでhogeを使った人はmixとの接点がないのよね。
>>63 適当な名前をつけると意味があるように見えて混乱するので、
変数名に意味がないことを示して気に留めるなってことを示す
名前だから「適当な名前」じゃないよって話。
本来それを否定するものだから。メタ構文変数。
実コーディングに使うな(実コードで意味がないものなどないと
いう考え方)とかはまた別の話。
テスト的に動かすときに、クラスメイトか変数名でHogeは多用されています(´・ω・`)
aaa,bbb
>>70 そのテストプログラムが間違って配布されたら…ガクガクブルブル
うp wktk
そういえばジャグ配列と多次元配列でパフォーマンスが違うのは有名だが、 環境によっても左右されるんだな。 家のPCだと簡単な計算ならジャグ配列の方が速い時が多いのに、 全く同じコードを研究室のPCで実行すると多次元配列の方が圧倒的に速い。 この辺はJITコンパイラがまだまだだな。
ちなみに CPU に違いとかあるの?
JITが吐くマシン語が見れたらいいのに
76 :
デフォルトの名無しさん :2009/06/21(日) 15:04:45
CheckedListBoxみたいなやつで1つの項目に対して項目を追加できるのを 使いたいんですが名前がわからないので誰か知ってたら教えていただけますか。
日本語でおk ListView……か?
よくわからん・・・ TreeView にチェックボックスつけたような感じ?
79 :
デフォルトの名無しさん :2009/06/21(日) 15:22:15
キャプチャして画像だけあげるとかしようよと思わんでもない TreeViewという言葉が出てこないのはさすがにどうかと思う
TreeViewそのままだね。CheckBoxes = True で。
>>75 C#Builderならブレークポイントを掛けたら見れた
>>82 JIT結果のよ?
MSIL コードじゃなくて、それをさらに JIT したネイティブのマシン語。
84 :
デフォルトの名無しさん :2009/06/21(日) 16:38:58
TreeViewそのままでしたね、ありがとうございます。 テキストボックスに入力されているテキストとCheckedListBoxに追加した項目の名前を同期させたいと 思ってTextChangedで変更されてる瞬間にテキストを設定してるはずなのですがうまくいきません。 Refreshも最後にやったりしてるんですが変更されません。違う箇所で項目の名前の変更自体がうまく いってないみたいなんですがどなたかわかりませんか?
>>83 そうだよ
x86のネイティブコードとソースの混合画面が見られた
C#Builderもラインナップから消えちゃったけどね(´・ω・`)
VSだとデバッグ>逆アセンブル エディションによって見れないかどうかは知らんが
>>84 TextChanged内のコード書いてみ
>>73 ほんとかよ、ちょっと考えられないんだが。
通常はどっちがパフォーマンスいいの? 多次元ぽいけど。
要素の参照はジャグの方
原理的には多次元配列の方が早いはずなんだけど、 .NET の場合は1次元配列の場合にのみ専用の IL 命令持ってるせいで、 JIT 次第で多次元配列がジャグ配列より遅くなることも多々あるとか。
93 :
デフォルトの名無しさん :2009/06/22(月) 12:43:11
フォームにBackgroundImage貼り付けてタイルっぽいデザインにしたら 途端にもの凄く重くなった。 VC++の時も貼り付けてたがこんなに重くならなかったんだが・・・ 何か設定がまずいのかな? ローカルリソースのインポートからjpg指定してるだけなんだけど・・・ プロジェクトリソースにしても余り変化は見られなかった。 どなたか軽くする方法知ってる方いたら教えて下され
94 :
デフォルトの名無しさん :2009/06/22(月) 17:16:56
OnPaintBackgroundをオーバーライドして自分で描画してみたら
何もしてない素のフォームアプリで重いの?
タイルじゃなくてものすごく大きな画像を貼ってるんじゃないのか?
97 :
デフォルトの名無しさん :2009/06/22(月) 17:49:40
こまいファイルを並べるように表示してるんじゃないの。 一つの大きな画像指定するとかすれば
でかい画像でかつタイル指定だと重い気がするな タイルはデフォなので、はずして試してみるといいかも。
>>93 Stretchとかリッチな条件で貼ってない?
みんなが言うようにデカい画像→縮小でタイル表示は 元のサイズ次第で死ぬほど遅いね
縮小したイメージでタイルしなはれ(´・ω・`)
102 :
デフォルトの名無しさん :2009/06/22(月) 22:14:27
アドバイスどうもです。 縮小してやってみます。 そんな大きくないんだけどなぁ 後、余り小さくてするとちょっとしたグロ画像になってまうかもw
ファイルのパスだけを得たいためOpenFileDialogを使用していたの ですが、使用中のファイルの場合「このファイルは使用されています〜」 というエラーメッセージが表示されて選択できません。 回避策はあるでしょうか? ・・自分で作るしかない?
>>103 プロパティにない以上OpenFileDialogクラスじゃどうしようもないね
>>68 その系列はロビン電子経由で直接本人と面識ある派だと思う
>>106 そうなのかなぁ。
Hoge!さんから、メタ構文変数のhogeへの系譜(があるのか否か)って
まだ検証されてないよね。
>>104 >>105 ありがとう。
どうしても解決できなかったのと、他の理由で
作る必要が出たので自作しときます。
110 :
デフォルトの名無しさん :2009/06/29(月) 19:37:54
webBrowser.Navigate("
http://www.xxx/ ");
でアクセスするとアクセスした記録が残るのに
WebRequestなどでアクセスしてもninjaツールなどで
アクセス記録が表示されないのはなんでやろ?
agentだろ
112 :
デフォルトの名無しさん :2009/06/29(月) 20:21:45
UserAgent設定してみたけどあかんね…
スクリプトとimg辺りで履歴取ってんだろ
相談させてください。 PDFのセキュリティ設定(コピー許可、印刷許可など)を読み取りできるライブラリを どなたかご存じないですか? アンテナハウスのサーバーベース・コンバーターはR/Wとあったからできそうですが、 たったそれだけのことに導入するのは辛すぎです。
116 :
デフォルトの名無しさん :2009/07/03(金) 20:50:41
C#2008を使用しています。 エディタのプロパティウィンドのように DataGridViewに指定クラスのプロパティを 表示、編集することは出来るでしょうか? DataTableを作って表示させることは出来ると 思いますが、できれば Grid.DataSource = クラス のように簡単にいかないものかと。 BindingSourceを使ってもうまくいきませんでした。
PropertyGridじゃだめか
PropertyGridって表示する分には超お手軽だけど ちょっと凝ったことしようとすると一気に難しくなるよねw
119 :
116 :2009/07/03(金) 21:09:57
ぬぉぉおぉぉぉ どんぴしゃです!ありがとう! C#って思った以上にいろいろ揃ってますねぇ
>>114 中身はテキストベースだから、仕様書を精査すれば気合でパースできなくもない
Javaでいくつかライブラリあるから参考にしてみるのはどうか
121 :
デフォルトの名無しさん :2009/07/04(土) 00:33:17
PropertyGridは開発者専用と考えたほうがいいよ そもそもこんなものが標準のライブラリにあるのがおかしい WPFでは無くなってるし
何がおかしいの?
高機能で自動的過ぎて潰しが効かないという意味じゃね? SelectedObjectのpublicなプロパティを自動表示するとかの部分。 明らかにユーティリティであって、コントロールとしては度を越えている。 WPFでは無くなっているっていうより、まだまだ練れていないから、導入は 見送っているんじゃないかなMS。
>>123 自動表示するから楽ちんなんじゃんw
カスタムしたければ好きなように隠せるし
存在しないプロパティをあるように見せたりも出来る
WPFでなくなってるのって リストとかグリッドがアホみたいに高機能化して PropertyGridの存在意義がなくなったからだろ リストやグリッドの子要素として「何でも」埋め込めるんだぜ 自動表示ってのもBindingでどんなデータにも紐付けられるし
126 :
デフォルトの名無しさん :2009/07/04(土) 09:37:02
いずれにせよ開発者向けのツールを作るためのコントロールであって 一般のユーザーに触らせるのは間違い
>>114 やったことないからよくわからないけど
Acrobat SDK とか使えばできるんじゃないの。
Adobe Reader とかインストールされた環境が前提になるだろうけど。
128 :
デフォルトの名無しさん :2009/07/04(土) 11:35:32
hoge.GetType()==typeof(Hoge) で型チェックしたらえらい速いんだけどJITで特別に最適化されてたりする? 左辺をいったんローカル変数に入れたら10倍くらい遅くなるみたい
>>127 たぶんむり
セキュリティ絡みはAdobeの有料アプリ買わないと出来ない機能だし
どうやっても金払わないことには無理だろうね
べつにセキュリティの設定を変更するわけじゃないんじゃないの。 たんにプロパティみたいだけでしょ。
null と 空文字 どちらでも良い場合、どっちで管理するのが一般的なの? 空文字だと??が使えなくなるから不便かな? nullはnullで何か面倒なことになりそうな気もするし
文字列の操作なら"" オブジェクトの操作ならnull
>>128 確認してないけどコンパイル時に is に変えてるんじゃないの?
ローカル変数に入れちゃうと is に変換できないからとか
isに変えてるわけはない。 動作が変わってしまうから。 変数に入れると遅くなるのはTypeの取得が走るからで、 何らかの方法でハンドルの比較だけに変えられてるとかか?
Type.GetTypeHandle(hoge)==typeof(Hoge).TypeHandle こんな感じになってるとか。
ILを見た限り違いはなかった。JITでいろいろやってるのかな。
139 :
114 :2009/07/05(日) 08:19:35
>>131 iTextSharpならTitleとAuthorの読み取りに使ったけど、
AllowCopy関連はWriteできるけどReadIがなかった(と思う)。
140 :
デフォルトの名無しさん :2009/07/06(月) 08:39:41
コメントのXMLドキュメントタグって使ってる? どうにもとっつきにくいわ、冗長だわ、読みづらいわで使わずじまいなんだけど。
なにそれ?といってのける俺はもしかして勝ち組?
大敗
>>140 あれは、メタデータに加工するためのものだから、読みづらい言われても…
// // 機能 : あんなことやこんなことを行う // // 機能説明 : あんなことやこんなことを行う。 // その中であんなことやこんなことが起きればあんなことやこんなことを行う。 // // 引数 : ARG1 - あんなの // ARG2 - こんなの // // 返り値 : そんなの // // 備考 : 簡単なサンプルです。 //
XMLドキュメントタグを使わないと、インテリセンスにちゃんと説明が出てこないだろ。
>>140 どうやって読んでいるのか気になるところ
あのXMLは超便利だろ インテリ効くしビルド時に出力すればヘルプファイルも作れるし
とあるクラスからDispoes付きのコレクションを取得して foreachにかけるとき、全部Dispoesすべきなんでしょうか? 要素は出来るだけ早く開放したほうがいいものを想定しています。 using( クラス ) { using( コレクション = クラス.取得 ) { foreach( 要素 in コレクション ) { 要素.Dispoes(); } }
そんなんしらんがな クラスとコレクションと要素の製作者に聞け
>>140 とっつきにくい?
冗長さと読みづらさはまあ分からんでもない
コードが多少ごちゃごちゃになるからな
とっつきにくいことは無いだろう
関数とかの宣言の上でスラッシュをカカカっと三回入力するだけで
テンプレ出てくるんだから
>>148 using()するなら、Disposeしちゃ駄目。
>>151 usingしてるのはコレクション
disposeしてるのは要素
>>149 のツッコミが正しい
Dispose は何度呼ばれても大丈夫なように作らなければならないから 何度呼んでもいいべ
あれだな、とりあえず ・/// で VS は色々生成してくれる ・エディタのツリーでコメントはたためる ・インテリセンスのツールヒントに注目 ・Sandcastle とか使ってみる この辺押さえろみたいな
>>156 そんな所見やすくてもしかたないだろ、ヘルプは使う所(インテリセンス)で見るんだから
そんなにたくさんコメント書くの('A`)マンドクセ
わずか2,3行のメソッドに長々としたコメントが付いてるのは糞ウザイ
俺が一生懸命コメント書いてドキュメント生成しても誰も読まない
無駄な努力乙
ドキュメントはたまにしか見ないな。 インテリセンスとVSのオブジェクト ブラウザでほとんどの場合は事足りてる。
ドキュメントは全体の流れと思想が書いてあれば大体足りる。
そして投げられる例外の記述が無くてキレる
>>160 XMLコメントやインテリセンスの登場は、ソースを読むというくだらない時間を割くのはやめるといいよ
という事なんだと思うよ
最近C#慣れしてきて、だんだんコメント不要の意見が変わってきたオレ
ソースコードの変更にコメントの変更が遅れるぐらいならソースコードをきっちり書けというのは間違っている
コメント(仕様書)にソースコードが管理されるべきだなとw
こんなに楽ちんならもう元には戻れない
WebもASP.NETで!
WEB と Web は違う。クヌース先生の Web サイトでも見てこい。
>>165 MSDNですら書いてない例外が飛んでくることは普通にあるしな。
最近やたら煽りが多いと思ったらストールマン発狂つづいてオプソ信者発狂でC#狙い撃ちだったんだなw タコつぼで暴れてろよお前らよ
,,-‐----‐、 , -'"` ̄ ̄"`''-,__, --‐‐-.., / 、゙ヽ、 ‐-'´ ヽ‐- / / ヽ ,/´ .., ヽ,,l_)' zェェェァ' ;rfァt ヽ ,ト/ / ヽ / ヽ,r' ,l′ _,,, . __,, ,l゙.-〈__r,'、 ヽ_ _.l ヽ」 ,l .イてソ` l イにj`,/ ゙‐ヽ、_,, /l ,l l| −'´ll ,l rソi" ヽ じ'' f゙l .,//゙l //\ ココおかしいんじゃねえか l`l| l|ヽ v'⌒ヽ .,ノ j/ |l // } l \ l| ,l l_U> r‐--‐ァ ,l |,l // l / '\ l|`l ゝ_,´ ゙ヽ__r′ .,.' ___l ヽ /
なんかめったにこのスレで見ない大 AA が現れたの見て
>>171 はひょっとしてとちょっと思った
C#のソケットですが、.NET1.1から何か変更はありますか? ソケット関連の本を買おうかと思ってるのですが、2004年の ものなので情報が古いかなと思いまして。
1.1はもはやC#の方言だからやめた方がいい。
MSDN見て自分で補正できないレベルだったら、2.0以降用を探すようにすすめる。
178 :
デフォルトの名無しさん :2009/07/10(金) 21:42:28
イベントに関して質問です。 イベント += Onイベント イベント -= Onイベント のように+=および-=演算子でイベントを登録/解除できると思いますが、 イベントにOnイベントが既に登録されているかどうか判断することは出来ないのでしょうか?
うん
180 :
デフォルトの名無しさん :2009/07/10(金) 21:57:56
ですよね。 残念。
自分で定義したイベントなら取れる。
>>178 通常は判別できる必要性など無いと思うが
逆に必要と思った理由を教えて欲しい
ただし、「多重登録の回避」という回答は却下
自分で定義したイベントでなくても取れそうだ。 Reflction なコード書くのが面倒だから、サンプルは作らんけど。 Component の Events、EventHandlerList、Delegate.GetInvocationList() あたりを 調べてみて。
それはそれに結びついている保証もないというか ロジック確認してみたいなハックに等しいから 分離を破壊する(実装変わったら終了って話)ので さすがに薦めるのどうよ アクセサが add/remove しかないんで無理でもう いいじゃん
クラスAがイベントHogedを持っていて、クラスBのなかでクラスAのインスタンスaを作り自分のメソッドHogeをHogedに登録するとする。 あるタイミングでaは破棄されるんだけど、そのときHogeはHogedからRemoveする必要ないよね?
うむ
187 :
デフォルトの名無しさん :2009/07/11(土) 11:05:58
COBOLは、データラベルについてREDIFINEで再定義を行うことができますが、 C#でも同様に、 01 DATE 05 YY 05 MM 05 DD みたいな再定義はできますか? よろしくお願いします。
union かなあ
ってここC#か、MarshalAs属性とか?
>>184 保証はあるだろ。
できる/できない の話として「できる」ってだけで、
薦める/薦めないの話じゃない。
ないよ イベントはデリゲート型ではあるけど実装としてデリゲートを使う必要はない
+=、-= でデリゲートを使わない、具体的な例を頼む。
int a = 1, b = 2; a += b; a -= b;
>>190 いや、完全に実装依存。
あるイベントについて現時点で動作するロジックなら書ける。
でも、全てのイベントについて今後永久に動作するロジックは無理。
>>191 イベントはデリゲート型ではあるけど
これは違うような。。
196 :
デフォルトの名無しさん :2009/07/11(土) 15:13:43
C#のテキストボックスで、 ・高さ指定&文字列の縦配置を中央にする。 ・高さ指定&padingを設定する。 以上のいずれかは可能でしょうか。 老人向けの大きな見栄えの良いボックスを作りたいのですが…。
>>185-186 の件だけど、これってデリゲートが弱参照だってことだよね。
ヘルプで見つからないフシアナな俺に、どこに書いてあるか教えて。
198 :
197 :2009/07/11(土) 16:16:58
あ、ごめん。aを破棄した時か。 じゃあ問題ないな。
199 :
デフォルトの名無しさん :2009/07/11(土) 16:33:39
Win32APIのスレで聴いたのですがスレ違いとのことでした。.NETの クラスで解決できるでしょうか? 現在、.NETアプリケーションでWebBrowserコントロールにおいて フォルダのExplorer表示を出しています。そうすると必ずあの青色の 「タスクメニュー」が現れてきます。 通常のエクスプロ−ラだとそれをフォルダツリーに置き換えたり、 検索ツールに置き換えたりできました。 自分のアプリケーション上で、あのタスクメニューを消してしまうことは できるでしょうか?できるようであればその方法を教えてほしく。 ちなみに、エクスプローラのオプションで「全般」タブ→「作業」のところ で、「従来のWindowsフォルダを使う」を選ぶとタスクメニューはでなくは なるのですが、そうすると、Xpでは「写真」表示ビューが使えなくなって しまうので、「フォルダに共通の作業を表示する」の方で使いたいので した。このオプションの状態で、プログラムから「タスクメニュー」を消す 方法がありましたら教えてください。 よろしくお願いします!
>>187 自分ならプロパティで実装するかな?
.NETクラスライブラリのSystem.DateTimeにも
Year, Month, Dayプロパティがあるから、プロパティによる実装がC#流のはず
>>196 Multiline=trueにすれば高さ指定はできるけど、
老人向けならフォントをでかくすればいいだけじゃないの?
>>200 追記
REDEFINES句の例としてはSystem.DateTimeは不適切だったかも
01 DATE-STRING PIC X(6).
01 DATE REDEFINES DATE-STRING.
05 YY PIC 9(2).
05 MM PIC 9(2).
05 DD PIC 9(2).
のようなことをやりたい?
これもプロパティによる実装が良いと思う。
203 :
デフォルトの名無しさん :2009/07/11(土) 23:37:33
>>202 ありがとうございます。
プロパティをオリジナルで定義するということでしょうか。
204 :
デフォルトの名無しさん :2009/07/11(土) 23:42:26
>>201 ありがとうございます。
操作性と見栄えを重視したシステムにしなければならないんので、
テキストボックス内の上下の余白をゆったり目にとって、
かつ中央揃えにしたいんです。
これはc#では不可能なのでしょうか…。
>>204 TextBox を使わないで独自コントロールを使うとか
Panel 上に透明な TextBox を乗せてごまかすとか。
system.windows.controls.control.padding
>>204 少なくとも、C#そのものは関係ない。
(というか、C#のテキストボックスなんてないだろ)
どういうGUIコンポーネントを使うかは関係がある。
WPFを使えばどうも簡単にできるみたいだけどね・・・。開発環境がまだ完成しきってないし、Vista以降ターゲットになっちゃうけど
211 :
デフォルトの名無しさん :2009/07/12(日) 01:25:20
>>206 そんな名前空間、あったっけ…?
探しても見つからない(-_-;)。
すいません。
VisualC#2008で、フォームアプリケーションを作っているんですけど
フォームの多重表示を禁止したいのですが、検索してみつけたソースどおりにしても
まだ多重表示をされます。なにかソースがおかしいのでしょうか?
表示するフォーム=about.cs
about about = null;
if ((about == null) || about.IsDisposed)
{
about = new about();
about.Show();
}
参考ページ:
ttp://homepage3.nifty.com/midori_no_bike/CS/form.html
ローカル変数においといちゃダメだろ
214 :
デフォルトの名無しさん :2009/07/12(日) 01:44:44
>>206 C#でその名前空間を使うにはどうすればいいの?
216 :
デフォルトの名無しさん :2009/07/12(日) 03:06:00
C♯では、テキストボックスのパディングや縦位置の中央揃えが存在ないということ? そんな…まさか…。
>>216 C#に押し付けるとは・・・まだまだ青いな
218 :
デフォルトの名無しさん :2009/07/12(日) 06:56:46
>>217 もしかしてこれからはWPFの時代ですかね…?
C♯でできる裏技があればゆいのですが(*_*)
WPFの柔軟性は異常。 Formsは今後のバージョンアップ は見込めないらしいね。
____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ | |r┬-| | 今後永久に動作するロジックは無理 \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // だっておwwwwwwwwwwwwwwwwwww | :::::::::::(⌒) | | | / ゝ :::::::::::/ 当たり前だろwwwwwwwwwwwwwww | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / バ | | l||l 从人 l||l l||l 从人 l||l バ ン ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
223 :
デフォルトの名無しさん :2009/07/12(日) 12:47:15
>>215 俺も読んでみたけど、分からないんですが…。
テキストボックスのプロパティで縦の位置を中央揃えに指定できないし、
windows.control名前空間もC#だと見当たらない。
>>216 ぐぐっても出てこないよー…。
225 :
デフォルトの名無しさん :2009/07/12(日) 13:48:29
system.windows.controls.control.padding ってアドインみたいなものっすか? 3.5入れてるけど出てこないんです。
227 :
226 :2009/07/12(日) 14:09:55
>>225 暇だからきちんと説明するか。
新規のwindowsアプリケーションを作成する。
追加->新しい項目->ユーザーコントロール(WPF)
UserControl1.xamlの<Grid></Grid>要素の間に
>>226 の<Button>〜</Buttion>を入れる。
デザイナにPaddingと表示されたButtonができる。
これをダブルクリックすればvoid ChangePadding(object sender,RoutedEventArgs e)がソースに自動追記される。
>>226 にあるコードを実装する。
そしてwindowアプリケーションの方に戻り、Form1のデザイナの上にツールボックスからUserControl1を貼り付ける。
以上
228 :
デフォルトの名無しさん :2009/07/12(日) 14:42:14
>>227 ありがとうございます。
すみませんが、
テキストボックスの高さをゆったりともたせ、
paddingを使って文字を縦中央に配置したい場合、
このコントロールでどう設定すればよいのでしょうか。
どうか、見捨てないでください。
230 :
デフォルトの名無しさん :2009/07/12(日) 15:26:29
>>229 C♯は関係ないの?
今までの話とちがうよ。
そもそもFormsもC#と関係ないがな(´・ω・`)
>>230 System.Windows.FormsもC#と関係ない。
C#という言語を使って、System.Windows.Formsというアセンブリを使う
だけ。C#から使おうがVisual Basicから使おうがIronPythonから
使おうが、使い方に違いはない。
言語(C#)とフレームワーク(.NET)とその中のライブラリ(System.Windows.Formsアセンブリ)の
区別が全くつきませんか?
232を書いた後、あれ、アセンブリは不適切?名前空間と言うべきだった? でもこの文脈で区別するとますますとっつきにくくなるよな。 と思ったが、System.Windows.Forms.dllだった。よかった。
234 :
デフォルトの名無しさん :2009/07/12(日) 15:50:18
235 :
デフォルトの名無しさん :2009/07/12(日) 15:52:06
>>229 結局、テキストボックスの縦中央に配置するにはどうしたらよいの?
プロパティで項目一通り探してみればいいダロ VerticalContentAlignmentとかそのものな項目が見えるけど
238 :
デフォルトの名無しさん :2009/07/12(日) 16:45:01
言語非依存WinFormsスレなんかあってもまず機能しないだろうな WPFは現状VBerがほとんどいないからこそ専用スレが成り立つ
>>238 実際、以前.NETスレがあったが、過疎だった。
みんなC#とかVB.NETのスレへ流れるもんだから。
240 :
デフォルトの名無しさん :2009/07/12(日) 17:01:34
WPFにはXAMLという共通言語があるし 言語とライブラリを混同するようなレベルの初心者ユーザも少ないからな
>>212 aboutっていわゆるバージョン情報のフォーム?
だとすると、面倒なことをせずにShow()ではなくShowDialog()で一つ表示する方法が普通だと思うけど
242 :
デフォルトの名無しさん :2009/07/12(日) 17:29:10
>>237 あの…恥ずかしながら、
ユーザーコントロールを追加しましたが、
テキストボックスのパディングをどこで設定するのか…
またはテキストボックスの垂直の位置をどこで中央にするのか…
(水平の中央はありますが)
が分からないんです。
>>239 俺もそのスレ見てたわ。
次スレどうしようか悩んだけど、過疎ってたのでやめといたら結局誰も立てなかった・・。
244 :
デフォルトの名無しさん :2009/07/12(日) 17:33:08
Gridの中にテキストボックスを入れるんだよ
テキストボックスじゃなくていいならラベルで出来る
246 :
デフォルトの名無しさん :2009/07/12(日) 17:37:31
関係ないけど、WPFではLabelは特殊なコントロールで、普通の文字描画には使わないんだよ TextBlockというのを使う
247 :
デフォルトの名無しさん :2009/07/12(日) 17:41:23
グリッドってなんだろ… (T_T)? ところで、テキストボックスのパディング設定は果たしてできるのかな。
Paddingの追加って、こんな感じに入力するだけでしょ。 <TextBlock …… Padding="10">……</TextBlock>
249 :
デフォルトの名無しさん :2009/07/12(日) 17:49:58
Paddingプロパティがあるだろ? パディングはそのコントロールの親(GridやBorderなど)を基準にして行われる WPFはとにかくコンテナ(WinFormsでいうPanelみたいなもの)をネストしまくるんだ
250 :
デフォルトの名無しさん :2009/07/12(日) 18:19:59
>>249 それは、Windowsアプリケーションでも可能なの?
何この馬鹿は。 やってから言えよカス。
253 :
デフォルトの名無しさん :2009/07/12(日) 18:26:27
Windowsアプリケーションには textblockとかgridってあるのかな。
254 :
デフォルトの名無しさん :2009/07/12(日) 18:30:15
WinFormsなら無い ユーザーコントロールに枠線消したTextBoxを張る みたいな汚い方法しかない
255 :
デフォルトの名無しさん :2009/07/12(日) 19:02:18
ビジュアル重視ならば、 WPFで作った方がよかったんじゃないかな。 俺もよく知らないけど。
見た目こそWPFの領分だね
257 :
デフォルトの名無しさん :2009/07/13(月) 00:55:49
しまったな… 俺もWPFで作れば良かった。 できることはWindowsアプリケーションと変わらないし。
何だか勘違いしてるようだけど、WPFで作ってもWindowsアプリケーションだよ。 場合によってはMFCとか.NETじゃないやつまで含んじゃう言葉だから、誤解を避けるためにWinFormsって書く方がいい。 WinFormsで見た目をちょっと改善しようと思ったら、自前で描画するとか泥臭い手段しか無かったというのはよくある話。 WPFでは馬鹿みたいに(褒め言葉)柔軟で何でも出来るけど、設計思想がWinFormsやMFCとは別物の新しいやつだから、最初は戸惑うと思う。
そして起動が遅いと言われるわけですな
261 :
デフォルトの名無しさん :2009/07/13(月) 11:19:26
ListViewでItemをひとつひとつ.Selected=Trueする方法で選択していくと、 Items.Count が非常に多い場合にはあまりに時間がかかりすぎることが わかりました。 Items.Count=10000ぐらいで2分ぐらい(Core2Duo/2GHz)。 ところが例えばExplorerでファイルを同じくらい用意してやってみると瞬時に 全部が選択されました(3秒ぐらい)。これと同じ程度のスピードで選択 したいと思います。良い方法がありましたらご指導のほどお願いしたく。 よろしくお願いします。
試したけど3秒くらいだったよ。 イベントハンドラがあったりする? あと描画関係なら、BeginUpdate - EndUpdateで挟むとか
263 :
デフォルトの名無しさん :2009/07/13(月) 11:59:23
>>262 実地に調べてまでして下さり、大変ありがとうございます!
いろいろすみませんです。
>BeginUpdate - EndUpdateで挟む
これたった今やってみました。結果として時間の変化はありませんでした。
>イベントハンドラがあったりする?
わかりました、すぐ調べてみます。どうもです!
264 :
261 :2009/07/13(月) 12:15:11
>>262 >イベントハンドラ
この件、仰るとおりでした。Selectされた時点で、何かのメッセージの
Hookが行われているようでした!これは別のコントロールのものでしたが
対策を考えてみます。ご指導、大変どうもでした!助かりました!
インデックスで回してない? foreachにすれば大丈夫だと思うけど。
266 :
デフォルトの名無しさん :2009/07/13(月) 23:23:23
VirtualModeにしてみたら?
良く使うジェネリックコレクションは何? とりあえずList<T>とDictionary<T>覚えておけばいい?
Dictionary<K,V>だった。
K,VじゃなくてTKey,TValueな 型パラメータの命名ガイドラインは接頭辞Tプラスその型引数の意味 (ただし用途が明らかな場合List<T>とかはT一字でOK) 2.0ならあとはLinkedList<T>, KeyedCollection<TKey, TItem>辺り? あ、Queue<T>とStack<T>があった 3.0(WPF)ならObservableCollection<T> 3.5はHashSet<T>とか? コレクションじゃないけどやはり最重要はIEnumerable<T>だな
>>269 ふむふむ。
IEnumerable<T>はLINQで出て来るなあ。
ObservableCollection<T>はWPF本で出てきたけど
まだいいや。
List<T>
LinkedList<T>
KeyedCollection<TKey, TItem>
Dictionary<TKey, TValue>
IEnumerable<T>
とりあえずこのあたりからマスターする。
あ、KeyedCollectionは後で良いよ つか全体にマスターするほどでもないような IEnumerable<T>以外は
T[] も忘れないで上げてください、影薄いですけど
273 :
デフォルトの名無しさん :2009/07/14(火) 21:15:32
>>269 .NETの型引数の命名規則は合理的で優れてるよな
java式のK,Vとかイミフ
Tとかそういう意味だったのかw ほかの引数にSとかUとかつけてたわw
c++テンプレートのTypenameだよね
SとかUつける人いるんだw
アルティメットファイナルクソワロチw ま、俺はVをつけてたけど。
>276,277 いや、Tの前とか次の文字とかw HogeHoge<S,T,U>ってかんじ。
型引数を真面目に変数っぽく名前考えてるのって C#くらいだよね javaもc++もそんな習慣無い
281 :
デフォルトの名無しさん :2009/07/14(火) 22:23:47
C++には型引数に普通の名前付ける文化もある(STLなど) わかりやすいけど普通の型名と見分けがつかないので、 .NETの(プリフィクス)+(意味)はその落としどころ
>>281 今VC9見たら真面目に命名してるな
VC6とか_Aとか_Cとかだったんだが
>>280 .NET も初めからそうだったわけではなく、型引数のこの命名は
ベータかどっかでやっぱりこうしようみたいに一気に変えたんだよ
確か。Connect とかの Suggestion も絡んでた気がする
出来上がりとか見てみんな思うところがあったんじゃないかな
>>283 .NET 2.0ベータ中は一文字だった、ように記憶してる
リリースされた正式版のドキュメント見て初めは違和感あった
制約がわかりやすいのはいいよね TEventArgs : EventArgs なんか神
>>284 ああごめん。
>出来上がりとか見て
はベータのです。
なんか変わると発表したときにフィードバックの存在を
書いていた記憶があるから。
288 :
デフォルトの名無しさん :2009/07/15(水) 03:22:30
SerialPortクラスについて質問 DataReceivedイベント使えばVC++の時みたいに自分でスレッド組まなくて済みそうで楽出来そうなんだけど 実際に受けてみると欠ける時がある STXhoge123ETX ↑見たいなデータが改行無しで垂れ流しで延々と来るんだけど たまに STXhoge123ETX STXhoge124ETX STXhoge125ETX STXhoge126ETX STXhoge127ETX STXhoge128ETX STXhoge129 ←ETXが受けれて無かったり STXhoge134ETX←間の130-133までが無かったり・・・ private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string recvData = serialPort1.ReadExisting(); Console.WriteLine(recvData); } こんな感じで直接出力しても途切れる・・・ 何故なんでしょうか?誰か詳しい人教えて
すいません。質問ですが、 new RelayCommand(param => this.OnRequestClose()); この=>はどういう意味があるのでしょうか?
>>290 おお、ラムダ式。
どうもありがとうございました。
ジェネリクスのクラスの型パラメータを配列に制限したい のですが、以下だと上手く行かないようです。 class Widget<T> where T : IEnumerable { public void Iterate(T arr) { foreach (object item in arr) { Console.WriteLine(item); } } } ・型パラメータTは、競合する制約IEnumerableおよびobjectを継承します ・foreachステートメントは、TがGetEnumeratorのパブリック定義を含んで いないため、型Tの変数に対して使用できません。 というエラーが出ます。どうかご教示願います。
間違ってない それだけならコンパイル通るし動く 他のところに問題がある
ジェネリックでdelegateを指定するにはどうすれば いいでしょうか? やりたいことは public delegate_T func<delegate_T>( string str ) こんな感じなんですが。
コンパイル時にチェックするのは無理 Expression<TDelegate>みたいに、名前だけそれっぽくして実行時にチェックする
typedefがないので無名になるが Func<string, int> func; funcがstringを受け取ってintを返す関数になる 戻り値がdelegateって言うなら Func<string, Action> func; とかです
>>294 レスありがとうございます。
using System.Collections;
を宣言していませんでした。
>>296 >>297 上で書いたような書式じゃ無理ということとですね。
Funcとか知らなかったので試してみます
ありがとう
C#入門としてオススメな本があれば教えて下さい
301 :
デフォルトの名無しさん :2009/07/15(水) 16:20:19
>>291 レスありがとう
フロー制御に問題がある様には思えません
送信側と合わせてるので
疑似で
STXhoge0ETX〜STXhoge5000ETX
までのデータを作ってtxtファイルにして
ハイパーターミナルからテキストファイルの送信で流してみたんですが
5000までデータはあるのにコンソール上には200行から300行くらいまでしか出てこない・・・
フロー制御もいろいろ設定変えて試したんですが変わらずです・・・
症状はどう見てもバッファあふれだろう。 >フロー制御に問題がある様には思えません 経験的にいえば強く思い込んでるところが間違ってる可能性が高いな。 コントロールパネルで設定したとか言うなよ。 あとPC−PCでの接続だったらリバースケーブルになるけど、 結線に種類があってハード制御用のラインが自分のほうに戻ってきてるのもあるから要注意。
threshold設定してるだけ? アレってあんまり信用ならなかったとおもう
概算じゃなくてデータのサイズきっちり計算してバッファと比べたりしようぜ
すいません。質問です。 C#や.NETの資格で、MS社以外のものはありますか? また、MCPですが、 70-505 TS: Microsoft .NET Framework 3.5, Windows Forms Application Development などの「開発経験が 1 年以上」は、大学の研究室での開発や趣味プログラミングでも大丈夫でしょうか?
いいえ
sample/../foobar.txt / を足して味噌
>>308 いや、それはわかるけど、俺が聞きたいのはそれじゃない。
".." が消えているのはなぜかと、どうすれば回避できるのか、だ (´・ω・`)
OriginalStringプロパティ
URIの仕様としては
>>306 の動作は正しいのかい?
RFC2396 Similarly, parsers must avoid treating "." and ".." as special when they are not complete components of a relative path. これ?
sample.. の .. を特別扱いしちゃいけないから
>>306 の動作は仕様を満たしてないってことかな
>>310 Console.WriteLine(new Uri(new Uri("
http://example.com/ "), "sample../foobar.txt").OriginalString);
ごめん。こういうのを書いて、ちょっと (´・ω・`) とした。
RFC か何かで規定されているなら、まあ無視しちゃって良いかなって気にはなるんだけど、
まだ読みきってないス (´・ω・)
全然関係ない。 趣味でも十分な奴もいれば仕事でも無理な奴もいる。
ふらっとの誤爆か?
Path.DirectorySeparatorCharとPath.AltDirectorySeparatorCharを くっつけたものを出来ればconstで定数にしたいんですが どう書けばよいでしょうか? もしくはC++の関数内で static string str = "123"; みたいなことは出来ないでしょうか? 別な方法はありますが、これが出来るとすっきりしそうなのです。
readonlyじゃ駄目なの?
>>318 なるほど。うまくいきました。
readonly static string str = string.Format( "{0}{1}", Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar );
ちなみに
>もしくはC++の関数内で
>static string str = "123";
>みたいなことは出来ないでしょうか?
これって出来ますか?
できない
そうですか・・。 了解しました。
>>319 C++で関数内のstatic string str = "123";は可能では?
まあスレ違いになるからC++スレで聞け。
internal修飾子の使いどころがイマイチわからん
ライブラリ作成をしてみると分かるんじゃないか
プログラムをDLLで分割しまくって アクセス制限考え出すとわかる
TabIndexに-1を指定できるようにしてほしい
何故?
使用していないことを明確に表すため
継承して、使用していないことを明確に表すため のプロパティを用意すればいいじゃん
いえ、相談ではなく提案です TabIndexプロパティの仕様の話で、-1が使えた方がスマートだということ
でもそれだとデザイナで設定できなくなるし、 そもそもTabStopがあるからいらないと思う
どうでもいいオブジェクトのTabIndexの値がふらふらしてて気持ち悪い 収まりが悪い
そう良かったね。
使ってないやつは-1とか 発想が前時代的
そうだな。 TabIndexはタブの移動順序を決めるためのプロパティだから、タブの有効/無効とは無関係だよな。 TabEnableてきなプロパティを作るべき。
ヌルあぶればいいじゃない
おまえらセンス無い
ごめん
2つの256色ビットマップを読み込んで(パレットは2つとも同じ)、 1つの大きな256ビットマップに描画して、保存したいと思っています。 System.Drawing.Bitmapオブジェクトは作成できたのですが、 ピクセルフォーマットがFormat8bppIndexedになっているので、Graphicsオブジェクトが作成できません。 256色ビットマップに描画するには、どのようにすればよいでしょうか?
1枚をRead→Writeはできてるの?
>>339 Bitmap コンストラクタ (Int32, Int32, PixelFormat) でコピー先ビットマップ作って
GetPixcel/SetPixelで書き写すしかないんじゃね?
最近、ビットマップ合成がらみを色々見てて、 2.0以前のSystem.Drawing.Bitmapよりも、 3.0以降のSystem.Windows.Media.Imaging.BitmapSource と WriteableBitmap の方が使いやすかった。
そんなことSetPixelでやったら死ぬよ LockBitsだな WPFが使えるならもちろんそっちの方が遥かに便利で強力
結局、32bitBitmap上に描画し、LockBitsして32bit->8bit変換を行いました。 回答してくださった方、どうもありがとうございました。
会社で社内の業務改善ツールを任されることになりました 上からJavaかC#を選ぶようにいわれましたが どちらが扱いやすくて今後の将来性がありますか?
C#スレで訊いたらC#と答えるに決まっているだろう
>>346 Javaスレで聞いたら?
Javaって返ってくるだろうけど。
まぁ、アレですよ。
自分で使いたいと思うほうを使えばいいと思います。
どっちも将来性なんて分からないので。
349 :
デフォルトの名無しさん :2009/07/22(水) 02:29:17
>>346 製作されたソフトウェアのどちらが長期使用に耐えられるかと言ったら
C#だろうな
350 :
デフォルトの名無しさん :2009/07/22(水) 04:16:08
http://www10.ocn.ne.jp/~mitinoie/RPGProject.zip RPGClientでログインして、少し動かした後で切断。再度ログインすると、KeyNotFoundExpectionが発生してしまう。
しらべてみると、MapChangReq()のunits.setUnit()でunitlistに登録したキーの値がfindUnit()でキーを元に検索しようとする前の段階で入れ替わってるのが原因だとわかった。
でも、治し方がわからない。
詳しい人がいたら教えてほしい。
Windows環境限定でいいんだったらC#でいいんじゃね?
互換性考えるとC89だよな
353 :
デフォルトの名無しさん :2009/07/22(水) 08:37:00
コンシューマ用ならC#が俄然有利な気がするが 後方互換保ってくれるかわからないんだよなぁ なんだかんだで10年来動き続けてるVB6という手も怖い
>>350 プロジェクト開けねーじゃねーか・・・XNA入れないとならんのか?メンドクサ
>>356 7zipで解凍できたよ。
>>350 ぱっと見なんだけどRPGServerをリブートしていたというオチではないか?
UnitManagerのunitlistをセーブしたりしている箇所はどこだ?
しかし、なんかUnitの管理とかが微妙な感じがする。
精査したわけじゃないが、unitsが座標ごとに持ってる部分とか。
358 :
デフォルトの名無しさん :2009/07/22(水) 12:04:26
>>357 RPGServerをリブートしているという落ちは残念ながありませんw
unitlistをセーブしている部分はsetunit、removeall、removeUnitの三つです。
>>358 右クリックして、送る→圧縮(zip 形式)フォルダ
で圧縮したものでうpしなおしてくれ。
360 :
358 :2009/07/22(水) 13:54:39
>>359 すまん。今使ってるウィンドウズにはその機能はない。
>>360 機能がないんじゃなくてテメーが無効にしたんだろ。
使っているWindowsかビルド環境が古いというオチか。
Vistaの標準のエクスプローラで解凍できたけどな
>>358 んじゃ、recive_packetでMapChangReqコマンドを投げる前にHandleInput受け取って
SetPosコマンド投げた。とか?
は無いか、initedチェックしてるから。
わかんね。ギブ。
ただ、ひとつ気になったのはunitlist.Add(id, u);。
Dictionary#Addは「ただし、指定したキーが Dictionary<(Of <(TKey, TValue>)>) 内に
既に存在する場合、Item プロパティを設定すると既存の値が上書きされます。
一方、Add メソッドは、指定したキーを持つ値が既に存在する場合、例外をスローします。」
何が何だかよくわからない。 切断した後IPとか変わってても大丈夫なの?
駄目だけど、そこんとこはまた別の問題。 ツッコミどころはまだまだ多いけど、それは一つずつ解決していくしかなかろう。 とりあえず、結構頑張ってると思う。
C++/CLI のスレから誘導されてきた。よろしくお願いしたい。 ---------- おしえて。 フォームアプリのテキストボックスとかにデータバインディングで、 DataTable の要素を関連づけて入力値を管理したい。 ここで、テーブル中のレコードが1つの場合はいいんだが、複数あって かつ、バインドするレコードを動的に変更したい場合ってのはどうすれば いいのだろうか? よくわからなかったので、 ・バインド用に同じ構造のテーブルを用意して ・そこにレコードをひとつだけ作り ・そのレコードに元テーブルの任意のレコードの値をコピーする ・フォーム終了後にもとのテーブルのレコードに値をコピーし直す 方法で使おうとも思ったのだけど、もっと直接的な方法がありそうな気がする。 いかがだろうか。教示いただけると嬉しい。
何を言いたいのかがハッキリわからないけど DataTableに複数レコードつっこんで あるときは1レコード目、あるときは2レコード目をバインドすればいいんじゃないの
返信をありがとう。 >あるときは1レコード目、あるときは2レコード目をバインドすればいいんじゃないの その2レコード目をバインドする方法がわからなかったんだ。。。
何言ってるんだろ? 次のレコードに進めるだけだろ。
ああ。そう言う方法があるんだね。 ごめん。まだこれの経験が浅くてそれ自体がわかってないんだ。 その方向で調べ直すよ。ありがとう。
BindingManagerBase::Position のことか。 気がつかなかったよ。お騒がせしました。
373 :
デフォルトの名無しさん :2009/07/27(月) 14:13:58
非ジェネリックのIDictionaryをジェネリックのIDictionary<TKey, TValue>に 変換するスマートな方法があったら教えてください。 foreachで別のDictionayに1つずつ追加するのはやれてます。
それが一番だと思うけど。 dic.Cast<DictionaryEntry>().ToDictionary(entry => (TKey)entry.Key, entry => (TValue)entry.Value); がスマートとは思えない。
C# 2.0 で質問です System.Threading.ManualResetEvent のインスタンスを使用して1ミリ秒のウェイト処理をループ中にかけようとしているのですが ・Vista環境だと上手く1mSec 程度停止するのに ・XP環境だと15mSec程度まで跳ね上がる時があります。 OSの分解能ということで1mSecは諦めるしかないのでしょうか? 用途は最高速で常時まわしたい処理を以下のソースのWhileの中に組み込んでHOGEの処理をしているのですが 可能であれば10mSec以下で1ループを終わらせたいのです。(中の処理は2〜3mSec程度) ただしこのままでは別スレッドで実行しているにもかかわらずCPU負荷率が高すぎるために 最低レベルでのスレッド停止処理を行いたいのです。 ちなみにSystem.Threding.Thred.Sleep(1); を行うとVista環境でも1mSecより大きく停止してしまいます。 System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(false); While(True) { HOGE();//処理 //ストップウォッチ計測開始 mre.WaitOne(1); //ストップウォッチ計測終了 if(exitFlag == true) break; } 何とか最速でまわしつつ負荷を上げずにWhile文を回し続ける方法はないでしょうか?
1msの分解能が欲しかったらCPU負荷率は諦めるしかないと思うけどな スレッド切り替えるのに1ms以上かかりそうだし
>>376 そうですか・・・
まぁヂュアルCPUなんで負荷率は50%なので構わないと言えば構わないのですが・・・
できるだけ使用率を低くして寿命を延ばしてやりたかったのです
>>375 Sleepすることが目的ではなく、CPUを使いすぎることを抑えたいだけのように感じる。
もしそうなら、Priorityプロパティでスレッドの優先度を下げるだけというのはどう?
もちろん、優先度を下げるということはCPU使用率を下げることとは違うから、、
ほかにやることがなければCPUを使い尽くすということに変わりはないけど。
>>377 何をやりたいのか知らないけど専用マシンを用意すれば?
10mSecでTimer回した方が良いように思えてならない。 再入をブロックする必要はあるけど。
>>375 よくわかんないけどこういうこと?
Stopwatch sw = new Stopwatch();
long nextTiming = sw.ElapsedMilliseconds + 10;
sw.Start();
while (true)
{
while (sw.ElapsedMilliseconds < nextTiming) { Thread.Sleep(0); }
nextTiming += 10;
Console.WriteLine("Now is {0} ms", sw.ElapsedMilliseconds);
}
Thread.Sleep(1)にしてやればCPU使用率は無駄に上がらない。
その場合、処理のインターバルの精度は落ちるけど、時間あたりの処理回数の精度は
保てるといってよいんじゃないか。
マルチメディア系の機能でミリ秒レベルの精度でsleepする方法ってあったりするんだっけ? 普通のSleepって、TimeBeginPeriodで指定した分解能でスレッドの状態変わるんだっけ? もしSleepの精度にTimeBeginPeriodが効くなら、それやってスレッドの優先度をあげればいいかも。 ただし処理をきちっと終えてちゃんと確実に速やかにSleepしないと死ぬことになるが。
各回のインターバルの精度が必要でないなら、10回分繰り返して10回分Sleepとかそういう手もあるが。
>>382 timeBeginPeriodは消費電力を増やすと言われているのだから、
寿命を気にする
>>377 には似つかわしくないと思う。
HDDはともかく、CPUはヒートシンクが動作中に外れるとか 余程のことでもなければ「寿命」を縮めるなんてことはないと思うけど。 真空管じゃないんだから
まあCPU自体にはあんま関係ないけど、 使用率が高いところを維持するのは全体で見ればあまり望ましいことじゃなかろう。 あと確かに大麻精度あげると電力使用はアップしてしまうのかも知れんが、 CPU使用率が高いままになるよりはましじゃないかと思うがどうだろう。 もちろんそうせずに済むならそれにこしたことはない。
結局のところ、何であんな事をやりたいのかハッキリしないと何とも言えん
C#では、グラフィック関連のメソッドで、小数の引数はfloat型になってますよね。 floatよりdoubleの方が一般に速いと思うのですが、なぜfloatなんですか?
GPUはほぼ単精度までしか扱えなかったぜ まあGDI+はGPU使わんけどな!
計算速度じゃなくて帯域幅の問題。 あとdoubleが速いってのは今のCPUでの話にすぎない。
あGPU関係なかったか…
>>389 なるほど…。
今まで、座標を保存するための変数x, yをdouble型で宣言して、
描画時にintに変換して使っていたのですが、
これはfloatにしてキャストなしで使った方がいいんでしょうか?
「float同士の演算(座標計算時)」と「double同士の演算(座標計算時)+intへのキャスト(描画時)」
では、どっちが速いんでしょうか。
>>390 > 今のCPUでの話にすぎない。
昔のCPUのことを想定してどうすんだよw
>>392 自分でベンチ書いて試しなよ
その方が納得できるだろ
昔のCPUの話じゃなくて今のGPUの話だよ。 関係なかったけど。
レスが遅くなりました。
>>378 おっしゃる通り現在の処理速度を犠牲にせずにCPUの負荷を下げてあげたいということです。
スレッドの優先度は、この処理部分以外にあまり同時に激しい処理をしているわけではないので微妙な感じです
>>379 まぁ専用マシンを用意してもCPU負荷がずっと大きな値に張り付くのは・・・微妙なきがします。
FA系なので安定して長く動作させたいのです。
>>380 やってみた感じスレッドのタイマで1mSecで動かしてもどうも間隔はOSに引っ張られるようですorz
例えばですが・・・再入ブロックはこんな感じの処理のことでしたっけ?
タイマコントロール
void tick
{
タイマ停止
処理
タイマ開始
}
スレッドタイマ (間隔で動かすというか1回だけ動かすのを繰り返す)
void Tick()
{
処理
次回Tickを動かす時に1mSec間隔をあけて実行
}
>>381-
>>383 ,
>>387 本当はWhileの中は最速でまわしてあげたいのです。
しかし、CPU負荷率が高くなりすぎるのでそれを防ぐためだけに仕方なく1mSecのスレッド停止を挟んでいるのですが
そのスレッド停止がXPではきっちり1mSec止まってくれない
(別に2mSecとかでもいいのですが15mSecとか止まってしまうのです。)
結局やりたいことを説明すると
FAの工場内のでラインの制御をおこなうのに1スキャンあたり(1ループ)25mSec以内で処理しなければ処理ヌケが発生する。
→処理ヌケが発生しないようにする処理は現在のループ処理の中では余裕
→だけどCPUがずっと高い使用率に張り付いたまま
→基本的に長期安定動作させたいので使用率は大きいよりは小さいほうがいい
→SleepやManualResetEvent.WaitOneではXP上で停止時間が不安定 (これで運用すると少しでもOSの動きに引っ張られると処理時間が延びて処理ヌケしてしまう)
→VISTAはなぜか停止時間が結構安定する
→上に VISTAにしてくれというと「FAでVISTAとかまじありえね XPでやれ」 と言われ取り合ってももらえず
→打つ手が思い付かずに ここへ知恵を借りに
↑いまここ
そして同じPC内にはコスト削減とかでラインの画像判定を撮って判定するソフトが・・・
(これ自身はCPU負荷はそこまで使いません。 一瞬5〜10%まで上がる程度が50mSec程度の間隔)
こんな状況ですorz
そもそも、Pgを別のPCに分けてもメインのループ部分がCPU使いっぱなしになるので問題の解決はしないという・・・
>>385-386 CPU自体は迷信なのかもれません。
まぁ、ただずっと高しようりつで張り付くと結局温度が上がってしまうので
色々と起きてきそうなのです。
CPUのタイムスライスってレジストリでいじれなかったっけ? そこまでシビアなFAの制御なら専用のCPUボードにやらせて、 OSはサマリーだけ受け取るような仕掛けにしないといかんだろう。
>>398 本当はそうなんですよね
せめてPLC使って処理させるとか
でも・・・今回は期限ないうえにコストも落とせという色々無茶な状態が重なってしまいまして…
他のプロセス(サービス含む)が動いたらあっという間に25ミリ秒とか過ぎ去るな
>>400 エンベデッド(これで読みはいいのか?)ですよね
そう、せめてそれがあれば最低限のコンポーネント入れていけるとおもうんです
しかし普通のPCに普通のXP PRO
サービスとかはできる限りとめて動かしていますがなんというか・・・がっくりです
>>401 そうなんです!
というか、やる気起きないのでダラダラと
連投ばっかですみません
なんとなくですが
>>382 のTimeBeginPeriodでいけそうな気がします。
また詳しいことは微妙ですが
これ使って簡単に1日程度動かして様子を一回見てみようかと
>>392 描画メソッドの呼び出し頻度なんか知れてる
呼び出してからの実際の描画処理の方が遥かに時間がかかるからそんな細かい差は全く意味がない
>>403 なんか
>>397 を読んでもやっぱりよく分からないんだけど、
要するにDIOか何かをポーリングしてるのかな?
それでそのDIOのイベントに応答するときのレイテンシの最大許容時間が25ms、
みたいなこと?
浮動小数から整数への丸め制御方法によっては、intにキャストする回数が多いと遅くなるかもね
そんな差が目に見えるほど描画メソッド呼び出したらそれこそ死亡
>>397 >>403 タイマーが15ms間隔でしか発動しないのはWindowsの仕様。
パラメータでは1ms単位の数値が設定できるけど、実際の動作は約15.5ms間隔に切り上げられる。
TimeBeginPeriodを使えば間隔を詰めることはできるけど、実際に試してみると、
最短の間隔がせいぜい2ms程度で、それより長くなることもある。
それにTimeBeginPeriodには副作用があって、他のアプリがたまたまTimeBeginPeriodを再設定してしまうと、
そのマシンで動いているすべてのアプリが影響を受けてしまう。
>>375 でVistaは1msてのは、たまたま何かのアプリがTimeBeginPeriodをいじってただけの可能性が高い。
そもそもSleep関数の動作は「少なくとも」指定した時間経過、だから、どれだけオーバーするかは運次第。
ただしこれはVistaまでの話で、Windows7ではタイマー関係がようやく強化される予定なので、
どうしても2ms以下の間隔を死守したいならWindows7を使えばすんなり解決するかもしれない。
タイマっていうかタイムスライスの問題だからちょっと話がズレてると思うけど。。
>>408 XPしかだめっつうてんだろw
XPにPLCと同じことさせようとしても無理。
制御じゃなく監視だよね?
FA屋で制御までさせようとしてるなら職変えたほうが良いよ。
Chrome起動中だと高速化するよ(笑い)
25msなら、スレッドの優先度上げてやればSleepでも大丈夫かもしれん(実質15msくらいで)。 まあTimeBeginPeriod使った方がいいと思うけど。 優先度を上げない場合、Sleepでの停止自体は短時間でも、実行順が回ってくるまでに タイムオーバーする危険がある(他のスレッドがある場合)。 優先度を上げると実行可能になった時優先的に処理が回ってくるので、遅れる危険が小さくなる。 ただし、処理を終えたら確実にSleepしないと、下手すればマシンハングアップ状態になるので注意。 ただ、いずれにしてもWindowsではそういうのを本当に確実に処理することはできない。
XPのタイムスライスってどんくらいだっけ?15msくらいだっけ?20msくらいだっけかな? もしフォアグラウンドで何かを動かしたらそいつは3倍になるから処理にもよるけど簡単に死ねる。
スレッドの優先順位? スレッド?
あー大きく上げるにはプロセス側で上げとかないと駄目だったか、 言いたかったのは単に最終的なスレッドの優先度を上げるということ。
>397の人件費考えたらVISTAなんて安いものだろうに・・・
ていうか・・・なんでWindowsでそんなリアルタイムOS的な制御をやろうと企画した んだろ、発注元。
>>397 の言葉遣いも怪しいところがあるから、
必ずしも本来の要求仕様を満たすために必要のない手法を
>>397 自身が
考えているだけかもしれない。
なんかその可能性が高いように思う。
リアルタイムにセンシングするとして、データをキューに入れといて別スレッド で処理したら駄目なのかな・・・いや、そういう話じゃないな。 382の言うとおりマルチメディアタイマ使えばいいんじゃね?
>>410 いや、Vistaはカンベンしてくれって話だろ?
マルチメディアタイマーも15ms縛りがあったような…
要求が「VistaとXP」なんだからそんなところの議論は無駄無駄
424 :
デフォルトの名無しさん :2009/07/29(水) 01:16:39
てか1ms周期で動かしたら大抵CPU時間使いまくるってオチ
425 :
397 :2009/07/29(水) 02:13:03
多くのレスありがとうございます。 そもそもなぜXPなのか? というのはその上役の人間が安定志向でXPで今まで出来てたんだから という考えのもとに言っているような感じです。 しかし、その実績はせいぜい50〜1000mSec程度なのでどのOSでも簡単に実装できるものでした。 新しい機械を開発するにあたり そこそこ高速で移動するライン状の物の位置をエンコーダで追い、DIOの信号を利用して移動させる という処理が必要になり 上役の人間が打ち合わせをした際にその程度の処理なら出来る という憶測で仕事を受け入れてしまいました。 その尻拭い的な感じをいまやっているわけなのです。 多くの皆様意見をいただき本当にありがとうございます。 さすがに限界を感じる感じなので、CPUをフルに使う状態での運用か、それとも設計や方針自体を変更するべきなのかを上の人間にかけあってみます。 ちなみに単純な処理です → 物の流れる方向 |----------------目的地 センサ ↓ センサをONしたタイミングでエンコーダ値を取得・保持し、目的地の位置までパルスが移動したらDIO信号をONし、流れているものを矢印の方向へ稼働させる機械を動かす。 たったこれだけです。 PLCでやればどれだけ単純で簡単なレベル という話 orz 多くの意見、今後のPGに生かしていこうと思います。 はぁ・・・月曜日が鬱だw
しかもC#でとな('A`
>>425 それ本当に1msの精度求められてるの?
仕分けでそこまでの速度を要求されるとは思えんのだが。
>>393 intよりdoubleが早い環境なんて少数派だぞ
PCでそんな制御やるのがそもそも間違えてる カーネルから優先度の高い命令が割り込んだら何ぼでも処理落ちするぞ
動かないと思ったらWindowsUpdateでリブートしてるんですね。わかります。
>>427 初めに書いたとおり1mSecまでは求められてはいませんが
自分がWindowsで制御するなかでは初めての精度になります。
まぁごくまれに処理抜けする程度ならリターンしてもう一度処理をすればいいのでそれはそれで何とかなるわけですが
その為、処理負荷をできるだけ下げつつ処理時間間隔を短くするために可能な範囲で試行錯誤してみています。
>>426 >>429 そうなんですよね
何というか・・・GUIがほしいのはわかるんですが・・・
ちなみに現在実機でタイマ精度変更後に一日動作させた感じ1処理は停止含めて15mSecを超えていない(StopWatch調べ)感じです。
CPU負荷も常時高い位置にあったものが時々大きく上がる程度まで抑えることができている感じです。
でもぶっちゃけ実運用になったら・・・ちょっと怖いかも
実際のとこ、全力でぶん回してもリスクは変わらないから。
全くもってそのとおり
”ずーっと確実に最長1msの周期で観測する”という要件しか聞いていないから,PCの電源が落とされた時点でアウト,
PCの電源落とさないってんなら,たった一日の観測(
>>431 )くらいで何か分かるわけでもないし.
おとなしくデバイス作ってUSBかシリアルで接続したほうが安心.
GUIはC#でいいだろうが
>>433 なんかPC障害でラインが暴走しそうな悪寒もする。
ちょっとした機能追加で制御不能になったりとか
担当者さんのデスマーチが目に浮かぶ
今思った GC時間考慮してねー
まあ書かれてた処理内容なら大丈夫だろ。 もち注意して作る必要はあるけど。
>>425 その説明だと、そもそも「目的地」のところにセンサをつけ、
その出力を「流れているものを矢印の方向へ稼働させる機械」に直結すれば
PCなんか要らないように思えるけど。
それにどうしてエンコーダが必要になるのか意味がわからない。
わざわざ目的地じゃなくてその手前なんかにセンサを付けるから、
目的地を検出するためだけにエンコーダが必要になるんじゃ?
>>425 目的地にセンサつけたらだめだろw
目的地はn通りあるから事前に振り分ける処理が要る。
FAの機械ってのは大抵が独自のプロトコルで通信する。
だからPCなりPLCなどの中継が必要になる。
ここまでは皆理解していて、その先の精度や耐久性について語ってるのだよ。
>>438 よくわかんない発想をする人だなあ。
仮に目的がN通りだとする。
それって何を基準に振り分けるの?
その仮説と
>>425 の説明をあわせれば、恐らく物体の高さか何かによって
ONするセンサが変わるから、それを基準に振り分けることになる。
だとすると、それってN個の目的地の直前で、対応するセンサと
「矢印の方向へ稼働させる機械」を直結することと等価でしょ。
まあ、質問主が詳細を明らかにしてないのに細かいこといってもしょうがないか。 なんとなくセンサの設置法さえ工夫すればビジーループでポーリング、 なんてことしなくてもPCでもこなせそうな仕事にも思えるけど。 DIOの付属のライブラリって、たいてい入力のイベントでコールバックする 機能がついてると思うから、そのあたりとあわせればできるんじゃないのかな。
>>439 バーコード、QR、RFIDなんかは普通に使うぞ?素人か?
もうどうでもいいよ。 さっさと上司と拳闘しろ。
>>441 そういう問題か。
そんなことは
>>425 の文章からは読み取れない。
余程の馬鹿じゃなければ、そんな重要なことは最初に明確に書くだろう。
>そんな重要なことは最初に明確に書くだろう。 うーん そんなこと無いケースが多々あるが・・・
そういうスレでやれ
EventHandler eh += delegate { }; EventHandler eh += (sender, e) => { }; sender, eを使わない場合ラムダ式にしない方がいいの?
使いもしないのに書くのは気持ち悪い
関数でシステム作る様な言語でもないんだし LINQの目的に使わないのなら俺は使ってないなー
>>446 ラムダ式使うなあ。
別に引数を使わないのはLinqでもあることだし。
使ってると関数式が分散しちゃって管理しづらくない?
複数箇所で使うならメソッドにしとけ。その場限りならラムダにしとけ。 作ったメソッドをシグネチャ合わせるためにラムダ使うとかも良くあること。
はい匿名関数使います。
delegate { }の形の匿名メソッドはそのうち「今後は使用しないでください」ってお達しが出るかもね
454 :
デフォルトの名無しさん :2009/08/02(日) 01:07:34
C#って内部クラスをどういうときに使うの? 関連の強いクラスでも、内部クラスにするメリットがわからない。 Javaならすごいはっきりしてるけど・・・
455 :
デフォルトの名無しさん :2009/08/02(日) 01:08:10
>>1 の本文は「飲み過ぎた・・・」と予想したが見事にはずれた
>>454 javaだろうがc#だろうがインナークラスの使い道なんて一緒だと思うけど…。
よくわからん疑問だな。
>>454 おまえはおれかw
今日ふと気になってそれ調べてたよ。
外部クラスのprivateフィールド、関数にアクセスできるのが一番のメリットだろうね。
>>454 わざわざ外に書くほどでもないとき
スコープ的にそのクラスの外に見れないようにしたりしたいし
459 :
デフォルトの名無しさん :2009/08/02(日) 01:49:07
>457,458 こんな遅い時間にサンクスコ! >外部クラスのprivateフィールド、関数にアクセスできるのが一番のメリットだろうね。 ああ、なんか勘違いしてました。外部クラスのインスタンスは渡してやらなきゃいけないけど privateにアクセス可能なんですね。馬鹿な漏れですみません。 C#ってJavaに似せてはいるけど、かなり別モンですね。 スコープっていうかアクセス権については、 Javaのパッケージプライベートに相当するものが欲しい・・・ でもプロパティは素晴らしいです!(JavaのBeansは最悪。)
プロパティはすばらしいとおれも思う。直観的だし、見やすい。
そして書きやすいしね。VB.NETのプロパティはマンドクサだけど。
プロパティとデリゲートは自慢できる機構だな。 いつJavaが逆輸入してくれるかと期待してるんだが、無理なのか。
プロパティはいいとしても、 delegateはVJ++時代の歴史的ないさかいがあるからあれだなぁ。
プロパティはJavaの新機能の候補にまで入ったんだけど・・・駄目だった デリゲートはありえなさそうだ
C++の将来はどうなりますか?
C++の将来はC++0x、2015年までに何とかしてくれるらしい。 そろそろスレ違いだな。
>>459 パッケージスコープはinternalがある。
「名前空間」っていうのはそもそもクラスライブラリを使う側のためにあるものだから
作る側の実装の都合によるパッケージスコープとは明確に区別されてる。
どっちがいいかは別にして,考え方の問題。
.NETでCollectionを返してくるやつがあるけど何でジェネリック使ってないの?
.NET1.xのころはジェネリックが使えなかったから。 3.0〜のWPFで非ジェネリックコレクションが一部使われてる理由は, WPFはけっこう型にルーズで,突っ込まれたいろんな型のオブジェクトを 適当に自動的に変換したりするから
>>467 考え方がどうとかはしらんが、
internalはexeやdllレベルのアクセス制限だから、Javaのpackage privateとは別モンだろ。
適度なアクセス制限かけたい時に、いちいちdllに分けるとかありえんwww
?:でelse側要らない時あるから、何もしないで辞めるという予約語cancelを追加してほしい x = x > y ? 10 : cancel; Open(Exist(path) ? path : cancel); 引数にcancelが入るとそのメソッドは実行されない
素直にif使えよ
Exec(a(), Open(b(), Exist(path) ? path : cancel, c()), d()) じゃあこれでExist(path)がfalseになったときはExecも実行されないの? aやbやcやdは? 無駄に複雑になりすぎる
x = x > y ? 10 : x;
x = x > y ? 10; こう書けりゃいいのにな
>>473 あー、なんか無理っぽいね
全部実行されないで欲しい感じはするものの
無理して三項演算子使わなくてもいいのに。
>>475 代入式なのに代入されない場合があるって、すんごいキモイと思うんだけど
どうだろうか
タイプ数そんなに変わらん if(x > y) x = 10; cancel導入だとむしろ多くなるじゃないか
>>479 これでいいじゃん
三項演算子にこだわる必要どこにもないし
全メソッドが毎回cancelチェックするらしいぜ!
なんで阿保の思いつきを開陳しようとする気になったの。
おまえというド阿呆をおびき寄せるため
本筋ではないけど、
>>471 のOpenの例はテストせずにモードOpenでtryして、
FileNotFoundExceptionなどをcatchでしょ。
ファイルは存在さえすれば開けるというものじゃないから、
どのみちtryする必要あり。それならばExistで存在確認するのは無駄。
例外は重たいから事前にチェックできるのならばチェックすべし
チェックから開くまでに、ファイルが消される可能性があるから無意味。
チェックした方がいいのは確かだが ファイルを開こうとして失敗するなんて秒間何千回起こるようなものでもないんだから 重たいとか別に関係ない
例外は重いからチェックするってのは正か否か これもよく揉める議題だよね。 頻度を考慮したらそんなに避けるべき問題でもないという結論に。
平均的には、チェックする方が遅くなるだろうな どっちみち頻度考えたら問題にはならないけど
例外が思いからファイルを開くときにチェックしない →ファイルを開くアクションを起こすと時々アプリケーションが終了 →作業内容が喪失 →作業意欲低下 →業務が滞る →会社の収益が低下 →GDPが減少 →犯罪発生率の上昇 →本国崩壊 →朝鮮半島がなにかを主張し始める ←ここまで1年半 つまり例外処理反対派は反日親韓ということ?
>>490 それを言うなら、
例外が思い(ママ)からファイルを開くときにチェック<する>
だろ。
いつも思うんだが、ネタっていうのは分かってる奴がやるから面白いんであって、
何もわかってない奴が無理してやるネタなんて面白くもないともないんだよお馬鹿さん。
プログラムがファイルが存在しない状況について想定していることが伝わるからチェックはすべきでしょ
必要な処理を必要なだけやるわけであって 重いから処理しないのはゆとり
ファイルが存在しない状況について想定していることが伝わればいいのなら FileNotFoundExceptionを別にcatchするだけで十分じゃねーの
はげどう
まあFile.Existなんて気休めだよな。
ところで Try(() => Open(path)).Catch<FileNotFoundException>(ex => Console.Write(ex)); とか書けたらいいなと思ってるのは俺だけじゃないはず というか多分書けるな 今から作ってこよう
醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い 醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い 醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い 醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い 醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い 醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い醜い
try〜catchじゃない意味あるの? こんなオナニーコード見せられたら卒倒しちゃうよ。
吐き気がするw
if(auto ex = collectException(new File(path))) writeln(ex);
RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup みたいのはあるけどな。 もちろん理由があって。
Util.TryCatch(()=>hogehoge...,e=>hoge....); というのは作った。
何の役にもたたなそうだな
きもい流れになってるな・・・
C#を見にくいコードにする友の会か?
使う気にはなれないが、総称型をcatchに使えることは分かった。 public static T Try<TEx,T>(Func<T> func) where TEx : System.Exception { try { return func(); } catch (TEx ex) { Console.WriteLine(ex); return default(T); } }
これがラムダ厨の威力だというのか。
もうクラス使わずに全部クロージャだけで書こうぜ
一部のラムダ基地外をどうにかしてくれ。
短かく書きたい病ってのは誰でも一度は発症するもんだよ
ありすぎて困る
短く書きたい自体は分かるが、 短くなってない、見にくくなってるだけが多いのはなんでだ。
短く書きすぎて可読性落ちたらいみねぇwww に気付くのにPGはじめて数年かかった
try-catch-finallyをラムダで書くのに何のメリットがある。
テストコードやアサーションとかなら使い道があるかも 思いつかないけど
>>515 同感、未だ短く書きたい病発症してますけど、つか冗長コード書くやつ死ね派ですが
Tryは間違ってるだろと思うわ
俺は冗長コードは可読性とパフォーマンスはかりにかけて許容範囲ならOKな派
C#は文法自体が冗長だから短く書いてもたかがしれてるんだよな。 とりあえずPerlとかRubyは糞。
冗長にも種類があって、この修正いったい何か所なおしゃいいんだよボケっって冗長タイプは大嫌い
特定の人間しか読めないようだとそれはそれで冗長といえる気がする
>>498 みたいなのはともかく,さすがにラムダが全く分からないのは問題外
いつも思うけどこのスレって程度の低い盛り上がり方するよね ラムダ式なんて書けて当然読めて当然 ラムダ厨も叩いている奴も意識しすぎできもいよ
2chブラウザみたいに動的に分割するウインドウって作れるでしょうか?
2chブラウザっていろいろない?
それよりも TryってVBじゃねえの
どう考えてもjavaだろう
いや そこはNullでしょ
書けて当然読めて当然濫用も当然
俺の書くコードが一番! お前らの書くコードは二番!
1人で書いてる限りは好きなように書いていいよ
さんじのおやつはぶんめいどー
534 おまえねーじゃますんなよw
俺の言った設計通りに動いてくれるならどんな書き方したっていいよ 保守するのはお前らだし
>保守するのはお前らだし そう思ってたころもありました・・・
Enum.ToStringはメタデータ検索するから遅くなるって言ってるけど じゃあEnum.GetNamesとかはどうなの?遅くならんの?
ウダウダここに書いてる間に試せると思うんですが…
俺とお前じゃ時間単価が違うんだよ
GetNamesやGetValuesは中でキャッシュされてるからそんなに遅くない といっても配列の作成とコピーは毎回行われるので注意
ToStringよりはずっと速い。
全然関係ないけど、プロパティをリフレクションで取得したりするコードで、 リフレクションは遅いからプロパティ情報をキャッシュするのだ!って言って DictionaryとかにPropertyInfoやMethodInfoをキャッシュしてるサンプル見るんだけど、 どうせキャッシュするならデリゲートにしとけっつの。 圧倒的に速いしリフレクション特有の問題も起きない。
GetMethodとかは中でキャッシュされるからPropertyInfoやMethodInfoを
キャッシュするのはあまり意味がないとかいうのをMSDN Magagineあたりで読んだ覚えがある。
パフォーマンスのためなら
>>544 の言うようにデリゲートをキャッシュする。
546 :
545 :2009/08/03(月) 23:34:54
メンバの検索には結構時間がかかったりもする(条件によってことなる)ので無意味ではないけど デリゲートをキャッシュする効果に比べたら全く無意味と言っていいレベルだな。
>>541 だったらなおさら時間を大事にしろよ。
頭悪いのかね。
うん
くだらねー
うん
552 :
デフォルトの名無しさん :2009/08/04(火) 18:11:07
質問です。 領域を確保したbyte型の配列を以下の関数Funcに渡したいのですが、 どうすればいいのでしょうか? byte[] bytes = new data[640*480]; Func(????) void Func(ref byte data){ }
int n = 0; //好きな数字を入れてね! Func(ref bytes[n]);
void Func(byte data[]){ } 何でこうなるのか考えてから次に進めよ
cじゃねえんだから void Func(byte[] data)
556 :
デフォルトの名無しさん :2009/08/04(火) 18:26:09
>>553 ,554,555さん
レス有難う御座います。
この場合、関数の型を以下で定義するべきなのは重々承知しております。
void Func( byte [] data)
ただ、この関数は他社提供のクラスライブラリの為、替えることができません。
これってやっぱり、関数の定義ミスでしょうか?
ちなみに、この関数は某大手電卓メーカの提供しているクラスライブラになります。
>>556 それなら使い方をサポートに問い合わせるのが一番だろ
>>557 さん
恥ずかしながら、保守契約が切れていてけないのです
・・・ちょっと見落としていたけど、553の案で行けそうな気がしてきた
553の方法でアクセスできました!!!!! すいません。 有難うございます。 3時間ぐらいハマってた・・・ 皆様有難う御座いました。
なんじゃそりゃあ。
なんつうライブラリだ・・・・ 要は配列の中の1バイトを書き換えるプログラムってことか…?
まさかのネタがマジレス
ネタじゃないです。 ネイティブコードのラッパライブラリみたいです。 サンプルさえあれば、こんなにハマることは無かったのですが、 本当に助かりました。感謝!!!!
中でえげつないことしてそうだなあ
なんというか・・・・ これはひどそうな匂いがぷんぷんしてくるな
ライブラリの機能や仕様が不明なんだから何とも言えん。 ぱっと見た感じで怪しいのは確かだが。
C++ の void Func(byte* data) を、C# に持ってくるときに void Func(byte[] data) にするべきはずのところを void Func(ref byte data) にしただけだと思う まあわかりやすい間違いだな
568 :
デフォルトの名無しさん :2009/08/04(火) 19:57:55
こんばんわ 文系のプログラムわからないぼくですが 仕事の兼ね合い覚えないといけないことになりました。 やはり先に本をかって進めていったほうがよろしいですか?
あたりまえ いくらPCに詳しくても,プログラミングでは「なんとなく触ってたら使える」というのはありえません
>>570 はい、C#で開発なんで
それでないといけないと思います。
本で初心者用って書いてあればなんでも平気ですかね。
C# とだけ書いてある本ではなく,Visual C# と書いてある本を選びましょう。 いきなり前者に挑むと挫折します。
しかし門外漢を使おうなんて余程手が足りないのね ここからが本当の地獄だ
>>572 助かります。
2種類あったのか・・・
visualstudio2005を使うんですが、C#って書いてあったようなきがしたけど
visualC#ってことでいいのでしょうか?
VisualStudio2005は複数のプログラミング言語が使える。
その中でC#を使うならVisualC#2005を使うことになる。
二種類あるっていうのは,例えるなら
>>572 の前者は英文法の本,後者は英会話の本だ。
>>575 なんと・・・・
VisualC#で探します、ほんと助かりました。
前者後者で差が結構ありますね¥・・
>>574 プログラミング未経験者がいきなり本で独学でC#とか俺は無謀だと思う。
特別地頭がいいなら別だけど。
こういうスレの連中は変な見栄と気取りがあるから認めないと思うけどねw
いきなりC#でも人に直接教えて貰えばなんとかなるかもしれんけど、
そういう訳にいかんのかな。
だから地獄の始まりだと言ってるだろ
>>577 うちの会社教えてくれる人いないんですよ・・・
これやってねって言った人も始めてだし。
今まで仕事・・・まぁ新入社員だけど
プログラミング教えてもらったことなど一度もないんです。
本渡されてどうぞ?しかないです。
まあとりあえず触ってみりゃいいんじゃない 「VisualC#入門」みたいな本買ってきて一通り打ち込んで動かしてみてそれからだな プログラミング自体に興味が持てれば次は文法の本に行けばいいし無理ならキャリアスクールへどうぞ
そのレベルの初心者なら、最初は研修に行かせてもらったほうが早いんだけどな。 最初は入門書は定番の有名なのより、 手取り足取りタイプの超入門書を2〜3冊読み漁るのがいい。 物足りなくなったら定番に移行。
研修とかスクールって行った事ないけど意味あるの? 実際に仕事したことのない講師が教えてそうで怖いわ。
研修とかプログラム受けると お金になるとききました (経理的な意味で)
公式には原則自由 それ「クラスライブラリ開発者向け」のガイドラインだからアセンブリの外から見えないメンバについては どうでもいいの
すばやい返答ありがとう
ちなみに非推奨のアンダーバー始まりを使ってます。
Cじゃないんだから取り立てて禁止というわけじゃないよ。
むしろMSが公開してるC#で書かれたコードでは _camelCase が多数派
C#って結構とっつきやすい方だと思うんだけどなぁ。
他の言語の経験がある人にはね もともとそういうコンセプト
他の言語使ったことないと結構きつい気がするよ
他のってCとjavaだけだろ。
delphiから移行したけど結構簡単だった
delphi とは腹違いの兄弟みたいなものだからなぁ
ああ・・・種は一緒だからな 確かに腹違いだ
お下品。
他の言語の経験なんているか? どの辺が?
>>600 誰に向かって反論してるわけ?
「どの辺」にそんなこと書いてあるの?
どうでもいいけど、こんなちっちゃいことで自分を大きく見せたい奴は
大概その意図に反して無能な奴だわな。
C/C++やってた俺には最初ヘッダが無いのが気持ち悪くて仕方なかった
>>597 非推奨と書いてある箇所は何処でしたっけ?MSDNみてるけど出てこない。
#defineが無くて幸せ
マクロには使えないが一応あったような。#define
あ、#defineマクロのことな
条件付きコンパイルはもうちょっと言語を壊さない形で実現できなかったのかな conditional (DEBUG) { }とか
プリプロセスを無くすのはいいが、ファイルのインクルードまで無くしたせいで 条件付コンパイルがやり難くてしょうがないと思うんだけど。 とくに条件が複数のプロジェクトを横断的に規定するようなものだった場合。
>>579 悪いことは言わん。明日の退社後にでも、夜でもやってるパソコン教室へ、せめて1日(2時間)だけでも行ってこい。
最低限のとっかかりがないと、参考書のコードをそのまま入力するのも大変だろうし、ぐぐることもできんはず。
つーか、俺を雇ってくれよ…
なんか変な妄想ふくらませてるのがいるなw 習得に相当時間がかかったのだろうか。
>>610 悪いことは言わん。明日の朝にでも職安へ行ってこい。
>>568 明日の朝、退職願出して、ハローワークに行って、事務か介護か土方の仕事探しな。
お前みたいな奴が居ると迷惑だ。
>>614 >>586 の見解で正しいと思う。
自メンバーのアクセスには全部this.つけろより、
前か後ろにアンダーバーのほうが好みだ。
日本語使ってるコード見たことあるな
○○○○○○ToolStripMenuItem_Click(object sender, EventArgs e) これの前に日本語つくよねw
インテリセンスの都合で、後ろに _ の方が好き。 アンダーバーってキーボードの位置的に押しづらくて、先頭に持ってきたくない。
private readonly stringのメンバー変数名って大文字から始まるの?
privateは好きにしろと何度も出てるだろ
今はC#だからメソッド名とか大文字にしてるけどF#始めるから小文字になる予感。 そのあとC#使うときはどっちになるんだか・・・
正直どうでもいいな。
F#ってC#と比べてどんなメリットあるの?
>>617 エンティティフレームワークなんて、Hogesってテーブルがあったらデフォルトで
エンティティ=Hoges
エンティティセット=Hoges設定
だぜ。
ワロタ
プログラミングで初めての言語が C# だとクラスとか よくわからないままになるかもしれないかな。 C++ から入るとあまり問題にならないような気がする。
C++こそクラスから逃げられないと思うんだが…
C# をはじめてのプログラミング言語にすると Main メソッドをもつクラスの意味がわかりづらい。 いきなりおまじないから始まるのはちょっと考えもの。
>>627 逃げられないからこそよくわからないままでいられないってことでしょ?
クラス設計が難しい
>>608 プリプロセスのうちヤバイとされる物の一つだからそりゃなくなるだろ。
また、define の方は、Conditional アトリビュートを使えとのいうがC#流。
これによって、マクロ機能等をライブラリ化する時に捨てず、きっちりdllまで維持して再コンパイル等を防止している。
ファイル横断的にやりたいなら、 csc /define:HOGE ... やMSBUILDのスクリプトで指定するのが原則。
C#でのスレッドセーフなプログラミングに関する簡単な質問なんですが あるクラスインスタンスの値を取得する部分 work = myClass; と、クラスインスタンスの参照をセットする部分 myClass = new MyClass(); これってそれぞれクリティカルセクション化しないとまずいですか? 内部で何をやっているのか分からず不安なんですが、何でもかんでもlockするのは嫌なので… また、intなどの値型でも同じことが言えるんでしょうか。お願いします。
前提が抜けすぎてて答えようがない。もう少しシナリオをしっかり書こうよ。
そこだけをロックしなけりゃならないことはあまりない
念のため、なんでもかんでもロックしたところでそれでもスレッドセーフになるわけじゃないぜ
普通は想定される複数スレッドからの使われ方というのがあって、 その時にどのように動作させるという設計があって、 その上で内部のデータや動作が不正にならないための条件を導いて、 それを壊さないようにロックなどで保護するんだよ。 だから何の前提もなくただスレッドセーフなんてのはない。
// どちらが実行されるでしょうか? bool a = true, b = false, c = true; if ((a = b == c) == (a == b == c)) d(); else e();
d
宿題か?
貼りつければ分かるから宿題じゃないです クイズです
不適切な問題じゃね 演算子の優先順を問う感じだろうけど=と==をどっち優先にしてもdになる気がする
d?
>>642 (a = t == f) == (f == t == f)
(a = f) == (f == t)
(f) == (f)
t
(a = t == f) == (f == t == f)
(t == f) == (f == t)
(f) == (f)
t
ホントだw
あほやのう
>>644 (f == t == f) が (f == t) ?
なんで?
安産してeだと思った15年目の俺・・・orz 基本的に優先順位とか気にしたくないのでかっこでくくってますが( ゚Д゚)ナニカ?
なんだろうねぇ
なにいってんの? eだろ
>>644 (f == t == f) の出所は?
(a = b == c) == (a == b == c) => (a = (F == T)) == (a == b == c) => (a = F) == (a == b == c) => F == (F == (F == T)) => F == (F == F) => F == T => F なので e が正解
==演算子って左結合じゃなかった?
>>651 まて結合の優先順位と、実行される順序は別だ。
(a = b == c) == (a == b == c)
=> (a = (F == T)) == (a == b == c)
=> (a = F) == (a == b == c)
1)
=> F == (F == (F == T))
=> F == (F == F)
=> F == T
=> F
2)
=> (a = F) == (T == (F == T))
=> (a = F) == (T == F)
=> F == F
=> T
大漁ですな(;´Д`)
式は右辺からと思っていると、 (a = b == c) == (a == b == c) -> X == Y の右辺Yからやることになり、地獄行きになるんです
(==)((a = b == c), (a == b == c))
657 :
651 :2009/08/06(木) 03:03:09
658 :
633 :2009/08/06(木) 09:04:57
>>634-637 遅くなってすみません。
たとえば、スレッドAとスレッドBで変数myClassを共有している
スレッドAでは、myClassに新規インスタンスをセットする
while( 1 )
{
myClass = new MyClass();
}
スレッドBでは、myClassを作業用変数に確保し、さまざまな処理を実行する
while( 1 )
{
MyClass work = myClass;
workに対しての様々な処理
}
代入演算子はオーバーロードしていません
ちょっと何をやりたいかわかりにくいかもしれませんが、これだけを見た場合に問題はありそうですか?
内部的に参照カウント関係の処理が走っていたりして、危険だったりしますか?お願いします。
ダメダメ絶対ダメ スレッドBのループが一回回る間にスレッドAのループが何回回るか全く分からないんだよ? それにいくらメモリを意識しなくていいといったってさすがにノーウェイトでnewしまくったらGCの負担になる
スレッドAとスレッドBの周回数は同期がとれていなくていいです
GCの負荷は考慮しないとして、スレッドセーフかっていう質問なんですが・・・
要するに
myClass = new MyClass();
と
MyClass work = myClass;
のところをロックしないとメモリを壊したりしますか?ってことが聞きたいんです
C言語なら問題無いはずですがC#だとどうなのかな?って
>>635 の言うようにこれ自体はロックしなくても問題ないんですかね^^;
myClassが共有されてると言うことでおけー? ロックされる云々の前に多分それ意図してるように動かないよ。エスパーしてみるとw
必ずしも間違った扱いではないけど問題あるかどうかは別だな AでMyClassのコンストラクタが呼ばれた後に,Bで古いインスタンスが使われる可能性はある
ロックするならスレッドBの書かれてない処理のところじゃね?
参照やintへのアクセスはアトミックと規定されている。 つまり、myClassが32bitだとすると16bitだけ新しい値に書き換わってるという状態は存在しない。 一方doubleやlongはそういう状態が発生しえる。 ただしマルチCPUの場合はもう少しややこしくて、 スレッドAが書き換えたmyClassの内容がスレッドBに反映するまでにタイムラグが発生する場合がある。 これが問題になるならlockを使用するかmyClassをvolatileで宣言する。 Cのvolatileとの違いに注意。
あと、C#のGCは参照カウントじゃないよ。
ま、確実性という意味なら、volatileつけとけば確実。 ただしなくてもメモリが壊れるとかのレベルの問題はない。 実質的にはCLR2.0以降のメモリモデルと86系CPUのメモリモデルから、 事実上はvolatileなくても問題ないはず。
あ、確実というのは、可能な限り最新のインスタンスを使うという意味でね。
Interlocked.Exchangeでも使えば
volatileを使わない場合はもうひとつ問題があって、 MyClassの初期化が終わる前にスレッドBに参照が渡ってしまう可能性がある。 ただし、これが起きるのはMSだとItatiumの場合だけ。 原理的には有名なダブルチェックロッキング問題と同じ。 myClassをvolatileにしない場合のスレッドA while( true ){ MyClass tmp = new MyClass(); Thread.MemoryBarrier(); myClass = tmp; }
おまいら詳しいのな
それもCLR2.0以降では大丈夫でそ。 ついでにその問題を出すなら、Aのメモリバリアだけじゃだめ。 なぜなら、Bスレッドのワーク変数が目的通りに動かないから。 ワーク変数への各アクセスで、新しい参照を読んでしまう危険がある。 かなり直感に反する動作だと思うけど。 結局この場合もvolatileつけるのが最も簡単確実。
>>671 いや大丈夫でないから.NET2.0で.MemoryBarrier()が追加になってるわけで。
myClassからworkの参照コピーは1回限りのようだから問題ない。
work変数はローカルなんだし、
MyClassはスレッドAでセットしたあとは放置状態なのだから、
途中で新しい参照を読み込むことはありえない。
workは一貫したクラスを参照できてれば、MyClassのバージョンは問わないという前提だよ。
C# 2.0で質問です。 List<int> _list = new List<int>(); //(本当はintではなくクラスなんですが説明しやすいようにintで・・・) _list.Add(1); _list.Add(2); _list.Add(3); _list.Add(4); _list.Add(5); foreach(int data in _list) { Console.WriteLine(data); } このような感じで記述した時に List<int>はインデックス0からデータを順番に必ず返すのでしょうか? やってみた感じ必ず返っては来ているようなんですが、保障されているというような感じの文章がヘルプから探せなかったので質問させていただきました。 よろしくお願いいたします。 コレクションやソーテッドリストなんかはその並び順は勝手に変わるようですがListオブジェクトはどうもみあたらない・・・orz
foreach が配列の要素を走査する順序は、次のように定義されます。 1 次元配列の場合、要素はインデックス 0 から始まってインデックス Length ? 1 で終わるインデックスの昇順に走査されます。 多次元配列の場合、要素は、最初に右端の次元のインデックスが増加し、次にその左側の次元のインデックスが増加し、さらにその左側の次元のインデックスが増加する、というように走査されます。
>>674 int のコレクションとして考えれば0〜インデックスの最後までの順序で処理される
それでもってListコレクションの中身も同じように処理されるということでしょうか?
ということであればすっきり処理を続けることができます。
ありがとうございました!
>>672 違うよ。
メモリバリアはCLIの標準仕様では必要。
CLR2.0以降の実装では不要だとしても、互換性の為には必要になる。
だからある。
あとソースコード上はワーク変数に1回だけ取得してても、
実際にはワーク変数を削除して毎回実体にアクセスするという、
直感的でない最適化が行われる可能性があるんだよ。
共有してる変数をvolatileにすればそれを防げる。
この辺はいつだったかのMSDNマガジンに詳しく書かれてる。
>>676 ありがと、勉強になった。MSDNマガジンで確かに見た気がするがスルーしてた。
ごめんもう一つ補足。 CLR2.0以降では書き込みアクセスでのvolatileは事実上不要だけど、 読み取りでは必要な可能性もあったと思う。 書き込み順序と回数はデフォルトでvolatileのように保証されるが、 読み込みは場合によっては省略されることがある。 ただ、その他諸々の事情により、実際に問題が出るパターンはあまりなかったと思う。
C#からUnmanaged-DLLを利用する場合についての質問です。
DLL側でThread Local Strage(__declspec(thread)を付けた静的変数)を使用し
ている場合、(DLL内の関数がC#から呼び出され)DLL内でこれにアクセスしよう
とした時にSystem.AccessViolationExceptionになるようです。(エラー画面.PNG)
DLL側を修正せずに、C#側の修正もしくは他の手段でこれを回避する方法はあ
りませんでしょうか?
http://www1.axfc.net/uploader/Sc/so/24967.zip&key=Test は問題を再現する簡単なコード例です。
Test\MyDll\MyDll.cpp の18行目が__declspec(thread)を付けた静的変数で、
これを、N:\Test\MyCSApp\Program.cs の29行目から呼び出されたMyFunc(5)の
処理でszMyLastErrorにエラー情報をセットするところで例外が発生します。
Test\MyC++App は同じ処理をC++で記述した場合で、これは問題なく動作しま
す。
以上、よろしくお願いいたします。
C++/CLIあたりでlibを使ってラッパ作れば何とかなるかもね
レスありがとうございます。
>>681 症状からして、そのページに書かれていることが起きている(C#はDLLを動的にローディングしている)
のだろうな、とは思っていたのですが、それを回避する方法がなにかあるのではないかと質問させてい
ただきました。
>>682 MangedなラッパDLLを作成し、これにMyDll.libをリンクしてみましたが、ラッパDLLがC#アプリからは
動的にローディングためか結局ダメでした。
何か、裏技がありませんかねえ??
別 Exe にしてプロセス間通信するしかないだろ。
C++/CLIから起動してC#側を動的ロードするとか
DLLのほうを触っていいならTlsAllocを使えばいいはずだけど。
COMのアウトプロセスサーバーでラップすると何とかなりそうだが、 激しくめんどい。 インプロセスサーバーだと駄目だった。
一番現実的なのは
>>685 だろうな
マネージ側は参照だけでいいんで動的ロードとか言わんけど
689 :
デフォルトの名無しさん :2009/08/07(金) 08:47:30
.NETのWindowsアプリケーションで作成したプログラムにおいて、 ネットワークPCのドライブにあるフォルダをアクセスしようとした時、 たまたまそのPCが立ち上がっていなくてネットワーク上に見つからない 場合に長く待たされていました。このタイムアウト時間はたぶんOS の設定で変えられるものとは思うのですが、タイムアウトにならない うちにプログラムでアクセスを中断してしまうことは可能でしょうか?
C#でパケットキャプチャしたいのですが、サンプルありますか?
>>691 ども、でもなんかよくわからないです
エラー 2 型または名前空間名 'NetDefineSet' は名前空間 'StackAsterisk' に存在しません。アセンブリ参照が不足しています。
とか
お前にはまだ早いということだね
>>689 別スレッドでチェックしに行って適当にタイムアウトとかできるんじゃ?
>>692 そういやなんかサンプルそのままじゃビルドできなかった記憶があるな
>The Code Projectによいサンプルがあったので拝借させていただき、それを元に書いてみました。
>元となったのは 「RawSocket Class-Create Network Monitoring (Packet Sniffing) Apps」 というものです。
って書いてあるしそっちも参考にするといい
スレッド分けるのに一票
Process.Start()で存在しないフォルダを起動したら、FileNotFoundExceptionじゃなくてSystem.ComponentModel.Win32Exceptionというのが来る Frameworkが吸収するところじゃないのか
あなたはそれがいいと思うかもしれないが、 大多数の他人はそう思わない
いやそうでもない
Frameworkが吸収すべき所のような気がするけど 実害は無いからとやかく言わない
>>697 つうかふつうに固まるだろ・・・・
問題はみに行く時に固まるつうのが問題なわけで
なにかボタン押したときにチェック
↓
チェック中ですのダイアログ的なものと共に強制キャンセルボタン
↓
チェック開始(バックグラウンドワーカーでもなんでも)
↓
バックグラウンド終了前にキャンセルされたら
ナックグラウンドワーカー停止
こんなんでいいんじゃね?
成功のときはバックグラウンドの完了イベントかなんかで処理するとか
色々あると思うけど
Microsoftの決めたことなんだから正しいお
>>697 吸収してどうしろって?
別プロセスからの例外をプロセス間通信で受け取るの?
それをフレームワークでやれって?
なん…だと…
Windowsフォームで質問。 Form2 _form2 = new Form2(_form1); としたとき、_form2.FormClosedのイベントハンドラで_form1.Close()するコードを書くと、 Form2.OnFormClosed()が何度も呼ばれる(つまりFormClosedイベントが何度も発生する) ようなんだけど、これは仕様?バグ? 仕様だとしたらどう理解したらいいんだろう?
OwnerはCloseするときOwnedFormsを全部Closeする って言えば分かる?
普通に再帰呼び出しになってるだけっしょ 止まるのはハンドルが消えるから
>>708 現象の説明としてはそれでいいと思うんだけど、
俺が聞きたいのはそういうことじゃなくて、それが仕様なのか、
仕様だとしてそれに何らかの意味があるのかってこと。
FormClosedイベントの意味は、「Close()が呼ばれました」ではないはずだよね。
> FormClosed イベントは、ユーザー、Close メソッド、または Application クラスの Exit メソッドによって > フォームが閉じられた後に発生します。 「Form.Closeが呼ばれました」でも大体いいんじゃないかな ま、おいらはMSの人じゃないので意味とか答えられないけど
>>710 それはさすがに読解力マズいんじゃないかと思うけど。。
何度も呼ばれるって何度?
Closed≠Disposedと理解すれば良い
>>710-711 MSDNの説明から読み取れるのは
・ユーザ操作、Close()、Application.Exit()で発生しうる
・FormClosedが発生した時点ではフォームは閉じられている
の2点だけじゃね?
てか、説明が怪しいと感じたら英語版を読むといい
それでも怪しいときも多いけどな
ちなみに何回くらい呼ばれるの? また毎回同じ回数なのか場合によって変わるのかどんな感じ?
>>716 以下が問題を再現する最短のコード。
コンストラクタは省略してある。
public partial class Form1 : Form
{
Form2 _form2;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
_form2 = new Form2();
_form2.FormClosed += new FormClosedEventHandler(_form2_FormClosed);
_form2.Show(this);
}
void _form2_FormClosed(object sender, FormClosedEventArgs e)
{
Close();
}
}
public partial class Form2 : Form
{
int _count = 0;
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
Console.WriteLine("Form2.OnFormClosed Called ! // count = {0}", _count++);
}
}
>>717 とりあえずDisposedイベントでForm1.Closeやるように変更したら
現象回避出来たぞ
>>718 うん、それはわかるけど、
俺が知りたいのはこういうコードを書くと「何故」そんなことになってしまうか、なんだ。
普通に考えれば、OnFormClosedが何度も呼ばれるのは理解に苦しむと思うんだが。
Form2ClosedでForm1Closeして新しいClosedが発生するのがおかしいと言ってるの? 何がおかしいのかよくわからない
>>719 まあ所持関係にあるForm同士として呼び出してるんだから
> _form2.Show(this);
Form1閉じる→Form2閉じる
っていうのは標準動作として組み込まれてる
逆方向の動きを追加したい場合(Form2閉じる→Form1閉じる)は
標準の動作と競合しないようにしなきゃ不具合が起きて当たり前
FormClosed()の時点ではForm同士の所持関係を破棄していないようなので
無限ループが起きる
Disposed()の時点でForm同士の所持関係を破棄しきったので
やりたい動作が実現できる
FormClosedイベントなんだから、「完全にフォームが閉じた後」に発生しないとおかしい と言いたい訳か。 んで_form2が完全に閉じた後だから、_form2_FormClosedが呼ばれても子フォームのCloseが呼ばれるのはおかしい、と
Close()をこうやって呼べばいけるっちゃいける。 this.BeginInvoke((MethodInvoker) (() => Close())); 親フォームが子フォームを閉じるための参照のコレクションを持ってて、 親フォームから登録を抹消するタイミングがFormClosedの後なんだろうな。
>>722 >_form2が完全に閉じた後だから、_form2_FormClosedが呼ばれても子フォームのCloseが呼ばれるのはおかしい、と
いや、そこは必ずしもそうは思わないけど、
>>717 のコードの動作が「おかしい」と思う点は、
何度も言うけどOnFormClosedの呼ばれ方が、MSDNに書かれたFormClosedイベントの仕様に
反するように思える点。
>>723 なんかそれタイミング次第で
うまく行ったり例外おきたり
危険な動作しそうな気がする
例えば、Form.Show()は何度でも呼べるけど、 その都度Shownイベントが発生したりはしないよね。
>>724 Formのオーナーシップの関係で
Formクラスから子FormのCloseが呼び出されるってことでしょ
何も反してないよ
>>727 だから、FormClosedイベントの意味、つまり仕様は、「Closeメソッドが呼ばれました」
ではないよね。少なくともMSDNライブラリを詠む限り、そうは読み取れない。
お前が明示的に呼んだときしかCloseメソッドが呼ばれないと思ってるということか
>>729 こんなこと言いたくないが、馬鹿はすっこんでてくれよ。
二重の意味で日本語も読めないのかまったく……
むしろMSDライブラリを読み取れないレベルの馬鹿がやめた方がいい お話になりません
横やりだが
>>728 とかの言ってることは別にそんなおかしくないぞ。
Closeを何度呼ぼうが、実際に閉じたタイミングで一度だけ発生する
と期待するのは普通の感覚。
MSDNの説明も普通に読めばそうだと期待する。
一度しか呼ばれない、とは明記されてないし結局仕様なんだろうとは思うけど。
1度テストしてみて理解できないようなら方法は無い
MSDNのクラスのドキュメントって クラス単体の動作を説明してるのが基本であって フレームワークの中でそのクラスがどう扱われてるかは オマケ程度にしか説明されていない っていうことをわかって無いから的外れなこと言い出すんだよね
>>735 ほほう、「的外れ」とは?
具体的に何がどう「的外れ」だ、と?
いや、無理しなくていいよ。
そんな自分の頭で理解していることを表現しているとは思えない、
悪いけど意味不明な文章を書いているようじゃたぶん正面からの回答は無理だと思うから。
しかし、別に初心者が悪いと思わんけど(誰だって最初はそうだし)
知りもしないことに口出しして挙句に相手をいきなり罵倒する奴っていうのは
迷惑以外の何者でもないな本当。
初心者どころか自分でイベントを生成するコードすら書いたことすらないのが、
言っちゃ悪いがミエミエなのに。
まあそれ以前に日本語もまともに読めていないようだけどw
2chでこんなこと言ってみても仕方ないのは分かっているが、あまりに腹が立ったのでね。
ここでクダ巻いててもしょーもねーだろw
長文書いたら負けですよ
閉じられる理由位見ろ _form2_FormClosed() の処理が if (e.CloseReason == CloseReason.UserClosing) Close(); じゃないの点が問題なんだよ 何度も Form2 に FormClosed が送られてくるのも あくまでも Form2.FormClosed イベントが終了していない段階で Form1 を改めて閉じようとしているからループしてるに決まってるだろ ユーザ操作以外ではどうせ親から Close が送られてくるから無視でいい
Form 1 の中で生成した Form2 を破棄しようとして起きるんじゃないの
741 :
デフォルトの名無しさん :2009/08/08(土) 18:41:56
テキストボックスやパネルの境界線の色をグレーや薄いブルーなどにするにはどうすればいいですか? また、 ラベルの上に小さめのテキストボックスを重ね、一つのコントロールにすることはできますか? 調べましたが分かりませんでした。 どなたか教えてください (T_T;)。
WPFをつかっとけ
743 :
デフォルトの名無しさん :2009/08/08(土) 19:45:28
>>742 WindowsフォームアプリケーションでWPFのコントロールを使えるんだっけ…。
>>740 ユーザ要求により Form2 に WM_CLOSE が送られ
その処理中に Form2 から Form1 に WM_CLOSE が送られ
Form1 が閉じる際に子ウィンドウに対して WM_CLOSE が送られ
その処理中に Form2 から Form1 に WM_CLOSE が送られ……
WM_CLOSE から発生する一連の処理が終了してない間に
改めて WM_CLOSE を流したらループするだろ
>>743 Windows Forms の編集時にツールボックス見たら
WPF 相互運用機能グループに ElementHost あるでしょ
>>717 の場合は、別にWin32のウィンドウメッセージの水準で連鎖が起こってるわけじゃなく、
あくまで.NET Frameworkの、いわゆる「イベントの連鎖」が起こってるだけ
(しかも仕様というよりバグが原因ぽい)だから、ちょっとその説明は違うと思うけど。
なんでElementHost なんてわけわからん名前にしたんだ?
至って普通の名前だと思うが・・・
わけわからんって。 Element(UIElement) を Host するから ElementHost。
WinFormだけでやるなら、 TextBoxやらはボーダーなしにして、 その親としてPanelを用意して、 そのPanelのPaintで枠を描画
このスレはMS信者に乗っ取られているようだ 嘆かわしい
まぁC#使ってる奴の99.9%がMS使いだと思うよ(´・ω・`) だれかC#でiPhone開発してる人来ないかな・・・
何かのキーワードに反応するボットじゃない?
755 :
デフォルトの名無しさん :2009/08/08(土) 21:12:16
>>750 PanelにPaintができるの?
枠線入りの画像をパネルの背景にするってこと?
普通にPaintできるだろ もしWPFを使うなら,テキストボックス一つ一つをElementHostでホストするようなことはお勧めしない ある程度の大きい範囲で丸ごとWPFにしてElementHostに乗せる
757 :
デフォルトの名無しさん :2009/08/08(土) 21:28:28
>>755 具体的にどうやるの?
panel1_iventが出てきたけど…。
758 :
デフォルトの名無しさん :2009/08/08(土) 21:45:35
paintイベントって、formをloadしたときに自動で発生するの?
描画が必要なとき もちろん初めにフォームを表示するときも呼ばれるな
くれくれしすぎは
761 :
デフォルトの名無しさん :2009/08/08(土) 22:14:24
もしパネルやテキストボックスがたくさんある場合、 それらの全ての四辺を描画するならば、 重たくなりそう。
762 :
デフォルトの名無しさん :2009/08/08(土) 22:16:19
>>756 ラベルやテキストボックスにbordercolorがないのが困る。
763 :
デフォルトの名無しさん :2009/08/08(土) 22:17:19
>>756 エレメントホストはどれくらい重たいのかな。
今からやってみよ。
>>741 なんかまともにレスする奴がいないんで見てられないからレスするけど、
そんなのは普通にTextBoxを継承してカスタムコントロール作ってやればいいんだよ。
class TextBoxEx:TextBox
{
public TextBoxEx()
{
BorderColor = Color.Red;
BorderStyle = BorderStyle.FixedSingle;
}
[Category("Design"), DefaultValue(typeof(Color), "Red")]
public Color BorderColor { get; set; }
[Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new BorderStyle BorderStyle
{
get { return base.BorderStyle; }
set { base.BorderStyle = value; }
}
* 764続き * protected override void WndProc(ref Message m) { base.WndProc(ref m); const int WM_PAINT = 0xF; switch (m.Msg) { case WM_PAINT: using (Graphics g = CreateGraphics()) { using (Pen pen = new Pen(BorderColor)) { Rectangle rect = ClientRectangle; rect.Width -= 1; rect.Height -= 1; g.DrawRectangle(pen, rect); } } break; } } }
>>765 細かいことだけど、WndProcよりもOnPaintのオーバーライドのほうが簡潔では?
もちろんsuper.OnPaint呼ぶ手間含んで。
767 :
デフォルトの名無しさん :2009/08/08(土) 23:09:50
>>765 すごい。ありがとうございます。がんばって解読します。
この継承クラスをまた継承したら、命令を抑えてコーディングできますね。
※ なんで継承したら、bodercolorが出てくるんだろう---。
769 :
デフォルトの名無しさん :2009/08/08(土) 23:12:08
例えば50個のテキストボックスを表示させ、 それら全てに色枠線を描いたら、重たいのかな。
771 :
デフォルトの名無しさん :2009/08/08(土) 23:35:45
panelならOnpaintも可能なんだろか。
772 :
デフォルトの名無しさん :2009/08/09(日) 07:46:49
>>765 さんの記事に、
「using (Pen pen = new Pen(BorderColor)) 」
という行がありますが、using句は名前空間の定義のみに使用するわけではないのですか?
どういうケースでusing句を指定するケースがあるのでしょうか。
>>765 using (Graphics g = CreateGraphics())
{
using (Pen pen = new Pen(BorderColor))
{
}
}
だとネストが深くなるから
using (Graphics g = CreateGraphics())
using (Pen pen = new Pen(BorderColor))
{
}
の方がいいな。
}それならこれでいいだろ using (Graphics g = CreateGraphics(), Pen pen = new Pen(BorderColor))
わざわざ1行にする意味ないな
「黄金分割」<副題> ピラミッドから ル・コルビュジェまで 柳亮著 美術出版社 1965年の出版でしかも純粋な美術書。でも、なぜフィボナッチ数の課題を 出されるのかピンとこないプログラマは一度目を通してみるとよい。
黄金分割なんてうさんくさいと思うのは俺だけか?
みんなが黄金といっているのだから黄金なんだろう
僕には黄金はまだきついので聖水でいいです
名前が胡散臭いだけで特別なものでも不可思議なものでもないけどね。
783 :
778 :2009/08/09(日) 17:47:10
>>765 こうやると枠線だけ書いて、中の文字塗り潰してしまうイメージあったけど
これでいけるんだ
勉強になりました
786 :
デフォルトの名無しさん :2009/08/09(日) 19:13:38
このやり方で重たくならないならば、俺もやりたい。 みんな、なんでそんなに詳しいの? 頭脳を分けてほしいよ。
もっと簡単にできたとおもうが。
listviewのcustomdrowめんどくさー
ユーlistviewつくっちゃいなYO!
customdrow?
カスタムドローで合ってるぞ オーナードローじゃないぜ
dr o w?
793 :
デフォルトの名無しさん :2009/08/09(日) 21:05:54
>>784 このロジックはどこに書くの?
デザイナーズcs?
それとも本体の方?
いろいろ作ったらさ SS見せてほしいんだけどw
795 :
デフォルトの名無しさん :2009/08/09(日) 22:21:54
Secret Service
797 :
デフォルトの名無しさん :2009/08/09(日) 22:26:35
SQLサーバーを借りてるんですが、直にSQLを書くのと、linqを使うのと、どちらがメリットが高いですか?
798 :
デフォルトの名無しさん :2009/08/09(日) 22:28:15
ボーリングのスコア表をC♯で作りたいんだけど、 膨大な数のテキストボックスを早く負担なく描くには何かいいテクニックはありますか?
799 :
デフォルトの名無しさん :2009/08/09(日) 22:29:39
>>798 なんでボーリングスコア表なんていんねん。
800 :
デフォルトの名無しさん :2009/08/09(日) 22:31:47
>>798 マウスを使って一つずつペタペタ描く。
それしかないだろ。
本を見てもそう書いてた。
間違っていたらごめん。
手っ取り早いのはGirdじゃね
802 :
デフォルトの名無しさん :2009/08/09(日) 22:45:24
>>801 ジードって読むの?
初めて聞きました。
詳しく教えてください。
僕もマウスて配置していてくたびれました。
1文字間違えるのが流行りなのか? DateGridView
>>800 その本は何個のテキストボックスをポトペしていた?
10個超えてたらダウト
805 :
デフォルトの名無しさん :2009/08/09(日) 22:59:55
>>804 5つのコマンドボタン。
揃える技は書いてたけど、大量描画についてはコメントなし。
ストライクとかのアイコンはどうすんの? 結局自前で描画する予感 なら1枚絵で作ってしまえ!とか
DataGridViewはアイコン置けるよー
複数の定数を定義したクラスの中に存在する、 定数に要素に全てアクセスするにはどうすればよいでしょうか? for each 的なコードがあればお教えください。 class TestClass { public const string const_test_1 = "aaa1"; public const string const_test_2 = "aaa2"; public const string const_test_3 = "aaa3"; public const string const_test_4 = "aaa4"; }
設計から見直せタコ
>>808 案1 人手で全て列挙を行う
案2 コンパイラの忠告を無視して後々のメンテナンスを全て投げきってもいいならリフレクション
後で人手で行った場合の数倍のツケを支払う覚悟があるなら
機械的にリフレクションを通してもいいかも
配列で用意しとけよそんなん
リフレクションなんか馬鹿に勧めるな馬鹿。
リフレクション使って全部実行時に行う必要もなくて 一旦リフレクション使って集計して その後手作業でソース起こしてもいいかもね
yieldでよくね?
>>817 これはよくやる
自動生成しちゃえばいいんだよね
リフレクションとか難しすぎて頭おかしくなりそう
>>819 日本語としては「ひちがつ」が正しいがレッドブックの「なながつ」も間違いではない
ただ朝鮮人や関西人が良く使う「しちがつ」は明らかに間違い
これを使っていると日本人である事を疑われるので気を付けるように
馬鹿ウヨ死ねや
lex とか yacc を思いだした
リフレクション使うならせめてconstではなくreadonly使おう constとリフレクションは非常に相性が悪い
>>825 もしかしてCLI時点でconst修飾の名前ってきえちゃうの?
ビルドした時点でリテラルに置き換わるんじゃなかったか
んだよ だからリテラルにできない物はconst宣言できない
使用した場所はリテラルに置き換わってるが、 型の定義としては残っているのでリフレクションで確認できる。 public static const field System.String const_test_1
ildasmの表記のほうがいいな。 .field public static literal string const_test_1 = "aaa1"
しょうがないんだろうけれど、Attributeのコンストラクタ?に普通のオブジェクト生成式とか書けるようになって欲しいお(´・ω・`)
むちゃゆうな まあ気持ちは分かる
Expression<TDelegate>さえ書ければ解決なのに
TDelegateってなんだ。
Delegateは特殊クラスなのでこういう制約は作れないってことだと思う。 class F<T> where T : System.Delegate
IL 上作れないわけじゃないよ。実際 ECMA335 には 一例として載ってる。 要するにわざと禁止しているものなので理由を考えて みるといいと思うよ
1日分のログを日付フォルダごとに分けて保存していて 一定期間経過したフォルダを DirectoryInfo.Delete(true)で削除しているんだが 毎日少しずつ削除時間が延びていくんだが なんか理由知っている人いない? 削除の他にも処理をしているんだが なぜか削除だけ時間がかかる IOの問題なのかな? ちなみに、、、 OS:windows 2003 server R2 Enterprise x64 Edition Service Pack2
普通にコマンドで消した時は遅くないの?
削除してる間にログを他者が見てるって事はないの? そもそもログの量、大きさは同じくらいなの?
840 :
デフォルトの名無しさん :2009/08/14(金) 00:23:18
処理内容がわからんから何とも胃炎。 毎日一定時間に処理をしてるんじゃないのか。 削除終了時に終了後から一定時間をセットするなら 削除処理にかかる時間分ずれていくだろ。
すいません vista + C# express edition + excel2007です 参照設定で参照の追加でcom タブでmicrosoft excel5.0をみると microsoft excel5.0 ?????????? と出てるんですけど・・・ これって一体・・・・2007以前のexcel入れれば治るのでしょうか? とても不安です・・・ 壊れてるのかなC#・・・(涙
>>837 最初は断片化かな?とか思ったけど、メモリリークな気もする。
C#はジェネリクスとnewで管理されているけど解放されないメモリが
簡単にできちゃうから、仮想メモリにガリガリアクセスして時間が
かかってしまう可能性も否めない。
Process Explorerあたりで確認して、GCのジェネレーション2が
異常にでかいサイズなら解放漏れ(ジェネリクスのClearやDisposeのし忘れ)を
確認してみたらどうだろう。
>>842 気になる
これってアンマネージドで管理されているメモリの話?
それともマネージドだが古すぎてpermanent(永久?)領域に直ぐに移されちゃう話?
それとも両方混ざった話?
マネージドでしょ
845 :
842 :2009/08/14(金) 02:35:11
マネージドの話。 ちょっと怖い書き方をしてしまったけど、要は使わないクラスがどっかで 参照されてるので消されずにメモリが圧迫されてるかも、という事です。 ソートとかで一時領域として使ってたDictionaryに、そのまま参照が残っちゃってて、みたいな。 開発中、デバッガ終了後なかなか処理が戻ってこない時はこの現象が起きてるか 疑ってみたほうがいいかも。と、経験者よりorz
DirectoryInfoのインスタンスは使いまわしてるか、毎回newしてるか。 Directory.Delete(String, Boolean)を使ったらどうか。
847 :
841 :2009/08/14(金) 08:32:26
初心板にまわります
848 :
837 :2009/08/14(金) 11:20:52
みなさん、ありがとうございます。
>>838 ディレクトリのサイズが32MBぐらいで
普通に"rmdir"コマンドで削除すると1分ぐらいです。
>>839 削除しているのは、数日経過したディレクトリなので
他の人は見てないです。
>>840 日付ごとにディレクトリを作成して
その配下に時間ごとのサブディレクトリを
作成してプロセスごとのログを出力しています。
"日付ディレクトリ"の日付を見て
数日経過していたら削除するという
処理を行っています。
>>842 自分も最初はメモリリークを疑っていました。
ページファイルが1日で5MBずつ増えていますが
そのせいで削除処理が約30秒も伸びるんでしょうか?
削除処理だけで、他の処理は遅くなっていないのも
気になっています。
>>846 毎回newしています。
解放処理は明示的に行っていないので
参照が残ってしまっているのでしょうか?
>ディレクトリのサイズが32MBぐらいで >普通に"rmdir"コマンドで削除すると1分ぐらいです。
850 :
デフォルトの名無しさん :2009/08/14(金) 12:58:35
削除の処理にかかる時間が延びてるってことか
32MBで一分ってその時点で遅すぎねーか?
852 :
837 :2009/08/14(金) 14:04:49
>>850 そうです。
削除の時間が日々伸びています。
>>851 ディスク上のサイズは204MBでした。
遅すぎですかね?
ファイル数くらい書けよ。 エスパーさせんな
シャドウコピーとかは有効になってる?
ファイル数がきっと膨大なはず ファイルの数があまりに多いと関連の処理がどんどん重くなる 確かWindowsのファイルテーブルてツリー構造してるの見た目だけで 実際はドライブごとに一つの表があるだけだから ドライブ内のファイル/フォルダの数が多くなる度に ファイル/フォルダ絡みのあらゆる動作が遅くなる 間違ってたらごめん
NTFSだったらB木使ってるからFAT32よりも格段に速いよ
>>856 フォルダの中身ごと削除の時点で全スキャンだし
858 :
837 :2009/08/14(金) 15:58:22
>>853 すみません。。
フォルダ数:約9500
ファイル数:約52500
膨大な数ですよね。
>>855 毎回削除する"フォルダ数"/"ディレクトリ数"は
変わらないのですが
それでも段々遅くなるのでしょうか?
>>858 数日でそんなに溜まるログとか設計が狂ってる
いっその事DBにログ記録しろ
単純に一日のログを1ファイルにまとめるだけでも 相当マシになるはず
862 :
837 :2009/08/14(金) 17:51:15
みなさん、ありがとうございます。 設計というよりも、そういう仕様なので 仕方ない部分もあるのですが・・・ アドバイスを参考にしたいと思います。
それ、プログラム終了させて新たに起動したらあきらかに速度が違う というのなら、今まで消したファイルもスキャンしてるとかないか?
864 :
842 :2009/08/15(土) 01:15:55
>ページファイルが1日で5MBずつ増えていますが >そのせいで削除処理が約30秒も伸びるんでしょうか? >削除処理だけで、他の処理は遅くなっていないのも >気になっています。 その、今の所、日を追うごとに増えているデータってのが ページファイルだけなら疑ってみる価値はあるかと。 ファイル削除とページングでハードディスクへのリクエストがかち合って ガリガリ言ってる時間が長くなれば可能性はあるかと。 削除プログラムが常駐プログラムなら一度再起動してみて速度をみてみるのはどうだろう? それ以前にgen2の値はどうなんだろう?これでリークか否かの答えは出ると思うんだけど。 毎回起動なら、そのページファイルを増やしている別のプログラムをつきとめた方がいいかも。 なんにせよ、そのサーバはリークを起こしているっぽいw
webbrowserに表示しているHTMLを画像として保存するには、 どのような方法が一番妥当ですか? クライアントの隠れている部分も含めて画像変換したいので、 PrintScreenではだめです。
866 :
865 :2009/08/16(日) 13:00:41
867 :
865 :2009/08/16(日) 13:04:11
868 :
837 :2009/08/17(月) 14:29:39
>>864 遅くなりましたが、「Process Explorer」で見てみました。
削除しているプログラムの値です。
#Gen0 Collection 14,220
#Gen1 Collection 5,952
#Gen2 Collection 314
Gen0 Heap Size 3,145,728
Gen1 Heap Size 30,976
Gen2 Heap Size 64,076,116
これって、リークしているのでしょうか?
869 :
864 :2009/08/17(月) 18:07:10
Gen2を知らないなら、今だけはプログラムを起動中に常に必要なメモリサイズだと思ってください。 削除プログラムに常に必要とされているメモリが64M弱が正しいならリークしてないです。 これが削除処理を実行する度に増えているなら、かなり怪しいです。 個人的な見解としてはファイルが何ギガあっても削除するだけに64Mは異常です。 CLR Profilerで何にメモリを使っているのか調べます。 更にいうと、64M程度で体感速度に差が出るとは考えづらいです。 他のヒープも合わせ削除処理中にムチャなメモリ確保がある可能性も視野に入れます。 ただし処理時間の原因がメモリリークであり、それが改善された場合、 これ以上削除時間が延びる事は無いはずなのでクレームが来るまで放置しますw
サーバーでPaythonスクリプトを実行し、 特定の命令が呼び出されたら割り込みが入るまで待機ということをしたい。 それを実現するために、スクリプトを実行するごとにスレッドを呼び出してイベント来るまで待機ということをしているんだが、 これだと多数のユーザーがスクリプトを実行したときにリソースが枯渇しそうなことに気付いた。 スレッドプールで書き直したいんだが、ブロックするような処理をするのはまずいとMSDNに書いてあった. これってイベントが来るまで待機するような処理も含まれるの?
どの辺にC#がw
872 :
870 :2009/08/17(月) 23:55:18
使用言語:C#3.0
>>870 そのまえにペイソンとかいう言語はC#とどの程度相互運用できるんだ
phython≠paython
また変なエサを投下して・・・
ふぁいそん?
北米的にはぺいずぅぁん。
SORPとかでWCF使うとか
879 :
870 :2009/08/18(火) 16:49:05
>>873 ironpaythonを使えば、楽に相互運用ができる。
>>879 paythonって何だよ
ironpaythonって何だよ
試しにググったらここのPart42が引っかかったw
SORP?
>>879 アイロンペイソンってサーバーで動かすPaythonスクリプトにもなれるの?
おまえらペイトホンも知らねーのかよ。
>>870 マジレスしようと何度か読み直してみたがさっぱり意味が解らない。
とりあえず質問の内容は最後の2行のみ?
で、ブロックしそうなのはクライアント側?サーバ側?
っつか多分日本語でやりとりしてもらちがあかなそう。簡単なソース出して
これはおk?ってやった方が、キミとは上手くやっていけそうな気がする。
boid mein() { } とかってコード期待w
>>869 亀だが・・・
64M程度ならドトネトでは普通じゃないかと思う
結局メモリ量は予約領域でもあるはずだから純粋に使用しているメモリというわけではないだろうし
887 :
870 :2009/08/18(火) 23:54:18
>>884 ソースをさらします。
サーバーがRunScriptというパケットを受け取ると実行される
void talk()
{
Thread t = new Thread(executeScript);
t.Start(this.remoteip);
}
private void executeScript(object data)
{
PythonEngine pe = new PythonEngine();
pe.deliverVarible("_self", this);
pe.deliverVarible("_target", target);
pe.deliverVarible("_remoteip", (string)data);
pe.execute("foo.py");
}
//リモートIPとManualResetEventが対になってる
static Dictionary<string, ManualResetEvent> ManualEvent = new Dictionary<string, ManualResetEvent>();
//foo.pyがwaitForSignalを実行すると呼び出させる
public void waitForSignal()
{
if (remoteip == null) return;
ManualEvent[remoteip].Reset();
ManualEvent[remoteip].WaitOne(Globals.script_wait_time);
}
//別スレッドから呼び出し
public void setSignal()
{
if (remoteip == null) return;
ManualEvent[remoteip].Set();
}
888 :
870 :2009/08/18(火) 23:55:49
訂正 ×//別スレッドから呼び出し ○//同じクライアントから特定のパケットを受け取ると呼び出される(パケットを受け取る部分は非同期ソケットを使ってます)
Directory.Delete("パス",true);
これに64Mはありえない。それからgen2は回収に何度か失敗している領域。
現在使用中かつ長い間確保されている可能性が高い。
とまぁ、レスの情報と自分の経験からの推測な訳です。はい。
本当に64Mが適正か否かは
>>837 氏のみが知る所でしょう。
質問です 今ちょっと頼まれて テキストボックスとボタンのフォームだけがあります。 そしてそれに必須入力チェック、桁数チェック、書式チェックと言う条件を作らないといけないのですが 当方初心者でまるでわかりません。 まず、True,Falseの場合に出すメッセージボックスを作ります。 そしてIF文でどっちに行くかを条件付けるんですが どのようにして記述していけばいいのでしょうか・・・・
ググれ
初心者向けの本でも買え。
カスどもありがとう助かったわ
894 :
デフォルトの名無しさん :2009/08/19(水) 22:19:58
タブコントロールのタブなしってあるの? アクセスではあるらしいね。
フラットスタイルじゃなくて?
ふらっとの方でもたずねたのですが、返事がないので C#を始めて1年くらいで、2Dグラフィック周りを主にやってます。 最近、JAVAプログラムのオープンソフトでJDrafter(hhp://jdrafter.com/)とい うソフトを発見したのですが、 このソフトは、イラレ感覚で2Dグラフィックを作成し、Javaの オブジェクトとして保存できるため、Javaプログラムからの表示やアニメーションなどにも応 用できるようなのですが、 どなたか、C#でこんなプログラムをご存知の方いないでしょうか。 もしくは、オープンソフトなので、描画周りのクラスをC#に変換して利用できないか考え ているところですが、どなたかその方法やこれに適したjava→C#変換ツールをご存知 の方があれば、ご教授をお願いします。
何文字目?
Java使えよ
つJ#
900 :
デフォルトの名無しさん :2009/08/19(水) 22:59:36
>>898 javaに変えてもいいのですが、今までの資産や、C#の将来性を考えると簡単に
は決断できません。
ググってもみましたが、どうしてもわからないのでお尋ねしているところです。
つか xaml に変換できるもの、Expression とかがまさにそのまま イラレ感覚がいいんならイラレ -> xaml のエクスポータ使えばー
>>902 ありがとうございました。
xamlテクノロジーは始めて知りました。(勉強不足ですみません。)
xamlについて調べて、フリーの(金がないので) ツールなんかがない
かいググります。どうもありがとうございました。
イラレってxaml生成できんのか。おどろいた。
XPSじゃねーのと思って調べたらほんとにXAMLだった
イラレ10でも出力できますか?
(´・∀・`)ヘー
909 :
デフォルトの名無しさん :2009/08/20(木) 06:44:32
イラレでコントロールを作成してWPFコントロールにすることは可能なの?
仮にCanvasしか吐けなくても好きなルート要素で囲んでやるだけで ユーザーコントロールでもコントロールテンプレートでも作れるはず
へーへーへー
912 :
デフォルトの名無しさん :2009/08/20(木) 11:35:37
すいません。教えてくらはい。 VS2008のプロジェクトに*.iniファイルを含めて プロジェクト出力として一緒に出力したいのですが、 クラスライブラリプロジェクトの場合うまくいきません。 これは仕様でなんでしょうか? <<設定例>> ファイルプロパティ ビルドアクション:コンテンツ 出力ディレクトリにコピー:常にコピー
質問ですが、遅延バインディングにてExcelの単一セルの中に入っている情報を取り出すにはどうすればよいでしょうか?
遅延バインディング レイトバインディング 実行時バインディング いろんな呼び方がありますね。
http://www6.atwiki.jp/we_hate_sunshine/pages/73.html にありましたコードの一部を参照させていただいております。
// セルデータを2次元配列にいっぺんに読み込みます。
objRange_Late = objSheet_Late.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, objSheet_Late, null);
Object[,] tmpTable;
tmpTable = (System.Object[,])(objRange_Late.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, objRange_Late, null));
↑上記コードはうまくいったのですが、
単一のセルを指定し(Rangeを使うのだと思います)そのセル内のデータを取得する方法がわかりません。
やりたいこと 例)
A1セル「hoge」 の文字列hogeを取得したいです。
試しに書いたコード(実行時にエラーが出たのでできませんでしたが)を乗せておきます。
parameters = new Object[] { "A1",Missing.Value };
objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, parameters);
Object tmpTable = new object[1];
tmpTable = (System.Object[,])(objRange_Late.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, objRange_Late, null));
こういう雰囲気でいけそうな気がするのですが、わかりません。よろしくお願いします。
914 :
デフォルトの名無しさん :2009/08/20(木) 18:43:57
Webサーバ機能を、作ってるアプリに付けたいのですが、 単一ループ内でkeep-aliveを処理できるお手軽なアプローチ無いでしょうか? // listner起動 while (true) { // Context取得 (ブロック) // Request処理 // Response処理 if (Connection == close) { break; } } と言う様な処理を行い、 要は、ソケットの接続〜切断のモデルと近似にしたいのです。 理由は、データ管理や前回のリクエスト/レスポンスに強く依存した処理の為、簡単に回したいと言う感じです。 アドバイスと慈悲を下さい。
>>912 プロジェクト出力ってセットアッププロジェクトの話?
セットアッププロジェクトでDLLだけ配布するの?
>>914 プロトコルに何使うのさ
>>913 Excelの質問には答えられないけど、エラーの内容ぐらい書いた方がいいんでないか
>>916 HTTP で keep-alive でのみセッションが維持されるなんて
仕様外の特殊な事考えたりしてるなら
独自プロトコルでやった方がいい
前回のリクエスト/レスポンスに強く依存した処理ってviewstateじゃだめなん?
>>914 つまりソケットの接続〜切断のモデルと同じなんじゃね?
ソケットつかえばおk
.net 3.5、 WinXP VS2008、C#で開発しています。 開発するアプリケーションの利用環境は、Win2003、Win2008、WinVistaなどを想定している開発です。 質問します。 C#でファイル名の整合性を確認する関数はあるでしょうか? ファイル名に使えない文字を取得する、System.IO.GetInvalidFileNameChars()は知っていますが、これだと CON, PRN, AUX, CLOCK$, NUL COM0, COM1, COM2, COM3…… のような文字列を調べることができません。 また、開発環境こそWinXP Proなんですけれども、開発するアプリケーションは クライアント・サーバ方式のアプリケーションで、クライアントからサーバにファイルを作成する形式のものです。 サーバはWin2003かWin2008、クライアントはWinVistaかWinXPです。 そうなってくると、いったんクライアントでファイルを作成して、実際に有効なファイル名かどうかを 確認する手段もOSの差を吸収できるかどうかに疑問が生じます。 このような場合、一体どのようにしてファイル名として有効な文字列かどうか判断したらよいか 教えてください。 お願いいたします。
最近C#をはじめました。ワケあってちょっと急いで基本を学ばなければなりません。 質問させていただきたいのですが、sqrtやsinなどの数学系の関数を使うとき Math.Sqrt(2.0) といちいちMath.をつけるのが(複雑な式をコーディングするときにMathだらけになる) 嫌なのですがこれを書かないでいいようにするにはどうしたらいいのでしょうか。 多分Console.WriteをWriteだけにしたいというのと同じ意味だと思いますが。 よろしくお願いいたします。
922 :
920 :2009/08/20(木) 23:54:54
ごめんなさい、よく考えたら権限の問題とかもあるので、サーバ側でディレクトリ作ってみて、失敗するかどうかで判断したほうがよさそうです。 質問を取り消します。
>>921 Math.Sinを呼び出すだけのローカル関数でも作っとけば
>>919 開発効率が悪いからもっと便利なクラスを使いたいです
便利なクラスを作れ
static import は?と思ってしまった・・・orz
>>923 >>925 それはそういうものなのですか。VC#で開発してるとあまりそういうことは
みんな面倒とは思わないためでしょうか?
いずれにせよ、手軽にできるわけではないんですね。ありがとうございました。
>>927 Math って書くのが普通。とくに面倒じゃないよ。
929 :
デフォルトの名無しさん :2009/08/21(金) 00:36:50
>>927 オブジェクト指向というのはそういうもの。
>>927 Math.Sinをコンパクトに記述することを考えるより、
式そのものを簡単にすることをまず考えるべきだろうね。
数学の数式だって同じだと思うけど、式が複雑だっていうなら
いくつかの部分に分けて部分ごとに一時変数に入れるとかね。
まあ数式の場合と違って、数値計算の場合は演算誤差に対する配慮は
必要になるけど。
using使えば
Func<double, double> sin = Math.Sin; とかできねーの?
>>927 VC#っていうか、フレームワークの関数がいくつあると思ってるん?
全部一発で書けるようトップレベルに置いたらとんでもないことになる。
Mathだけ特別扱いなんて出来ないよ。
>>927 そういうのは学生のうちに卒業しよう。
プロジェクトメンバーが迷惑するから。
>927 うるせーよ
普段使わない関数がIntelliSenseでわらわら出られたらよっぽど面倒だわね
ExpressionTree使え
>>927 その書き方だと「面倒だなぁ……。よくみんな我慢してるよなw」って考えてるみたいだが、
こうやって分類されている方が、長い目で見れば便利なんだ。
このめんどくささはむしろ必要なめんどくささ。いずれわかるよ。
>>932 Math.を省略したくなるような状況でそんなことしたら遅くなるからやめれ
コードを書くときには面倒かもしれないけど コードを読むときには何してるかわかるからいいと思うんだが。 というか実際のところたいした手間じゃないだろう。
F#でかけばMath.とか書かずにすむお
>>913 です。
自己解決したので解決方法を。
parameters = new Object[] { "A1" };
objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, parameters);
Object tmpTable = new object[1];
→tmpTable = (System.Object[])(objRange_Late.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, objRange_Late, null));
// 「→」行部分実行時に Error:型'System.String'オブジェクトを型'System.Object[]'にキャストできません のエラー
parameters = new Object[] { "A1" };
objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, parameters);
String str = string.Empty;
str = (System.String)(objRange_Late.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, objRange_Late, null));
MessageBox.Show(str);
無事A1セルに入力されていたValueを取得することができました。
無駄にキャストしていたことが問題だったのですね。エラーみろよっていってくれた
>>915 さんどうもです。
Double型をString型に変換する方法を教えていただけませんか?
ToString
>>946 ありがとうございます。
>>945 です
doubleを無理やりstring型にキャストしようとしてました^^;
キャストの意味を勉強しなおそう
949 :
デフォルトの名無しさん :2009/08/21(金) 17:51:22
DataGrid へ適当なクラスリストのバインドを考えています。 ただ、表示対象は対象クラスが保持するプロパティの一つに限定したいです。 後々にDataGrid から SelectedItems として、バインドしたクラスのデータを取得を考えます。 ここで、クラスをそのまま ItemsSource へ突っ込むと、クラス名が表示されてしまいます。 こういった場合、特に二行目の部分ではどんな風にすれば対象プロパティのみ表示可能でしょうか。 よろしくおねがいします。
全体に意味が分からんが、まずそれはWPFか?
>>949 >ここで、クラスをそのまま ItemsSource へ突っ込むと、クラス名が表示されてしまいます。
ここで、クラスをそのまま ItemsSource へ突っ込むと、突っ込んだリスト中のクラスが保持するメンバクラスの名前、でした。
class hoge
{
public int m_hoge;
public foo m_foo;
}
class foo
{
で言う foo です。
m_hoge | m_foo
------+------
2 | m_foo
2 | m_foo
3 | m_foo
4 | m_foo
>>950 WPF というか、 Silverlight でやってます。
>>951 では途中で送信してしまったので、続きです。
class foo
{
public int m_x;
public int m_y;
}
ここで、 foo というクラス名ではなく、数字の x を出力したい。
パブリックプロパティ用意すりゃいい
XAML側でどのプロパティを表示するかの指定があったはず−。 それにしてもpublicなフィールドでm_って気持ち悪い命名規則だね。
955 :
デフォルトの名無しさん :2009/08/21(金) 18:27:16
>>954 ありがとうございますっ!
そういうのを探していました。
とても助かりました。
アクセサを使いましょう
XAMLのバインディングってわかりづらいよね もとより人間が書くものじゃないんだろうけど
>>956 アクセサって get とか set ですよね?
XAML と合わせて検索しても、どうにも分らないです。
すみません。
バインディングの記述に利用する識別子でしょうか?
>>957 未だにクラス名やそのメンバ名を直接 XAML ファイルに記述するのが気持ち悪くて仕方ありません。
慣れの問題でしょうか……。
BindingのPathは . 使ってプロパティのプロパティを指すこともできる つかフィールドってバインディングできたっけ? プロパティじゃないとダメな気が > 未だにクラス名やそのメンバ名を直接 XAML ファイルに記述するのが気持ち悪くて仕方ありません。 XAMLに記述するのはViewModelのクラスのだから問題ない
>>942 >>927 の考えは
>>939 やチミが勝手に心配しているような意味じゃないと思うぞw
別にクラスの中にしかメソッドが存在できないのがウザい、
というような意味のことは言ってないだろう。
っていうか、複雑な計算式をベタにコーディングしたら
>>927 のように思うのはむしろ普通のこと。
実際見難くくてかなわんよ。
だから
>>930 のようにアドバイスするのが正しい。
しかし、今に始まったことじゃないけど本当シロートがシロートに講釈垂れる
図式が多すぎるなここ。
>> 未だにクラス名やそのメンバ名を直接 XAML ファイルに記述するのが気持ち悪くて仕方ありません。 >XAMLに記述するのはViewModelのクラスのだから問題ない どうにもバインディングを勘違いしていました。 特に制約無く作ったデータでもバインディングは行えるものとして考えていました。 バインディングは特定のインタフェースを実装したクラスしか不可能なのですね。
>>961 >バインディングは特定のインタフェースを実装したクラスしか不可能なのですね。
違う。
設計の問題で、バインディング自体にそういう制限は無い。
>>960 このレベルの自分で頭使わないで文句言うタイプには「黙って書いとけ」が正しい。
""(空文字列)との比較は以下のどれがいいですか? それぞれのメリット・デメリットを教えてください。 @str.Equals("") AString.Equals(str, "") Bstr == "" Csrt.Length == 0 D"".Equals(str)
個人的には3 他は4以外objectで比較できちゃう 14はstrがnullのときを考慮しないといけない でも大体はString.IsNullOrEmptyで片付けるかな
あくまで個人的な意見だけど。 俺は「str==""」が一番シンプルかつ直感的でいいと思うね。 1. 参照アドレスの比較と差別化するという意味合いはご尤もだが…。ここまでする必要あるかなぁ。 2. 冗長。 4. 使う場面による。文字列自体に着目した流れで来てるのか、 文字列の長さに着目した流れで来てるのか、というのが判断基準。 5. これは逆。どういう意図でこう書くんだろう。
5の書き方はJavaかなんかでこうするのがイイ みたいなのがどっかに載ってた気がする(そして当然叩かれてた) C#だと3かIsNullOrEmptyだよね。
fxcopにIsNullOrEmpty使えっていわれたような
C#の世界でも割と「==使うなEquals()使え」っていう教条主義的意見は 見かけるね。 というか、俺の見解では、そもそも==がデフォで参照等価の検査なのが直感的じゃない。 少なくともこれに関してはVBの方がまともに感じる。 つまり、参照等価の検査用には別の演算子を導入することにして、==の方は 値等価用にオーバーロードしないと使えない方が分かりやすい。 まあそれを言うと、そもそもC由来の=と==からして逆なんじゃないのかとも思うが…
しかし値の同一性ってのはデフォで定義できない
Estr == string.Empty
IsNullOrEmpty 派です。
>>966 >5. これは逆。どういう意図でこう書くんだろう。
これはリテラルのequals()呼び出しだから、コンパイラが最適化してくれる
可能性がある、という説明で自分は納得した。
実際のところ本当かは検証したわけじゃないけど、どう再定義してるかわか
んないstrのequals()を呼び出すよりは速い可能性があるというだけで充分
に意味はあると考えてる。
Javaでの話だけど、str.equals("")だとstrがnullのときにぬるぽの例外になるので、 "".equals(str)がいいんだって言っていた。 でも、まともな意見の人は"".equals(str)に否定的な人が多いという印象。
君の印象ではなく「まともな意見」でどう否定したかが重要。
つか str.Equals("") とほぼ等価でかつ str が null でも大丈夫だから だろ。2 と 3 がほぼ同じ意味であることを除けば他は意味とか前提が 色々微妙に違う
class Tuple<T1,T2>{ T1 _t1,T2 _t2}(アクセッサとか省略)みたいな奴で Tuple<Hoge,HogeHoge> tuple1,tuple2の比較したいときに、class でなくstructなら_t1,_t2が各々==でtrueの時tuple1==tuple2になるんだっけ? classでEqualsとかoverrideするのめんどくさいよ(´д`)ママン… 属性とかの指定一発でやってくれ・・・
>>964 俺も
>>971 と同じ書き方するな。
でも null と空文字列で特別に違う意味がなければ IsNullOrEmpty を使う。
str.Equals(string.Empty)か String.Equals(str,stringEmpty) だな。 javaと違って参照でも'=='が使えるのは知ってるんだけどね。
String以外にも話を展開してみる。 Equalsはタイプセーフではない。 Equalsをoverrideするなら==、!=もoverrideしなければならない。 a.Equals(b)はnullチェックが面倒なので、Object.Equals(a,b)が有効。
タイプセーフでないというのは事実だけど、型を意識しないで比較するのは個人的にはなしだ。 ライブラリ製作者と使用者で意見が食い違うところか。
10.0と10は違うのか?→時と場合と人による "a"と'a'は違うのか?→〃 10と10は違うのか?→〃 しかし”参照”としての比較はドメインが”参照”に固定されているので混乱しない 値の比較はドメインが固定できないので混乱する 値の比較であーだこーだ言っていてもはじまらね
>>980 >タイプセーフではない。(
値型以外では使うことはまずないけど
IEquatable<T>.Equals(T o)
>Equalsをoverrideするなら==、!=もoverrideしなければならない。
Stringのようにimutableでない限りは==や!=演算子のoverrideはするべきではない。
なんで
次ぎたててくる
.NET 4では2.0の部分のパフォーマンスの向上とかあるのかな?
BCL部分はC#4.0などにあわせて確実に手が入るけど WinFormsはどうせ放置だろ
>WinFormsはどうせ放置だろ せっかく枯れてきたのに手を入れられてもねぇ…
2005以降に追加されたコントロールのバグはしっかり直してくれないと 困ると思うけど… toolstrip関連はバグ多過ぎなんだよ本当。
うんこが枯れたところでしょうがないけど。
現実見れよ
早く現実から目を逸らさないと!
現実見たらおなかすいた
今恐竜番組見ながら飯食い終わった俺に死角はなかった。
恐竜惑星とな。 ……見間違えか。
うめ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。