1 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:41:44 ] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 前スレ ふらっとC#,C♯,C#(初心者用) Part44 pc12.2ch.net/test/read.cgi/tech/1251439041/
930 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 20:39:45 ] どんな初心者本でも配列くらい載ってると思うけど…
931 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 20:45:55 ] プログラムにバグがあるとき以外 発生しない状態になったときは InvalidOperationException 投げておけばいい? それとも、ApplicationException?
932 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 20:54:17 ] >>931 その状態ってのが具体的にどういう場合なのか 引数がおかしければInvalidArgumentだし メンバが変な値になってればInvalidOperationだし なんかアプリ固有の例外を投げるべきかも知れないし どんな例外もピンと来ない場合はなんとなくInvalidOperation投げることもあるけど ApplicationExceptionは元々アプリ固有の例外を定義するための基底クラスとして用意されてた ただし全部Exceptionから派生するようにガイドラインが変更されたので死にクラス
933 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:02:54 ] 「使い方が間違ってる。コードを修正しろ。」という意味で例外を投げる場合は InvalidArgumentExceptionやInvalidOperationExceptionのようないい加減な例外を投げておくべき。 わざわざ固有の型を作るとキャッチしてくれという意味に取られかねない。
934 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:08:02 ] >>922 KeyPress() イベントで e.KeyChar と e.Handled を使ってふんだらら。 ごめん。詳しくは覚えてない。
935 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:08:34 ] zassekiにほれたのでやってみた。 呼び出し側のForm public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.ZassekiEvent += Sekigae; frm.Show(); } private void Sekigae(object sender, EventArgs e) { var txtBox = sender as TextBox; if (txtBox != null) { this.Controls.OfType<TextBox>() .Where(t => t.Name == txtBox.Name) .Single().Text = txtBox.Text; } } }
936 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:09:55 ] 席の情報をもつForm 駄作だがうけとってくれw public partial class Form2 : Form { public delegate void ZassekiEventHandler(object sender, EventArgs e); public event ZassekiEventHandler ZassekiEvent; public Form2() { InitializeComponent(); foreach (var txt in this.Controls.OfType<TextBox>()) { txt.TextChanged += new EventHandler(zasseki_TextChanged); } } void zasseki_TextChanged(object sender, EventArgs e) { ZassekiEvent(sender, e); } }
937 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:12:07 ] Form1とForm2のTextBoxは同じ名前という前提で頼む。 Form1.TextBox1とForm2.TextBox1がつがいになる。 保存を考えたら外部のリソースにたいしてバインドするほうがいいだろうな。
938 名前:デフォルトの名無しさん [2009/10/15(木) 22:16:34 ] リソースとバインドの意味がわかりません
939 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:19:36 ] >>846 みたいな設計にするってことだろ いわゆるデータバインディングなどを使うかどうかは別にして
940 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:19:48 ] 辞書ひけカス
941 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:24:49 ] C#初心者って言ってんのにデリゲート唱えるコードとかwwwドSw
942 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:31:27 ] LINQ避けてわざわざforeachで回されると長くなってうざい どうせイベントとか使ってる時点で理解できないだろうから短く貼ってくれた方がいい
943 名前:デフォルトの名無しさん [2009/10/15(木) 22:34:54 ] この程度で長いって……
944 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:37:24 ] ここでLINQを使うならいったいどのように書くんだ? そっちの方が横に長くなると思うけど
945 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:44:45 ] 奥に長くしてくれ
946 名前:942 mailto:sage [2009/10/15(木) 22:45:52 ] いや>>941 が.Where(t => t.Name == txtBox.Name)に文句付けてるのかと勘違いした たぶんイベント使ってるのが難しいと言いたいんだろうな
947 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:56:42 ] 初心者がやるならテキストファイルから入出力でしょうね。 配列、入出力あたりは早めに覚えておきたい。
948 名前:942 mailto:sage [2009/10/15(木) 23:01:34 ] フォーム間のやり取りにわざわざテキストファイルを介するの? そこまでして無理に今やることはないと思うぞ さっさとオブジェクト指向の勉強とか済ませてしまった方が早い
949 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:52:32 ] それよりいまの問題は配列をしらない事だろうw
950 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:53:55 ] これを題材に、一歩ずつ学べるようにリファクタリング&機能追加するような教材を作ったら・・・ 別に売れないかなw
951 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:56:38 ] >>942 保存はどうするの?
952 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:56:46 ] あれか、一回70個コピペさせて 面倒でしょ?そんな時に配列!ってか
953 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:58:58 ] 配列!そういうのもあるのか!
954 名前:942 mailto:sage [2009/10/16(金) 00:00:24 ] Excelでいいじゃん
955 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:01:56 ] ×そういうのもある ○最低限の知識
956 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:07:03 ] これは面倒すぎるありえないっていう感覚は大事だと思う
957 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:12:35 ] ttp://uchukamen.com/Programming1/ToRecycleBin/index.htm を参考にして、ファイルをゴミ箱に入れようとしています。 ダイアログを出さないようにフラグを sh.fFlags = Shell.FOFlags.FOF_NOCONFIRMATION ; に変えたら、ゴミ箱に入らずに消えてしまいました。 ダイアログを出さないようにゴミ箱に入れるには、FOF_ALLOWUNDOも同時に指定する必要があると思うんですが、 +でつなげても0x0050にしてもエラーが出てしまいます。 同時指定のやり方を教えてもらえませんか。
958 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:17:32 ] >>955 孤独のグルメ
959 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:24:02 ] で、その配列とやらをどう活かすですか
960 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:36:42 ] >>957 組み合わせ可能な列挙体を組み合わせるのはビットごとの論理和演算子である | を使う
961 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:52:36 ] >>960 あっさりと想定通りの動きをしました。 ありがとうございました。
962 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:02:35 ] >>935-936 設計と命名以外でダメ出してみる (×:MUST be fixed、△:SHOULD be fixed) ×Form2.ZassekiEventイベントのソースがForm2のインスタンスじゃない → ソースはそのイベントを定義している型かその派生にする ×Form2でZassekiEventがnullのときにNullReferenceException → nullチェックを入れるかnullにならないようにする △ZassekiEventHandlerのシグネチャがEventHandlerと同じ → 単に無駄というだけでなく、EventHandlerには「イベントデータが無い」という意味がある △Form1.Sekigaeメソッド内のWhere(...).Single()は無駄 → Single、Firstなどには条件を指定できるオーバーロードがある
963 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:05:54 ] ウザ
964 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:29:35 ] 次スレの予感・・・
965 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:05:32 ] >>924 おれはプログラミングはじめて1ヶ月でAPIを駆使して winnyのリストボックスの内容を取得して ハッシュを収集したり無視したり自動でキャッシュ削除するソフトを作ったよ 向いている向いてないがあるんだろうな
966 名前:965 mailto:sage [2009/10/16(金) 02:11:57 ] プロパティ、フィールド、クラス、値型とか意味知ってるか? おれはまず文法を一通り読んだ それでわからなかったら、初心者サイトで調べ、それでもわからなければ 別の初心者サイトを見る。 わからないことをわからないままで横着して進めようと焦る気持ちはわかるが 他と違って、プログラミングはコツコツ覚えていくしかない 体で覚えていこうなんてするなよ
967 名前:デフォルトの名無しさん [2009/10/16(金) 03:02:00 ] >>965 みんなお前みたいに暇じゃないんだよw 一ヶ月根詰めればそれぐらい出来るわ
968 名前:965 mailto:sage [2009/10/16(金) 03:16:12 ] おっさんのおまえらには無理だろうなww
969 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 07:09:02 ] 細かく調べる前に勘で書いて体で覚えたけど 最初に作りたい物が決まってるならこの方が早い そのあと詰まった所で随時調べる
970 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 07:35:24 ] >>962 指摘thx >>→ ソースはそのイベントを定義している型かその派生にする プロパティでget/setできればOK? >>→ nullチェックを入れるかnullにならないようにする このケースでnullになるかな?けれどもnullチェックはしたほうがいいね。 >>単に無駄というだけでなく、EventHandlerには「イベントデータが無い」という意味がある よくわからん。 >> Single、Firstなどには条件を指定できるオーバーロードがある Whereいらなかったね。ひとつ賢くなった。
971 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 08:39:02 ] また夜中なのに異常に伸びたなと思ったら予想通り
972 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:28:50 ] ポインタを使ったアルゴリズム、チェインとか木とかあるけど 同じような動作をするものでunsafeしないでC#で行うことはできますか? 厳密なメモリアドレスへの操作というわけじゃなくて あるカプセルの参照と値を持つカプセルを関連付けていければいいだけなんだけど
973 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:35:20 ] 何言ってるかわかんね LinkedListでも何でも好きなの使えよ
974 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:36:27 ] >あるカプセルの参照と値を持つカプセルを関連付け Dictionary<TKey,TValue>で両方に参照同じ渡せば。
975 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:42:57 ] フォルダを作ってそこにクラスファイルを入れると そのクラスを利用する場合 フォルダ名.クラス名 としなければなりませんよね? でも、パっと見でフォルダ名なのかクラス名なのかがわかりにくいと思いませんか? わざわざフォルダ名を書かなければいけないのっておかしい気がするのですが
976 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:44:19 ] namespace変更すればいいだろ… VSに文句言う前に言語仕様から理解しような
977 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:47:07 ] MyClass.System.TxtReader があり、TxtReaderをSystemフォルダにいれた場合 System.TxtReader と書くと、Systemはフォルダ名なのかクラス名なのかわかりにくくないですか?
978 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:48:21 ] >>976 じゃあ、フォルダの数だけnamespaceを作れと? namespaceを大量生産するってそれこそありえないと思うんだけど
979 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:48:32 ] 名前空間でググレカス
980 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:49:57 ] TxtReader.csのnamespaceをMyClassにすりゃいいでしょう。 馬鹿としか言えない。
981 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:50:23 ] >>978 誰もユニークにしろとは言ってないぞw
982 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:51:30 ] ググレといのはこのスレの本分ではないと思うのですが?
983 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:52:48 ] new System.IO.DirectoryInfo(@"c:\"); これの"IO"はフォルダ名なのかクラス名なのか分かりにくいだろうか。
984 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:55:03 ] フォルダ名と呼ぶのをやめて欲しい そんな用語はない VSがフォルダと同じ名前の名前空間を自動生成しているだけ
985 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:55:15 ] >>978 お前が何を悩んでいてどうしたいのかさっぱり分からない。 C#はjavaと違って好きに名前空間を指定出来るぞ。 俺はフォルダ名と一緒が一番いいと思うが。
986 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:56:10 ] 次ぎたててくる
987 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:57:08 ] >>984 そういうことかわかった^^
988 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:59:02 ] pc12.2ch.net/test/read.cgi/tech/1255658236/
989 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:13:07 ] >>975 そんな規則はない。 コーディング規約的にnamespaceとディレクトリ配置が一致していることが望ましいだけ。 間違った思い込みをする前に、MSDNで一次情報に当たる習慣をつけよう。
990 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 12:58:02 ] .NETの命名ガイドラインに従うと,確かにA.B.C.Dだけ見て 名前空間とクラスとプロパティを見分けることはできないんだけど 実際それで困ることある? だいたい分かるじゃん java.lang.System.outとかキモい
991 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 15:07:04 ] おそらく、開発環境ソフトが見分けをサポートすべきという思想なんだろうな カーソルでポイントすればヒントが表示されるみたいな
992 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 15:11:42 ] つーか、大文字小文字を打ち間違えたときも、 大文字と小文字を入れ替えたら名前が見つかってエラーがでなくときは、自動で修正してほしいもんだ
993 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 15:39:45 ] 俺も昔、スペルチェック機能みたいなのが欲しいと思ってた。MS-Wordでできるんだから Visual Studioでもできるだろう、と。 でも今はインテリセンスあるからいらない。みんな最初から候補に出てくる。
994 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 15:44:02 ] >>992 VBは実際にそれやってくれる C#は大文字と小文字を区別するのでわざとその機能は付けてないんだと思う 仮に現在大文字と小文字だけが違う複数の名前が無かったとしても, そういう機能があるとつい無頓着になってミスが発生しやすいからね
995 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:03:59 ] 大文字小文字が違うだけの変数名を作ることはまずなのにに なぜ区別するようにしたんだろうな publicの場合は先頭だけ大文字、privateは小文字って決め付ければいいのに
996 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:05:58 ] メインターゲットがC++やJavaからの移行者だから当たり前 それとVBとの差別化
997 名前:デフォルトの名無しさん [2009/10/16(金) 16:39:12 ] List<>の勉強中です。 List<string> photolists = new List<string>(); string[] photofiles = Directory.GetFiles(@"c:\data", "*.jpg", SearchOption.AllDirectories); foreach(string photofile in photofiles) { if (photofile.Contains("good")){ photolists.Add(photofile); } } すこし書いてみました。動作のテストもしました。 List<>とstring[]とふたつ使っているところが、まだいまいちな気がします。 もっとスマートになりますよね? foreachを使わず直接配列を追加することは可能ですか?
998 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:50:35 ] フィルタリングが入る時点で「直接配列を追加」は不可能だろ 次のステップはContains("good")をメソッドに取り出した上でArray.FindAll、辺りかな この場合はList<T>の出番が無くなるけど
999 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:52:02 ] LINQを使うしかない var goodphotos = photofiles.Select(photofile => photofile.Contains("good")); photolists.AddRange(goodphotos);
1000 名前:999 mailto:sage [2009/10/16(金) 16:52:43 ] ごめんSelectじゃなくてWhereだった
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。