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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/08/08(日) 12:08:26
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part61
http://hibari.2ch.net/test/read.cgi/tech/1277597122/

■関連スレ
C#, C♯, C#相談室 Part61
http://hibari.2ch.net/test/read.cgi/tech/1280008155/
VB.NET質問スレ(Part34)
http://pc12.2ch.net/test/read.cgi/tech/1270998481/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/

■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。

直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0153デフォルトの名無しさん2010/08/30(月) 00:41:41
そういうのはテクニックではなく「悪弊」と言うんだ普通は
0154デフォルトの名無しさん2010/08/30(月) 00:41:55
良く見ると、入力がアンダーバーの場合の処理が抜けてるね
0155デフォルトの名無しさん2010/08/30(月) 00:44:08
アンダースコア
0156デフォルトの名無しさん2010/08/30(月) 00:44:54
>>152
必要な範囲が広がったとき、入力超えちゃったとき面倒だったっしょ?分かってるはず。
0157デフォルトの名無しさん2010/08/30(月) 00:45:53
>>156
全く面倒ではないよ
0158デフォルトの名無しさん2010/08/30(月) 00:48:45
お代官様、俺は大体その組合せで何をしたいのか解ったぜ?
確かにミ社のコンポーネント使いづらいよな。自作したい気持ちは解る。
Rのときは10進でZRのときはアドレス16進って所に注意な。
0159デフォルトの名無しさん2010/08/30(月) 00:56:35
NCプログラムあたり?
01601012010/08/30(月) 01:20:59
>一文字いれたら数字が
って言っちゃった俺がそもそも悪い。ゴメン。2文字があった。

158あ、やっぱり解ります? w ハシゴ屋のお仕事暇なんで興味本位で・・・
使ったこと無いんだけれど代官山ってオムロン以外でも使えたっけ?

今 来られた方々へ
つまらぬコトで60スレも消費してしまいました。
0161デフォルトの名無しさん2010/08/30(月) 02:44:10
sine
0162デフォルトの名無しさん2010/08/30(月) 07:36:15
輝け! Shining
0163デフォルトの名無しさん2010/08/30(月) 18:11:12
int? →int に変換したいんだが、どうすればいい?
0164デフォルトの名無しさん2010/08/30(月) 18:18:06
Nullable<T>の…プロパティをよく見ろ
0165デフォルトの名無しさん2010/08/30(月) 18:22:05
>>164
HasValueがtrue時に、value参照かね?
0166デフォルトの名無しさん2010/08/30(月) 18:37:39
??false
0167デフォルトの名無しさん2010/08/30(月) 20:04:34
Nullable<T>って、implicitでTに変換できたら何か問題あるのかね。
普通はそういう仕様にすると思うんだが、このあたりのMS様のセンスはよくわからない。
0168デフォルトの名無しさん2010/08/30(月) 20:48:48
>>167
問題あるだろ。
implicit にヌルポ発生させるのもどうかと。

あと、C# の型変換に関する方針は、
「範囲の広い型から狭い型への変換は明示」。
T? の方が T より広い(T + null)んで、それとの一貫性もあると思う。
0169デフォルトの名無しさん2010/08/30(月) 21:08:18
>>168
どうしてHasValueはOKで暗黙変換はNGなの?
よく分からん発想だ。

こんなものの価値は、明らかに(そうしたい時には)Tと等価(透過じゃない)に
扱えることのあるのに。
0170デフォルトの名無しさん2010/08/30(月) 21:09:31
ごめん上はHasValueじゃなくてValueね
0171デフォルトの名無しさん2010/08/30(月) 21:12:34
解説

