トップページ⇒tech
1001コメント291KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001ななしぃ#2007/11/18(日) 15:53:41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0809デフォルトの名無しさん2007/12/12(水) 23:35:08
結局、呼び出し側の要因であっても何であっても
エラー発生時の対処は必要なんだから全て例外処理が
必要ってことおk?
0810デフォルトの名無しさん2007/12/12(水) 23:35:45
非null引数なら入ってくるときにnullをはじけばいいのだが
nullを受け入れて変数に入れた場合は、その変数を使うたびにnullチェックが要る
変数名にOrNullって書いてあればチェックし忘れはなくなる
0811デフォルトの名無しさん2007/12/12(水) 23:40:29
そもそも引数でnull渡すケースってあるの?
0812デフォルトの名無しさん2007/12/12(水) 23:40:42
>>809
呼び出し側の要因である場合必要な処置というのは
バグを認識させ直させることだ
キャッチしなければそれが最もよく果たせる
例外が投げられた瞬間でデバッガがブレイクし何が間違っていたかが分かる
0813デフォルトの名無しさん2007/12/12(水) 23:41:35
>>812
Trace吐けばいいのでは
0814デフォルトの名無しさん2007/12/12(水) 23:44:59
>>813
マウスポインタおいたら変数の値がぱっとわかり
呼び出し履歴をずずっと辿っていくこともできるようなトレースならな
0815デフォルトの名無しさん2007/12/12(水) 23:47:03
>>786

MatchCollection mc = Regex.Matches(hoge.ToLower(), @"(http/1.[0-1] 200)|(https?://.*\.xml)");
if (mc.Count < 2)
{
 // 異常
}
0816デフォルトの名無しさん2007/12/12(水) 23:47:49
バグ対処には例外処理せず.NETの例外画面で・・・なんて人は趣味グラマーなんだよ
そんな画面出しても済ませられる程度のAPなんだ
0817デフォルトの名無しさん2007/12/12(水) 23:49:06
>>808それが呼ばれる側では判断できないって話じゃないのか?
0818デフォルトの名無しさん2007/12/12(水) 23:49:16
>>816
多分、昨日からずっとそのこと言ってる人いますね
0819デフォルトの名無しさん2007/12/12(水) 23:49:45
お前ら本当に例外が好きだなw
0820デフォルトの名無しさん2007/12/12(水) 23:50:01
判断できるなら分岐処理でいいので例外は不必要でしょう
0821デフォルトの名無しさん2007/12/12(水) 23:50:55
俺は例外で、この話題飽きたお 早く次のネタ投下して欲しいお
0822デフォルトの名無しさん2007/12/12(水) 23:51:48
すみません!リストビューの行の高さは変えられますか?
0823デフォルトの名無しさん2007/12/12(水) 23:52:39
>>817
なんで判断できないんだ?
メソッドの正しい呼び出し方を決めるのは自分だぞ
0824デフォルトの名無しさん2007/12/12(水) 23:52:59
ファイルが見つからない例外が発生したとき、
それがバグなのかそうでないのかなんて判断できない。
0825デフォルトの名無しさん2007/12/13(木) 00:01:08
>>824
呼び出し方自体はあってるなら
FileNotFoundExceptionを投げればいい

パス文字列として正しくないならInvalidPathExceptionかなんかを投げればいい
メソッド作成者が、パス文字列として正しくない文字列を渡すのが違反だと考えるなら
ArgumentExceptionにしてもいい
もちろんパス文字列として正しいかどうかを判断する方法は別途用意しなきゃならないし
それを判断してから呼び出すのは無駄だから普通は
パス文字列として正しくないものも違反とは考えないという設計にするだろうが

呼び出し側はパス文字列として正しくないのが渡されるのがバグである場合はキャッチしなければいいし
ユーザーが入力したのをそのまま渡すとかするならキャッチしなきゃいけない
0826デフォルトの名無しさん2007/12/13(木) 00:02:16
それってふ#[email protected]?
0827デフォルトの名無しさん2007/12/13(木) 00:04:26
ファイルが存在しないときにArgumentExceptionを投げる関数もあるので、
ArgumentExceptionは一概に呼び出し側の要因とは言えない。
エラーチェックしろって話だが。
0828デフォルトの名無しさん2007/12/13(木) 00:06:50
それってぁいるはんどるつくるときにかってにかえってこないか?
0829デフォルトの名無しさん2007/12/13(木) 00:09:07
>>827
どれだよ
正しくない呼び出しと区別できないんだったらそれはただの設計ミスだ
0830デフォルトの名無しさん2007/12/13(木) 00:11:44
FileSystemWatcher.Pathだ、まいったかこの野郎。
まぁファイルの存在確認もしない奴は死んだ方が良いけど。
0831デフォルトの名無しさん2007/12/13(木) 00:14:19
呼び出し側が正しいけどファイルがないときと
呼び出し側が間違っててファイルがないときがあるだろ。
そんなの呼び出される側じゃ分からない。
結局同じ例外なり返さざるを得ない。
0832デフォルトの名無しさん2007/12/13(木) 00:14:44
>>830
そりゃパスを入れるプロパティにパスじゃないものが入ったらArgumentExceptionだろ
そりゃ違反だ
0833デフォルトの名無しさん2007/12/13(木) 00:15:08
>>830
それの後にファイルが消失したら?
0834デフォルトの名無しさん2007/12/13(木) 00:16:22
どっちにしてもtryは全て必要ってことで
0835デフォルトの名無しさん2007/12/13(木) 00:16:54
Tryは有害
0836デフォルトの名無しさん2007/12/13(木) 00:19:28
>>831
そりゃそうだな
メソッドに出来るのは自分が決めたルールに違反を犯したかどうかを通知するだけだ
0837デフォルトの名無しさん2007/12/13(木) 00:21:51
有名どころですら統一見解だせないものをここでぐだぐだ議論してもね。
0838デフォルトの名無しさん2007/12/13(木) 00:23:42
tryはしてもいいが全てをキャッチするのは誤りだ
キャッチしていいものと、しちゃいけないものがある
0839デフォルトの名無しさん2007/12/13(木) 00:24:33
>>832
パスが不正かどうかはファイルが存在するしないに関係しないだろ。
こういうのはDirectoryNotFoundExceptionを返すケース。
0840デフォルトの名無しさん2007/12/13(木) 00:27:27
>>839
>ArgumentException
>
>指定したパスにワイルドカード文字が含まれています。
>または
>指定したパスに無効なパス文字が含まれています。
http://msdn2.microsoft.com/ja-jp/library/system.io.filesystemwatcher.path(VS.80).aspx

と書いてあるがこれは間違いか?
0841デフォルトの名無しさん2007/12/13(木) 00:35:15
おろ?うちのMSDNにはこうあるけど。