不要なキャストを省けるため、暗黙の型変換を行う場合はソース コードが読みやすくなります。
ただし、暗黙の型変換では、一方の型からもう一方の型へ明示的にキャストする必要がないため、
予期しない結果が発生しないように注意する必要があります。
暗黙の演算子は、通常、プログラマが変換を認識していなくても安全に使用できるように、
変換中に例外をスローしたり情報を失ったりしないことが必要です。
このような条件を満たせない変換演算子には、explicit キーワードを使用する必要があります。
詳細については、「変換演算子の使用 (C# プログラミング ガイド)」を参照してください。
0172デフォルトの名無しさん2010/08/30(月) 21:17:40
TryParseなんか無くていいじゃんって議論に似てる
んなわけないだろ
0173デフォルトの名無しさん2010/08/30(月) 21:22:57
>>171
そのあたりの話は分かるんだけどね。
原理原則はそれでいいとして、Nullable<T>の場合も本当にその原則を
適用すべきかどうかというと、俺はそうは思わない。

繰り返しになるけど、こんなものTと同じに扱いたいときに同じに扱えなきゃ、
有用性半減だろ。

>>172
全然違う。
Nullable<T>の意味の特殊性をよく考えてくれ。
っていうか、Nullable<T>使ったことあって言ってるのかそれ。
0174デフォルトの名無しさん2010/08/30(月) 21:25:18
同じように扱いたくない場合の方が大半なので結構です
0175デフォルトの名無しさん2010/08/30(月) 21:26:21
勝手に思ってりゃあいいじゃん
そうでなければMSに陳情してこい
ここはお前のグチ発表会場じゃないんで
01761712010/08/30(月) 21:28:24
俺は思わないって…。
お前がどう思おうが大概の人はどうでもいいよ。
0177デフォルトの名無しさん2010/08/30(月) 21:30:46
>>176
みっともないな。
今日はこのぐらいにしといたるわ、にしか読めない。
しかし、馬鹿はまだ救いもあるけどガキ臭い奴は嫌だね。
0178デフォルトの名無しさん2010/08/30(月) 21:33:08
それってお前はまだ救いがあるって言ってるのか?
0179デフォルトの名無しさん2010/08/30(月) 21:35:47
根拠は俺がそう思うからだってのの方が数段ガキ臭いような…
0180デフォルトの名無しさん2010/08/30(月) 21:36:49
現実世界の対面のコミュニケーションだと「モジモジ君」なコミュニケーション弱者に限って、
掲示板では面識もない相手をいきなり「お前」呼ばわり。

そういう自分に何も戦慄を感じないなら、立派な廃人だと思うがな。
0181デフォルトの名無しさん2010/08/30(月) 21:37:21
ここはお互いに

暗黙のキャストを許可することによってどういうメリットがあるのか
暗黙のキャストを許可しないことによってどういうメリットがあるのか

を書くべきじゃね
はいどうぞ書きたまえ
0182デフォルトの名無しさん2010/08/30(月) 21:39:05
なにやら現実世界がどうとか語り始めましましたよ。
0183デフォルトの名無しさん2010/08/30(月) 21:39:29
>>181
だから、書いてるでしょ?
0184デフォルトの名無しさん2010/08/30(月) 21:41:46
>>169
Value は OK じゃねぇよ。
T? x からの変換は T y = x ?? defaultValue; でやる。

>>173
T? と T 一緒に扱えたらダメだろ。
null 勝手に握りつぶされるとか、絶対酷い人的ミス起こすぞ。

>>181
人的ミスの一言に尽きるだろ。
だから、型変換しても情報落ちしない場合にのみ暗黙キャストを認めてる。
0185デフォルトの名無しさん2010/08/30(月) 21:41:58
いや〜妄想しか見えんわ。
0186デフォルトの名無しさん2010/08/30(月) 21:45:02
さすがにint a = new Nullable<int>int(0);が許容されるとか寒気がする
0187デフォルトの名無しさん2010/08/30(月) 21:45:41
スレがのびてると思ったら馬鹿が来てたのか

キャスト不要にしろというなら最初から ?使うなよ…
0188デフォルトの名無しさん2010/08/30(月) 21:46:05
>>184
だから、Valueを使おうがHasValueのチェックを忘れたら、結局同じこと。
だから「フールプルーフのために暗黙変換禁止」というのは理由にならない。
0189デフォルトの名無しさん2010/08/30(月) 21:47:16
>>188
だからといって暗黙のキャストをデフォルト動作にすべきとはならないだろww
0190デフォルトの名無しさん2010/08/30(月) 21:48:01
キャスト時にHasValueのチェックなんかやらないだろ
何のための??なん
0191デフォルトの名無しさん2010/08/30(月) 21:50:13
>>188
同じじゃねーよ
0192デフォルトの名無しさん2010/08/30(月) 21:50:58
そういう発想って「推定有罪」みたいだね。

普通は(その方が便利なものを)禁止する場合に理由が必要だと考えるのじゃないの?
なんで「手を縛るな」というのり理由が必要なの?
よくわからん発想だ。
0193デフォルトの名無しさん2010/08/30(月) 21:51:41
”チェックを忘れたら同じだ”なんていろいろ適応できそうだぞ

利用に際してチェックが必要な奴は全て否定できるな
0194デフォルトの名無しさん2010/08/30(月) 21:51:55
>>188
いや、だから、HasValueとかValueなんてC#で直接使わないんだってば。
普通 ?? 使う。
HasValueとかは他の.NET言語との相互運用のためにあるとでも思っといてOK。
0195デフォルトの名無しさん2010/08/30(月) 21:52:54
馬鹿のアプリから
InvalidOperationException
が発生する!
0196デフォルトの名無しさん2010/08/30(月) 21:53:31
まぁなんでも許容してたらCやC++みたいになった訳で
Javaなんかも基本は推定有罪で動いてるじゃないか
0197デフォルトの名無しさん2010/08/30(月) 21:55:12
>>184
そんな変換が許されるなら最初からNullableなんて使わないだろw
0198デフォルトの名無しさん2010/08/30(月) 21:55:51
>>181
デメリット

InvalidOperationException
InvalidOperationException
InvalidOperationException
InvalidOperationException
InvalidOperationException
InvalidOperationException
0199デフォルトの名無しさん2010/08/30(月) 21:56:15
お馬鹿さんに合わせる風潮だからフールプルーフが基本になってるのよ
スーパープログラマーの人には悪いが底辺に合わせてくれ
人が集まらない
0200デフォルトの名無しさん2010/08/30(月) 21:56:52
>>194
それはさすがに極論。
純粋に値が設定されてない状態の表現に使う場合の方がむしろ多いと思うが
0201デフォルトの名無しさん2010/08/30(月) 21:58:01
InvalidOperationException
0202デフォルトの名無しさん2010/08/30(月) 21:58:43
>InvalidOperationException

これは分かったから
しつこい
0203デフォルトの名無しさん2010/08/30(月) 22:00:41
>>200
== null でよくね?C# において HasValue の存在意義ある?
0204デフォルトの名無しさん2010/08/30(月) 22:02:07
>>203
HasValueの方が読みやすい人もいる
0205デフォルトの名無しさん2010/08/30(月) 22:02:37
暗黙のキャスト箇所でnull例外が出て
例外なんて出さないで暗黙で0代入しとけやって馬鹿が言いそう…
0206デフォルトの名無しさん2010/08/30(月) 22:05:47
>>204
参照型と同じ感覚で使う方がいいと思うんだけどなぁ。
まあ、あるものは使えばいいとは思うけど。
0207デフォルトの名無しさん2010/08/30(月) 22:06:39
眠くなってきました
0208デフォルトの名無しさん2010/08/30(月) 22:09:29
推定有罪が出てきた所は無理やりすぎてちょっと笑った。
0209デフォルトの名無しさん2010/08/30(月) 22:11:32
全然面白くねーから
この話終わりな

↓はい次の方
0210デフォルトの名無しさん2010/08/30(月) 22:22:24
えええっと
話題なんてないよ。。。

x=x+1で

x=0.5にならないのは何でですか?はあと
0211デフォルトの名無しさん2010/08/30(月) 22:23:32
>>210
今の C# なら、Solve(x => x == x + 1) とかで 0.5 を作れそうだよなぁ。
0212デフォルトの名無しさん2010/08/30(月) 22:27:28
x=Mathematic.Eval(...);
0213デフォルトの名無しさん2010/08/30(月) 22:28:07
x=0.5だと0.5=1.5になるじゃんwwwwwアホ乙wwwwww
0214デフォルトの名無しさん2010/08/30(月) 22:28:09
じゃぁ>>139のコードについて、あ〜だこーだ再開
0215デフォルトの名無しさん2010/08/30(月) 22:35:16
>>214
ちょwww
コード変わってるwwww
0216デフォルトの名無しさん2010/08/30(月) 22:39:57
プレザンス\(^o^)/
0217デフォルトの名無しさん2010/08/30(月) 22:41:50
いつまでも昨日の俺だと思うなよ…
0218デフォルトの名無しさん2010/08/31(火) 00:17:08
歌丸です
0219デフォルトの名無しさん2010/08/31(火) 00:26:41
質問させていただきます
今常駐アプリを作っていて、キーの監視について悩んでいます

自分が作成している常駐アプリは特定のキーが押された場合に非アクティブでも反応し
それに応じた動作を行うというものです


キーを監視する方法は、Win32APIのSetWindowsHookEx()かなんかそこらへんを見ればいいとか書いてあったような気がするんですが
実際の実装方法が分かりません
わかりづらくてもうしわ家ありませんがよろしくお願いします
0220デフォルトの名無しさん2010/08/31(火) 00:28:28
>>219
http://ufcpp.net/study/csharp/sp_pinvoke.html#sample
こんなの?
0221デフォルトの名無しさん2010/08/31(火) 01:29:22
気ぃ付けや!
 あんたの事やで?!
   そのバック♪
0222デフォルトの名無しさん2010/08/31(火) 01:53:09
設定
■〜〜
■〜〜
□〜〜
□〜〜
■〜〜
保存

save.txt
1,2,5

もし、設定ファイルの中に1が会ったとき(設定で1が有効になっている時)にイベントを起こす
ということをやりたいです
ただ、設定項目の数が不定でいくつにも増える可能性があります
こういう場合はどういう風に実装すればいいでしょうか

設定ファイルの中身を配列に保存していけばいいのかな?
0223デフォルトの名無しさん2010/08/31(火) 01:55:58
意味が分からない。

コンストラクターなり、event なりでイベントハンドラーを渡しておいて、
LoadSetting(path); 的な呼び出しした瞬間に、その設定ファイル読みに行って、
その条件な時にイベントハンドラー呼び出しするってこと?

それともファイルの更新監視とか必要?
他のアプリインスタンスと競合起こしたりはする?
0224デフォルトの名無しさん2010/08/31(火) 01:57:42
とりあえず、設定の保存形式自分で作ろうとすんな。
.NETの場合、XMLSerializerなりDataContractSerializerなり使え。

ファイルの更新監視するならFileSystemWatcher。
0225デフォルトの名無しさん2010/08/31(火) 02:00:42
xmlは冗長だから嫌いです
0226デフォルトの名無しさん2010/08/31(火) 02:01:24
じゃあC#使うなよ
0227デフォルトの名無しさん2010/08/31(火) 02:02:52
んな実も蓋もない
0228デフォルトの名無しさん2010/08/31(火) 02:05:15
とりあえずLoad時だけでいいなら
配列がどうこうじゃなく読んだ時にイベントハンドラ呼べばいいだけよね
0229デフォルトの名無しさん2010/08/31(火) 02:08:54
>>223-224
説明下手でごめんなさい
�@ある文章中の特定キーワードにひっかかるようにしたい
�A特定キーワードは必ず数字2文字
�B特定キーワードはユーザーが自由に設定できる(しかし、範囲は00〜99まで)

こういう場合、テキストに特定キーワードを,で区切るなりして保存して
配列にひたすら読み込んで
配列の大きさぶんだけforでマッチするか比較するみたいな感じでいいんでしょうか

何かすごく無駄な気もするんですが他に思い浮かばなくてorz
良い方法あったらお願いします
xml調べてみます……
0230デフォルトの名無しさん2010/08/31(火) 02:21:40
イベントのイの字も出てこない件
0231デフォルトの名無しさん2010/08/31(火) 08:34:52
うん、イベントのイの字もないなぁ。

>>229
var r = new Regex("パターン");
var m = r.Match(読み込んだ文字列);
if (m.Success)

じゃダメなの?

あと、配列じゃなくて IEnumerable になるように作ればメモリの無駄は少ないよ。
0232デフォルトの名無しさん2010/08/31(火) 09:17:34
パターンが100あるからきつそう…
0233デフォルトの名無しさん2010/08/31(火) 09:20:36
パターンは一つだろw
0234デフォルトの名無しさん2010/08/31(火) 10:18:59
>>231
検出した後どうするんだろうね

それに合った動作も定義して100分岐するのかな
0235デフォルトの名無しさん2010/08/31(火) 12:37:59
DateTime.Today.DayOfYearなどで得られる年間積算日みたいな感じに
3桁の数字を渡して○月×日の形に変換するにはどんな方法があるんでしょうか?
0236デフォルトの名無しさん2010/08/31(火) 12:43:32
なにがしたいの
0237デフォルトの名無しさん2010/08/31(火) 13:05:09
>>235
お前は閏年を知らないのか?
0238デフォルトの名無しさん2010/08/31(火) 13:07:47
DateTime.AddDays メソッド
0239デフォルトの名無しさん2010/08/31(火) 13:23:35
>>236-238
DateTime.AddDaysで解決しました
ありがとうございました
0240デフォルトの名無しさん2010/08/31(火) 14:25:15
>>222みたいな「~を読んだらイベント」の構造って超使いづらいよね
SAXは糞だからXmlReaderはプル型にしたとMSDNに書いてあるけど全面的に同意
0241デフォルトの名無しさん2010/08/31(火) 18:24:19
>>229
http://ideone.com/RTlGI
こんな感じ?
キーワードに対応するActionを任意のコードにしたいとなると、それはそれで対応しないといけないけど。
0242デフォルトの名無しさん2010/08/31(火) 18:59:26
@"\d\d"

var
var
var
0243デフォルトの名無しさん2010/09/01(水) 01:42:12
初心者すぎる質問ですまん。
try〜catchの書き方なのだが、必要な箇所にだけ書け! という
規約を忠実に守って書いてみた。
内容はDBから取ってきた値を画面に表示する単純なもの。
(ただし結構ソースは長い)

穴があくくらいソースを見てみたが、エラーが想定できる
箇所はDBアクセスの1箇所だけだったので、そこだけ
try〜catchで囲って想定できる例外処理をした。

……これで正しい書き方といっていいのでしょうか?

誰かに「こいつtry〜catch全然使ってねーよ!大丈夫か?」とか
思われるんちゃうかと思ってしまうのだが(汗)
0244デフォルトの名無しさん2010/09/01(水) 01:50:22
「誰か」の神経質さによるからなんとも言えん
02452432010/09/01(水) 01:58:08
だいたいどこの現場も、メソッドの中身はまるまる
try〜catchで囲ってるケースが多いし、逆に必ず
全てにtry〜catchを記述しろという現場もありました。
それになんとなくその方が安心できる気もするしw

まあ最終的に例外時に正しいログさえ採取できれば、どの
書き方でもいい感じもしますが、さすがに今回
ソース書いてみて、一箇所しかtry〜catchがないと
自分でも「これで大丈夫か?」と思ってしまうわけでw
0246デフォルトの名無しさん2010/09/01(水) 02:39:31
なぜそう思うのかを自分なりに考えてみるべき
0247デフォルトの名無しさん2010/09/01(水) 02:41:04
語尾にwが付いてるとそれだけで馬鹿っぽいなw
0248デフォルトの名無しさん2010/09/01(水) 03:29:28
俺のとこはすべてのメソッドに try〜catch 書いて throw してる。
で一番上の階層でメッセージを出したりログ出力したり。
そうしないと例外がどのメソッドで起きたかわかんないよね。確か。
0249デフォルトの名無しさん2010/09/01(水) 06:02:32
そんなこともないけどな。
0250デフォルトの名無しさん2010/09/01(水) 09:05:30
>>245
全部 try catch で囲むとか Java の悪習過ぎるだろ。

ほんとは、try catch で例外握りつぶすんじゃなくて、
単体テストで想定外の例外でなくなるまでテストやるべき。

でも、客に納品したプログラムが「未処理例外で止まりました」ってエラーメッセージだすと、
客にすごい嫌な顔されるとかで、「握りつぶす」って選択肢でダメなしのぎ方する人多いと聞くけど。
0251デフォルトの名無しさん2010/09/01(水) 09:06:19
>>248
例外、スタックトレース情報持ってるじゃない。
0252デフォルトの名無しさん2010/09/01(水) 09:09:34
初心者スレなんだと実感するね
■ このスレッドは過去ログ倉庫に格納されています