>指定されたパスが存在しないか、見つかりませんでした。
>または
>指定したパスにワイルドカード文字が含まれています。
>または
>指定したパスに無効なパス文字が含まれています。
0842デフォルトの名無しさん2007/12/13(木) 00:40:58
>>841
パスが無効とNot Foundとnullとは
分けた方がいいと思うんだがなあ
まあそんなに困るケースは思いつかないが
0843デフォルトの名無しさん2007/12/13(木) 00:44:59
catchしないで実行時エラー出るようなプログラムは駄目だろ
0844デフォルトの名無しさん2007/12/13(木) 00:47:11
>>843
完成版には一番上にcatch(Exception)入れなきゃいかんだろうが
開発中はいれちゃいかんという話だ
想定外の例外が来たら安全に実行が続けられるかなんて分からんのだから
終了するしかない
0845デフォルトの名無しさん2007/12/13(木) 00:49:11
障害系の単体テスト結果はどうするの?
0846デフォルトの名無しさん2007/12/13(木) 00:54:20
例外祭り終了
0847デフォルトの名無しさん2007/12/13(木) 00:54:21
>>845
どういう意味か分からんが
単体テストなら正しい例外が返ってくるかcatchして調べる
想定外の例外が返ってきたらバグだからそれはcatchしない
0848デフォルトの名無しさん2007/12/13(木) 01:12:42
もう余所でやってくれ
質問者がスルーされまくってるだろ
どれが質問者から分からないくらいに
0849デフォルトの名無しさん2007/12/13(木) 04:31:09
例外をcatchするとデバッグしにくいという問題は簡単に回避できる。
その答えは・・・続きはこちらで、みんな移動頼む。
C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/507-
0850デフォルトの名無しさん2007/12/13(木) 09:28:16
エスケープシーケンス文字ってどうして%とか\とか{}つかうの?
もっと存在しない記号にすれば良いのに
0851デフォルトの名無しさん2007/12/13(木) 09:31:00
いちばいと
0852デフォルトの名無しさん2007/12/13(木) 10:07:30
存在しない記号って例えば?
0853デフォルトの名無しさん2007/12/13(木) 11:34:54
₩とか
0854デフォルトの名無しさん2007/12/13(木) 11:43:25
そういや、韓国語版DOSのプロンプトは、C:₩ だったなw
0855デフォルトの名無しさん2007/12/13(木) 11:47:50
イギリス人って
£include <stdio.h>
とか書いてたの?
0856デフォルトの名無しさん2007/12/13(木) 12:12:45
�dとか�j
みたいに
0857デフォルトの名無しさん2007/12/13(木) 12:14:58
w←みたいでうける
0858デフォルトの名無しさん2007/12/13(木) 12:17:11
エスケープ文字よりもC++は記号の使いまわしすぎだろ
0859デフォルトの名無しさん2007/12/13(木) 12:23:22
101キーボードで打てないといけないからね。
0860デフォルトの名無しさん2007/12/13(木) 12:34:00
トライグラフ もあるけどなーw
0861デフォルトの名無しさん2007/12/13(木) 13:00:22
みなさん、C#を使って作るのは
やっぱりWinアプリですか?
0862デフォルトの名無しさん2007/12/13(木) 13:15:12
Mono
0863デフォルトの名無しさん2007/12/13(木) 14:23:18
webbrowserでサイトを表示するとテンポラリフォルダに勝手にファイルが溜まっていくんですが、
プログラム終了時にフォルダ内全削除してから終了させるのってどうやるんでしょうか?
0864デフォルトの名無しさん2007/12/13(木) 14:52:15
おいお例外が終わったら過疎ったじゃないか
0865デフォルトの名無しさん2007/12/13(木) 14:54:37
デリゲートとカスタム属性に泣きそうになってるC++プログラマです・・・。
誰か慰めてください><
0866デフォルトの名無しさん2007/12/13(木) 14:56:43
>>865
犬にでも噛まれたと思ってあきらめなさい。
0867デフォルトの名無しさん2007/12/13(木) 14:57:10
throw >>865;
0868デフォルトの名無しさん2007/12/13(木) 15:02:40
catch(>>865){}
0869デフォルトの名無しさん2007/12/13(木) 15:27:03
>>868
catch(>>865){}
         ↑
完全スルーカワイソス
0870デフォルトの名無しさん2007/12/13(木) 16:19:32
>>830
ファイルの存在確認からOpenまでの間にファイルが消えることがあるだろ
並列処理してたらそういうことはよくある
確認用メソッドと取得用メソッドは分けてはいけない
0871デフォルトの名無しさん2007/12/13(木) 22:02:26
>確認用メソッドと取得用メソッドは分けてはいけない
そういう問題かよ
0872デフォルトの名無しさん2007/12/13(木) 22:17:46
ActiveDirectoryに存在している全てのプライマリグループを取得するには
どうすればいいかな?
0873デフォルトの名無しさん2007/12/13(木) 23:57:43
ListViewの仮想モードがよく分からないのですが、表示件数が変わるときは
常にVirtualListSizeを操作するのでしょうか?
また、一般的な使用方法とかはList<ListViewItem>みたいなリストを保持して、
RetrieveVirtualItemで処理するのでしょうか?
0874デフォルトの名無しさん2007/12/14(金) 01:49:46
今C#の勉強がてら別アプリケーションのキャプションを取得したりする物を作っています
現在の処理の流れとしては
Process.GetProcessesByNameでプロセス取得
↓
取得したプロセス.Threadsをforeachでまわして
Win32APIのEnumThreadWindowsを使ってウィンドハンドル取得
↓
EnumThreadWindowsの中でEnumChildWindowsを使って全部の子ウィンドを取得
↓
GetWindowTextを使用してキャプション取得

こんな感じで処理してます。ここで質問なのですが
1.他のアプリケーションウィンドウのキャプション取得するのって
Win32APIを使う以外に処理する方法ってありますか?

2.特定のウィンドウのキャプションが変更された時に
何らかのメソッドを実行したいのですができますか?
0875デフォルトの名無しさん2007/12/14(金) 01:54:36
メインウィンドウならProcess.MainWindowTitle
それ以外はなし
あとGetWindowText使うな

タイマでポーリングしてりゃ良いんじゃね
0876デフォルトの名無しさん2007/12/14(金) 01:55:46
>>874

>1.他のアプリケーションウィンドウのキャプション取得するのって〜〜
確かできなかったはず。IntPtr を取る Control のコンストラクタもあるっぽいが、
昔試したときに他のアプリケーションのウィンドウやコントロールに関して有益な情報が得られなかったと記憶してる。

>2.特定のウィンドウのキャプションが変更された時に〜〜
Win32 API を使う方法になるけど、メッセージフックがある。
SetWindowsHookEx などの関数で調べてみるといいかも。
08778742007/12/14(金) 02:34:30
>>875-876
レスありが�d

>>875
GetWindowTextって使わない方が良いのですか?

>>876
SetWindowsHookEx試してみたいと思います
0878デフォルトの名無しさん2007/12/14(金) 02:44:27
誰かスルーしないで親切丁寧に分かりやすくテンポフォルダのキャッシュの消し方教えておー
0879デフォルトの名無しさん2007/12/14(金) 02:47:56
フォルダを開く→Ctrl+a→Delete→OK
0880デフォルトの名無しさん2007/12/14(金) 02:50:38
>>878
Environment
0881デフォルトの名無しさん2007/12/14(金) 04:15:34
StringBuilderにClearがないのはなぜだろう
0882デフォルトの名無しさん2007/12/14(金) 06:30:47
>>881
Length = 0 で代用できるのと、十分に軽量にしているから
使いまわしせずに必要になったら作り直せというお達しだと思う。
08837082007/12/14(金) 10:28:42
どなたか・・・
0884デフォルトの名無しさん2007/12/14(金) 10:46:29
>>883
ToolStripDropDownMenuのチェックとかアイコンの枠を描画するときじゃね
Refectorで追いかけてみればどうよ
0885デフォルトの名無しさん2007/12/14(金) 12:58:42
>>879>>880
やり方知らねーなら素直に分かりませんって書けやカス
ほんと役立たずのゴミしかいねーなここ
こんな低脳の溜まり場なんかで聞いた俺が馬鹿だったわw
0886デフォルトの名無しさん2007/12/14(金) 13:01:34
>>885
そういうときに使える有名なレスを授けよう。

「知らないんだったらレスしないで下さい!!」
0887デフォルトの名無しさん2007/12/14(金) 13:09:55
VC++とVC#をアンインストールしようと手動でやったんだけど、それがまずかった
アンインストール用のソフトがあるんだね。これ使ってればよかったのに
手順が間違っていたのか、アンインストールもインストールもできなくなった

どうすればいいんでしょうか?
0888デフォルトの名無しさん2007/12/14(金) 13:10:35
TextBoxでListBoxのように行を追加・挿入・削除することはできないのでしょうか?
0889デフォルトの名無しさん2007/12/14(金) 13:18:46
>>887
http://support.microsoft.com/kb/290301/ja
>>888
できません。
自前で各行の差し替えを実装して頑張ってください。
0890デフォルトの名無しさん2007/12/14(金) 14:01:45
糞じゃん
0891デフォルトの名無しさん2007/12/14(金) 14:27:01
>>889
即レス感謝します
なんとかインストールはできるようになりました
あとは、もう一度アンインストールしてうまくいくかどうか・・
0892デフォルトの名無しさん2007/12/14(金) 15:51:36
他のアプリのリストビューのデータを取得したりすることは可能でしょうか?
APIとかいうのを使うしか無理?
0893デフォルトの名無しさん2007/12/14(金) 18:29:52
両方yes
0894デフォルトの名無しさん2007/12/14(金) 18:39:47
>>893
他アプリ(非.NET)のデータを取得するのはc#でもできるということですか?
0895デフォルトの名無しさん2007/12/14(金) 18:41:18
APIつかWin32APIは大抵の言語で扱える もちろんC#でも
0896デフォルトの名無しさん2007/12/14(金) 19:31:21
ということはやっぱり、.NETの言語だけでは無理ということですね
API使うとメモリリークとかを意識しないとだめなんですよね
0897デフォルトの名無しさん2007/12/14(金) 20:21:44
たとえばVSのデバッガでList<Dicrionary<string,string>> の中身を

[ { col1 => "val", col2 => "val" }, { col1 => "val", col2 => "val" } ]

上記のような表示形式で見たいのですが方法はありますか?
0898デフォルトの名無しさん2007/12/14(金) 20:25:08
>>897
autoexp.cs弄ればできるかも
0899デフォルトの名無しさん2007/12/14(金) 21:30:49
何を格納するコレクションなんだそれは……
09008972007/12/14(金) 21:40:28
すみませんDicrionaryではなくDictionaryです。
List<Dictionary<string,string>>

>>898
おお。まだちゃんと調べてないけどこれでちょっといけそうな気がします。
ありがとうございます。

Javaだと構造が一発でみれて楽なんだけどなぁ・・・
0901デフォルトの名無しさん2007/12/14(金) 21:43:03
自分でデバッガビジュアライザ作れば
0902デフォルトの名無しさん2007/12/14(金) 21:48:49
Javaだと構造が一発でみれて楽なんだけどなぁ・・・
0903デフォルトの名無しさん2007/12/14(金) 21:55:34
Javaとか.NETとかそういう問題なのか
0904デフォルトの名無しさん2007/12/14(金) 21:57:08
デバッガの仕様の問題だろ
VSは基本的にはToStringを表示するだけだし
0905デフォルトの名無しさん2007/12/14(金) 22:23:02
ビジュアライザだったら簡単に作れるお
0906デフォルトの名無しさん2007/12/15(土) 00:25:49
http://msdn2.microsoft.com/ja-jp/library/7ay27kt9(VS.80).aspx

を読んだのですが、シリアル化の意味がよくわかりません。
シリアル化とはどういう意味なんでしょうか?
0907デフォルトの名無しさん2007/12/15(土) 00:33:05
>>906
オブジェクトをファイルとかに保存できるようにデータ列に変換すること。
ファイルに保存=永続化って考えちゃえば良い。
0908デフォルトの名無しさん2007/12/15(土) 00:33:21
ここに魔法の小箱があります。名前は「シリアライザ」。
Serializableなインスタンスをここに入れると、 バイナリデータになったりXMLデータになったりします。
ネットで転送したり、ファイルに書き込めますね。
こんどはそのバイナリデータやXMLデータをいれて、横にある「デシリアライズ」というボタンを押すと、
あら不思議、もとのインスタンスがフィールドデータとかそのままで復元します。
0909デフォルトの名無しさん2007/12/15(土) 00:34:45
ファイルなりデータベースなりにオブジェクトの状態を保存して、
アプリが終了した後も永続的に状態が残るようにすること。

要するに、アプリ設定のセーブ/ロードとかに使う。
レス数が900を超えています。1000を超えると表示できなくなるよ。