[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/10 00:07 / Filesize : 145 KB / Number-of Response : 587
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

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

2 名前:ななしぃ# [2008/10/12(日) 15:09:52 ]
C#, C♯, C#相談室 Part48
pc11.2ch.net/test/read.cgi/tech/1219481054/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
pc11.2ch.net/test/read.cgi/tech/1211453941/

Live3
pc11.2ch.net/test/read.cgi/tech/1221395634/

初心者のためのプログラミング言語ガイド Part11
pc11.2ch.net/test/read.cgi/tech/1218282605/

3 名前:ななしぃ# [2008/10/12(日) 15:11:43 ]
参考サイト。まずはここで検索してから。
www.google.co.jp/
msdn.microsoft.com/ja-jp/library/default.aspx
homepage3.nifty.com/midori_no_bike/CS/
www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
dobon.net/vb/dotnet/
jeanne.wankuma.com/tips/
www.labasp.net/CsharpNote/

4 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:17:02 ]
>>1


5 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:22:45 ]
>>1
糞スレ乱立すんな

6 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:23:40 ]
>>1重複
↓↓以降こちらへ
pc11.2ch.net/test/read.cgi/tech/1223777524/

7 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:35:47 ]
>>1

ぷらっととかいうスレを立ててる荒らしは死ね

8 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:42:15 ]
楽しいか?
しかし幼稚な奴らばっかりだな本当。

9 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:46:29 ]
さて、こちらをお気に入りに追加して
ぷらっとを削除する作業に戻るとするか

10 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:51:49 ]
>>1 おい、重複だぞ

pc11.2ch.net/test/read.cgi/tech/1223777524/



11 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:55:47 ]
>>10
いい加減にしろ
死ね

12 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:59:11 ]
>>1


ぷらっととかという荒らしの立てたスレは放置で。
質問のある方どうぞ


13 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 16:00:14 ]
>>10
死にません。

以降、こちらのすれをご利用ください。
pc11.2ch.net/test/read.cgi/tech/1223777524/

14 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 16:02:14 ]
>>13
いいえ使いません

15 名前:デフォルトの名無しさん [2008/10/12(日) 16:30:14 ]
質問です、以前のWindowsではプロセス間通信をDDEやOLEで行っていたかと
思いますが、.NETではそれに代わるものが出来たのでしょうか?
よろしくお願いします。

16 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 16:33:57 ]
リモーティングとかWCFとか

17 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 17:48:21 ]
アセンブリ情報のタイトルと製品の違いが分かりません
どのように表記すべきか

ご教授ください

18 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:01:28 ]
他のEXEのプロパティとか見てみては

19 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:19:49 ]
例えば
タイトルがVisual C# 2008
製品がVisual C# 2008 Express Edition
みたいな感じとかで考えたらどうだろう
ちなみにAssemblyTitle属性はXP以降でタスクバーボタンのグループ化したときにも表示されたりしたはず

20 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 19:19:01 ]
つまりタイトルはタイトルバーに表示されるべき範囲の名称に留め、製品はそれを個と見なした場合の製品名ということですね!わかります!!



21 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 19:57:04 ]
タイトルに2バイト文字列使うってプログラマとしてどうなの?

22 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 20:02:21 ]
突っ込む奴が馬鹿だと笑えない。
「2バイト文字列」っていつの時代の概念だよ。

23 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 20:51:02 ]
Windowsの人たちはUTF-16LEBOMありのことを
昔からの慣習を引きずってUnicodeとか言うので
2バイト文字列って言ってくれたほうが正直ありがたい

サロゲートペア?シラネ

24 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:00:12 ]
今時2バイトだの3バイトだの言ってる奴プログラマ(の重鎮だと思ってる)人としてどうなの?

25 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:20:36 ]
文鎮としてはどうでもいい

26 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 23:15:59 ]
System.Stringは2バイト/文字だから(例えASCIIの範囲内でも)タイトルに使ってはいけないということですね

27 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:05:49 ]
サロゲートペアと組み合わせ文字わすれんなカス

28 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 08:54:45 ]
byte配列からデータを抜き出して使用する場合って、みんなどうしてるの?

CやC++だと構造体のポインタにキャストしてアクセスすれば、
間にデータが追加になっても変更が楽なんだけども

調べたらC#でもunsafe fixed使えばキャストできるけど、これが常套手段だとは思えないし、
インデックス値を直に指定してアクセスなんてしたら、データの追加削除が発生したら
変更が大変すぎる

そもそもキャストなんてしないように思えるんだけど、良い方法が思い浮かばない

29 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 09:28:58 ]
日本語でおk

30 名前:デフォルトの名無しさん [2008/10/13(月) 09:46:21 ]
>>28

Marshalクラス使うんじゃね
Marshal.Copyでbyte[]からIntPtr取って、Marshal.PtrToStructureで帰ってきた
のを構造体にキャストするんじゃないかとおもうが……

外してたらごめんね



31 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 09:52:48 ]
>>28
BinaryReader, MemoryStream 使う。

32 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:03:39 ]
>>28
配列の長さにもよるけど、簡単ならBitConverter、少し複雑ならBinaryReaderかな

33 名前:デフォルトの名無しさん [2008/10/13(月) 19:57:27 ]
文字列stの中に1320があるのであればAを実行するというプログラムをかこうとしているのですが int.Parse(stArray[0])のところで止まってしまいます

int code = 1320;
string st = "1320,野田,め組,578954";
string[] stArray = st.Split(',');
if (int.Parse(stArray[0]) == code)
{
Console.WriteLine("1320あり");
}

codeをstringに変更し
if (stArray[0] == code)にすると問題ないのですが 数値として比較したいと思っています
いろいろと調べたのですが私の調べる力が足りないのか解決方法が見つかりませんでした
どのようにすれば上手くいくのか教えていただけないでしょうか


34 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 20:11:57 ]
それで動くと思うよ。エスパーを待ってもいいけど
どう「止まる」かを具体的に書くといいかもしれない
エラーが出るならそのメッセージとか

35 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:00:47 ]
>>33
要はそのコードなら止まらないが、st = "Hoge,野田,め組,578954"とかだと
int.Parse(stArray[0])の呼び出しで例外が発生する。
それを回避するために
int.TryParse(stArray[0],out value)

こっちを使うといい。

36 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:34:16 ]
>>33
教師やっててそんなこともわからないのかよ

37 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:41:48 ]
のだめ知らんのか

38 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:42:45 ]
みんなsprintfを自作して使っていると思う。俺は、へたれだから、Formatでいやいや逃げてきている。
ここらで、便利なsprintf もってる椰子がいたら公開してはくれんだろうか。


39 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:49:54 ]
普通にstring.Formatのほうが便利

40 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:51:16 ]
まじですか。c++が長すぎて、なんか直感的じゃないんだよな。



41 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:01:23 ]
Stringってかかなきゃいかんのがめんどいよなあ

42 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:03:21 ]
俺も、MSDNの文字列化の書式指定辺りが訳わかめだし。
正規表現も思ったように指定するのがめんどいんで、
sprintf,sscanf互換の関数が欲しい。

43 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:10:20 ]
string.Sprintf()でもいいから、欲しいくらいだよ。
それか、perl, ruby風の文字列表記。

44 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:11:50 ]
なんかねえ
慣れろとしか言えん

45 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:19:45 ]
わからないから戻せっていうんならずっとCやってれば

46 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:21:11 ]
C#のほうが高尚だとおもってる奴がまたでたな。

47 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:28:51 ]
d.hatena.ne.jp/deraw/20070517/1179332432
俺は、このまんま、ちょい必要なの足して使ってるな。

48 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:29:55 ]
ほとんどは型指定なしの{0}ですむんだから、難しく思えるのはどのあたりだろ?
整数とか実数のことをいってるのかな。前詰め後ろ詰めのこと?

49 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:35:50 ]
使い方なんて、わかんないとこないとおもうし、わからなかったら調べるだけ。
問題なのは、 直感的に最終的な文字列がわかり難い ことだとおもう。
無駄に長い記述になるし。

50 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:45:43 ]
俺は、%02X 相当のことするのにだいぶヘルプを探しまくった。
結局、精度指定子とやらが文章中に埋まってるのをようやく発見したが、
あんな仕様書は俺が上司だったら却下だな。
同じヘルプのsprintfとかの方が全然読みやすいのに。なんだあれは。




51 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:53:34 ]
そういう話なら慣れの問題としかいえないね。
あとはマニュアル(MSDN)の記述がよくなくて探しにくいというのが大きいかも。

{ 位置情報 [[ , 総桁数] : 型[[0]サイズ]] }
「カンマ総桁数」のあたりの書き方がどわすれすることが多いよね。


52 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 00:48:54 ]
私はfontDialog1で選択されたフォントをtextBox1に適用しようとしています

private void fontDialog1_Ok(object sender, EventArgs e)
{
textBox1.Font = fontDialog1.Font;
}

これで何も変化がありません
エスパー助けてください

53 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:31:28 ]
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Font = fontDialog1.Font;
}
じゃだめなのか?

54 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:36:10 ]
適用ボタンでもいけた。呼ばれてないんじゃない?

55 名前:52 mailto:sage [2008/10/14(火) 01:40:37 ]
>>53
思い通りの動作になりました有難うございます

56 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:47:35 ]
Okというイベントが無いみたいで呼ばれてなかったです
小生Applyでは簡単に反映は出来ていたんですが、適用ボタン表示したくなかったのでOKボタンで反映させる方法が知りたかったのであります

57 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:57:43 ]
なるほど、自前で無理やり用意したのかw

58 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 12:19:36 ]
Media Player Classicのような再生プレイヤーを作るのって難しいでしょうか?

デコードはxdivなりffdshowなり各自インストールしてもらってそちらに任せるとして、
あとは映像を指定の領域に再生させたり、一時停止させたり、シークバーで任意の
場所に移動できたり、音量を変えられれば満足なんですが・・・

もしこれらの機能を実装するとしたらどんなことを勉強する必要がありますか?

59 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 12:21:19 ]
過去の遺産だが俺ならDirectShow

60 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 13:57:35 ]
いろいろと問題も多いけど、AudioVideoPlaybackを触ってみるのもいいかも。



61 名前:58 mailto:sage [2008/10/14(火) 14:16:19 ]
どうもです。
目指すのは本当にシンプルで再生負荷が極めて軽いプレイヤーです。
8年前のPCでH.264といった動画も再生できるような軽さを追求したいと思っています。

プログラムの工夫いかんで軽くすることは可能でしょうか?

62 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 14:20:41 ]
それはH264デコーダの革命が必要だろう
プレイヤー関係ないと思うけど

63 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 14:30:31 ]
こんな質問してる奴が作れるのかね

64 名前:デフォルトの名無しさん [2008/10/14(火) 14:41:37 ]
C#の開発手順?というか定石みたいなのが書いてあるWebサイトってありますか?
Program.csに書いたらいいのか、新しいクラス作って書いていけばいいのか、、、など。

65 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 14:45:58 ]
取りあえずProgram.cs(Main)は殆ど触らん

66 名前:デフォルトの名無しさん [2008/10/14(火) 14:59:14 ]
>>65
ありがとうございます。
そうなんですか。。。今とりあえずprogram.csの中にメソッド追加してるんですが、良い方法ではないんですね。
プロジェクト->クラスの追加
でクラスを追加して、そこにコーディングしていくのが良いんでしょうか。
もしそうなら、そのクラスをnewするのはどこが一番いいですか?

67 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 15:08:11 ]
>>63
誰もが一度は通る道だろ。
お前さんだって、俺だって・・・

68 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 15:15:00 ]
>>66
おまいさんに必要なのは、まず何を作りたいのかはっきりさせることだ。
次にそれを作るのに必要なクラスを考えることだ。

69 名前:デフォルトの名無しさん [2008/10/14(火) 15:20:28 ]
>>68
それをmain()の中でnewすればいいですか?

70 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 15:42:59 ]
7年前のノートPC使ってるけどWMPでH.264再生してますよ
この1年で何があったんだよ・・



71 名前:デフォルトの名無しさん [2008/10/14(火) 16:26:24 ]
ベストプラクティス的なものは本を買わないと無いんでしょうか?
ググりまくっても、なかなかいい資料に出会えません。
初心者の道しるべがほしい・・・。

72 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 17:44:33 ]
そういうのは先人のコードから学ぶのが一番だと思う。
SourceForge や CodePlex 等から適当なやつを拾ってきて読むと、いい勉強になるんじゃないかな。

73 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:33:20 ]
メニョーストリップで一個一個のアイテムのハンドラで処理するんじゃなくて、
一箇所で受け取って、このアイテムが押されてたからこの処理。的な事はできないの?

74 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:37:40 ]

座標しかわからないよ

75 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:40:03 ]
できるよ

76 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:44:08 ]
むりよ

77 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:45:54 ]
ハンドラ一ヶ所にしたい、ということならできる。

78 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:47:43 ]
イベントハンドラ使い廻すか。
ストリップ本体のClick拾って項目突き止めるか。

79 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:04:59 ]
「メニョー」では無理

80 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:08:06 ]
「メニェー」とか発音が困難になるよかマシ



81 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:50:59 ]
3.5SP1は何時になったら完全日本語になんねん!

82 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 02:37:55 ]
for文とかのループ中ではプロパティは使わない方がベター?

83 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:29:49 ]
>>82
単純なGet/Setならインライン化されるので問題なし

84 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:31:47 ]
インライン化されるプロパティとされないプロパティはどう区別するの?

85 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 04:33:42 ]
CLRの気持ちになって考える

86 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:18:04 ]
コントロールには処理自体に時間のかかるプロパティが多いので場合によってはキャッシュ
System.Drawingも注意

87 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:51:51 ]
スペース区切りで1行に3項目ずつあるファイルを読み、それを二次元配列に入れたいと思っています。単に配列に読む場合には、

fruit.txt
2008/10/12(日) 12:03 バナナ
2008/10/13(月) 16:25 りんご
2008/10/14(火) 12:05 みかん
2008/10/15(水) 17:06 梨

string fileName = @"fruit.txt";
string[] fruitname = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS"));

でよいのですが、これを二次元配列にするにはどうしたらよいでしょう。
通常二次元配列は、
string[] fruitname = new string[4,3];
のようにして設定し、りんごを取り出すには、
fruitname[1,2]
でできるようなのです。
ご教示ください。


88 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:57:35 ]
二次元配列なんて捨ててDateTimeとFruitの二つのプロパティ持ったクラスの配列にしたほうがいいと思うけどなー

とりあえずReadAllLinesで読み込んで
その後二次元配列を生成
読み込んだのをループで回してSplitで分割して挿入していく

89 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:58:55 ]
普通そういうときは二次元配列じゃなくて配列の配列にするね
string[] lines = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS"));
string[][] fruitname = new string[lines.Length][];
for (int i = 0; i < lines.Length; i++) {
 fruitname[i] = lines.Split(new[] {' ');
}

90 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:01:46 ]
どこからも参照されていないメソッドの列挙とかって出来ますか?



91 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:07:42 ]
FxCop使ってみるとか

92 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:13:14 ]
普通に考えて無理。
まあソリューション内で直参照だけでいいなら、全ての参照を検索だったかで出来る。


93 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:14:38 ]
あごめん、それじゃ駄目なんだなきっと。
FxCopってできたっけかな?


94 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:16:26 ]
FxCopでできるよ

95 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:20:40 ]
あやうくgrepとか答えて赤面するところだった

96 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:23:00 ]
>>88
二つのプロパティ持ったクラスの配列を作った場合に例えば
DateTimeだけの配列やFruitだけの配列を取り出したい場合は
for文などで新たな配列を作るしか思いつかないのですが
他に良い方法はないでしょうか。

97 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:24:58 ]
fruits.Select(x=>x.Fruit).ToArray()

98 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:26:48 ]
そんなのは別に二次元配列だろうがジャグ配列だろうが変わらんが
まあC#3.0ならlist.Select(x => x.Fruit).ToArray()とかできるけどな

99 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:29:50 ]
>>88
アドバイスありがとうございます。
二次元配列を生成、というところができていないので、
具体的なソースもいただけるとうれしいです。
>>89
配列の配列。そういう考え方があるのですね。
このコード、{}の対応がとれていないみたいなのですが、
Split(new[] {' ');
のところって、
Split(new[] {' '});
Split(new[] ' ');
Split(' ');
とかやってみたのですが、うまくいかず。

ところで、二次元配列にはしないものなのですか?


100 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:46:33 ]
string[] lines = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS"));
string[,] fruitName = new string[lines.Length, 3]

for(int i = 0; i < lines.Length; i++)
{
string[] tmp = lines[i].Split();
fruitName[i, 0] = tmp[0];
fruitName[i, 1] = tmp[1];
fruitName[i, 2] = tmp[2];
}



101 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:49:49 ]
まあ使ってるうちにわかるよ
そのうち気がついたら2次元配列は全く使わなくなってるから

102 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:58:38 ]
>>88、100
ありがとうございます。

>>96、97、98
fruits.Select(x=>x.Fruit).ToArray()
って全文書くとどうなるんですか!?
ひょっとしてこれ、すごくスマート!?

>>101
うっ。そうなんですか。


103 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:04:37 ]
//class Fruit { public DateTime Date { get; set; } public string Fruit { get; set; } }
Fruit[] fruits = 読み込み…;
string[] fruitNameArray = fruits.Select(x => x.Fruit).ToArray();//Fruitだけの配列を作成

104 名前:103 mailto:sage [2008/10/15(水) 20:06:03 ]
すまん上のはエラーになるね
//class Fruit { public DateTime Date { get; set; } public string FruitName { get; set; } }
Fruit[] fruits = 読み込み…;
string[] fruitNameArray = fruits.Select(x => x.FruitName).ToArray();//FruitNameだけの配列を作成

105 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:19:46 ]
どうしてプログラムのサンプルって動物とかフルーツなの?

106 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:21:11 ]
string[] lines = File.ReadAllLines(fileName, Encoding.GetEncoding("Shift_JIS"));

var fruits = lines.Select(x =>
{
string[] tmp = x.Split();
return new
{
Date = tmp[0],
Time = tmp[1],
Fruit = tmp[2]
};
}).ToArray();
匿名形使ってみたり

107 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:58:00 ]
PointとPoint、SizeとSize、同士では足したり引いたりできないの
書いたらこんな風に

ポリフォニカは普通かった面白いだろ。
特に姉妹がかわいいし。

108 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:59:03 ]
>>104、106
これで
バナナ
りんご
みかん

のみを一括して出力するには、
Console.Write(Fruit[]); //104
Console.Write(Fruit); //106
でいいと思うのですが、
問題はこの行をどこに書くかです。
どこに書きゃいいんでしょ?


109 名前:96 mailto:sage [2008/10/15(水) 21:21:02 ]
C#2.0環境なので、LINQ使わずに実現したいのですが方法は無いでしょうか。

110 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:26:47 ]
>>107
意味的におかしいからできない
WPFのPointは引き算できるんだけど、位置ベクトル扱いで戻り値はVector型だったりする



111 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:56:30 ]
byteとByteみたいに同じような型がいっぱいあるのはなんでなの?

112 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:59:29 ]
byteとByteは同じですよ?

113 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:04:04 ]
回答になってない
なんでおなじのがあるんだよ

114 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:06:58 ]
System.Int32 i;
とかやるのが面倒だから?

115 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:07:45 ]
まあ、よく使う型は短くないと使いにくいからな。

位置づけとしては、
byte の方は C# の組み込みキーワード。
System.Byte の方は .NET Framework の正式名称。

116 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:07:55 ]
基本型だってのを強調するためじゃないの

117 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:27:10 ]
プログラマとしてはどう使い分ければいいの?

118 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:30:48 ]
変数宣言ならキーワード使ってればいい
ただしメソッド名とかの場合はInt32とか使う Convert.ToInt32みたいなの

119 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:30:52 ]
予約語の方一択。

120 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:32:14 ]
自分は定義されてるstaticメソッドを呼び出すときはエイリアスじゃない方をつかうな
Int32.Parse()
Char.IsDigit()
とか
なんでかはわからんが



121 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:33:58 ]
using System が使われていないときに

Byte[] byteStream;

とかやるとByte何それってコンパイラに怒られるから
なるべくbyteを使うようにすればいいんじゃないかと思ったり

122 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:39:36 ]
byteはmscorlib参照しなくても使える

123 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:43:17 ]
予約語一択が無難なんですね
ありやとやんした!

124 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:54:19 ]
理念的にはC#と.NET Frameworkは独立している(例えばintがSystem.int32じゃない
C#の実装もありうる)っていうような「アリバイ作り」以上の意味はないという
認識だったんだが、違うのか?


125 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:56:54 ]
intはSystem.Int32のエイリアスだと言語仕様できまってる

126 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:10:00 ]
それはMSのC#コンパイラの仕様じゃないの?

127 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:17:11 ]
たしかに

128 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:30:09 ]
EcmaのC#言語仕様で 予約語 int は System.Int32 のエイリアスだって決まってる
(Ecma 334 C# Language Specification の 11.1.4 Simple types)
だからMSのコンパイラが、ってわけじゃないと思う。勘違いしてたらごめんね

129 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 09:28:24 ]
たしかに

130 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 14:05:50 ]
ListBoxにDisplayMemberとValueMemberを設定してKeyValuePairを
放り込んで操作しているんですが、こういうやり方と、DataSourceを
設定してそっちを操作するのでは、どちらが軽いんでしょうか。



131 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 14:12:16 ]
普通は問題にならんよそんなのの差

132 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 14:14:40 ]
知らないならレスしなくていいよ

133 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 16:43:05 ]
すいません小数点→文字列変換時の丸めについて質問です。
double i = 1999.999999;
Console.WriteLine(i.ToString("F2"));
の結果が 2000.00 になってしまいます。
1999.99 にしたいのですが、勝手に丸められてしまいます。
丸められない方法はないですか?

134 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 17:17:11 ]
>>133
#.##

135 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 17:22:03 ]
>>134
丸められてしまいます。

136 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 17:25:31 ]
数値を切り捨てるか、文字列にしてから切り出す、かなあ。
数値で切り捨てるのは、小数点以下2ケタなら100倍してMath.Floorとか。

137 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 17:33:26 ]
>>136
グーですグー!
result = Math.Floor(result * 100) / 100;
result.ToString();
でいけました。どもです!

138 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 19:32:41 ]
decimal 使うたれや

139 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 20:33:40 ]
Bitmap bmp = new Bitmap("hoge.jpg");
で読み込んだ画像を png 形式のバイト列に変換したいんですけど、どうすればよいんでしょう?
ImageConverter.ConvertToの引数が4つのほうを使えば良いんだろうとは思うんですが、
1, 2個目に入れるべき物がよくわかりません。

Bitmap bmp = new Bitmap("hoge.jpg"); // 実際には読み込んだ後、加工された物
ImageConverter cnv = new ImageConverter();
string str = System.Convert.ToBase64String((byte[]) cnv.ConvertTo(?, ?, bmp, typeof(byte[])));

140 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 21:02:45 ]
自己解決。
ConvertToに与える加工済みのbmpは既にpng形式になってたので引数2個のほうで問題ありませんでした。



141 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 21:21:48 ]
普通はMemoryStreamに対してSaveする。

142 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:10:29 ]
>ガベージ コレクションにより、メモリ開放の煩雑さが不必要
Disposeしなくていいってことですか?

143 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:19:33 ]
どこの文章かは分からんがIDisposable.Disposeと.NET管理下のメモリとは何の関係も無い

って何回繰り返したことだろう

144 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:23:19 ]
大事なことなので繰り返しました

145 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:27:23 ]
>>143
それは不正確だと思うが。。
Disposeの個別の実装次第だろう。

146 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:36:59 ]
>>145
じゃあ具体的にマネージドメモリをDisposeの実装でどうにかしてくれ

147 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:42:02 ]
>>146
言ってる意味理解して反論してる?

148 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:45:04 ]
うん
でDisposeの個別の実装をどうマネージドメモリに関係させるの?

149 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:58:25 ]
例えば(Disposeに期待される役割から言って意味がないから普通はやらないけど)
巨大配列への参照をnullにする実装だってありうる。

「それはメモリを開放したことにならん」って言いたいかもしれんが、
その時は落ち着いて>>143を読もう。


150 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:16:06 ]
でもやっぱり関係ないよね
参照を消しただけだもの



151 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:10:34 ]
良く分からんが、Disposeの実装でGC.Collect()を実行するような話か?

152 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:19:19 ]
func<T>( T t )

のように、任意の型の引数を取るメソッドがあったとして、以下のようなことはどうやればできるでしょうか。

・引数のtが何らかの型の配列かどうか(Tが配列か否か)を取得
・配列であれば何の型の配列か(TはT2[]の時、T2)を取得
・配列の型(T2)が取れた場合、T2型のオブジェクトを宣言する

funcの中で、

if ( t is 配列 ) {
 //TはT2の配列と仮定
 foreach ( T2 t2 in t ) {
  //t2に何らかの処理
 }
}

というようなことをやりたいと思っています。
よろしくお願いします。

153 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:32:02 ]
普通にはできない。
foreachしたいだけなら、IEnumerable<T>を引数にしたほうがいい。

154 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 02:34:02 ]
C♯ってくらいだからC言語の内容を包括してますか?
あとC♯を勉強してたらJAVAやD言語についての理解も深まって
いざってときにそれらにシフトしていくことも可能ですか?
C♯に一番興味あるんですけど、JAVAやC言語、D言語ってのも
いいってきくのでその3つにつなげることができるのか疑問です。

155 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 03:00:47 ]
お前には無理

156 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 03:41:55 ]
s.Close;ってなんなの
何でいちいちこんなことする必要あるの?

157 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 04:33:25 ]
>>156
書いておく癖をつけとかないと、なんか色々漏れるんだよ。
理由が想像すらつかない程度の知識しかないんなら、とりあえず面倒でも従っとけ。

158 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 04:44:09 ]
>>154
言語の知識だけで一人前になれるほどプログラムは単純じゃありません。
興味を持っただけの段階で知識の応用範囲を気にするなんて小賢しい真似をする暇があるなら
さっさと勉強した方がなんぼか有意義です。
でないと自分に必要な分野すら見えてきません。

159 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 05:22:12 ]
>>153
なんで嘘つくの?

160 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 06:11:34 ]
>なんなの、するの? 
こういう言い回しする奴はとことん頭悪そうだな



161 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 06:54:25 ]
>>152
リフレクション

162 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 08:24:22 ]
名前空間 Hoge のクラス Aと、名前空間 Hage のクラス Aがあるとして、
Aは両方とも中身(フィールド・プロパティ・コンストラクタ定義。メソッドは持たないデータ格納用クラス)は全く同じで、
名前空間のみが異なるとします。
仕様上そうなっているので、クラスを一つに統一するのは難しい状況です。
このとき、HogeのAとHageのAのオブジェクトを相互変換したいのですが、何かうまいやり方はありますでしょうか?

最も愚直な方法は、メンバを全て列挙して、一つ一つ代入していくことだと思いますが、
量が非常に多いのであまりやりたくありません。
Hoge.A.BやHage.A.B等、Aの中に同様のサブクラスBがあったりして、.NETで提供されるstring等の基本的なクラスに
落ちるまで、全て展開してやる必要がありますし。

単純にasやキャストを使っても変換できないと言われますし、
XMLシリアライザでメモリストリーム上にシリアライズし、他方の型を指定してデシリアライズしても、
型が違うと怒られます。
何かうまいやり方はありますでしょうか。よろしくお願いします。

163 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 08:31:06 ]
>>152
同じ名前で通常版と配列版をつくってオーバーロードすればいけると思う。
配列がobjectにキャストされてたらダメだけど。
static void Func<T>(T [] ts) { foreach (T t in ts) Console.WriteLine(t); }
static void Func<T>(T t) { Console.WriteLine(t); }


164 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 08:52:18 ]
>>162
両方同じインターフェース継承させちゃダメなのか?

それがダメなら、リフレクションでやれ。

165 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 09:17:07 ]
>>162
CodeDomやEmitでコード生成

166 名前:デフォルトの名無しさん [2008/10/17(金) 12:22:53 ]
>>162

どれぐらいメンバ変数があるんだかわからないけれど、一個一個やるんじゃなくて
Hoge.Aを引数にとってHage.Aを返すメソッドを一個書けばすむんじゃねーの?

Hage.A ConvertHogeToHage(Hoge.,A a)
{
b = new Hage.A();
b.x = a.x;
b.y = a.y;
.......
return b;
}
てな具合にさ。


167 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 12:46:33 ]
それが面倒だって言ってるんだろ

168 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 13:59:56 ]
配列
int[] a = a[10];
があるとします。

この配列の範囲外にアクセスしようとしたら、たとえばa[-1]やa[10]にアクセスしようとしたとき、
特定の数字(たとえば-1)を返すようにすることは可能でしょうか?

169 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 14:01:16 ]
無理
インデクサを実装した型を自作してそれっぽく振る舞わせることは可能
意味がわからなかったら勉強しろとしか言えない

170 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 14:07:39 ]
インデクサですか、ちょっと勉強してきます。

あるいは簡単にメソッドで実現するという方法は一般的でしょうか?
int a(int x)
とし、0 <= x <= 9 以外の範囲を指定したら-1をreturnするようなメソッドの中に
int a[];
を宣言するという方法もあるかと思いますが・・・



171 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 14:20:08 ]
ま別にそれでもいいんじゃね
今なら拡張メソッドでGetValueOrDefault<T>(this IList<T> list, int index, T default)とかか
やらんけど

172 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 14:57:16 ]
ここ初心者用なのに初心者叩かれるよね

173 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:08:31 ]
全然

174 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:10:08 ]
ディスプレイ(もしくは特定のウインド)を(動画で)キャプチャし
その動画をLAN内の別のPCのメディアプレイヤーで見れるようにする(WMEのような)ソフトを作りたいのですが

非常に大雑把な作成の流れですが下のような流れで作ろうとすれば作れるでしょうか?
ココをこうすればいい、この部分に注意するようになどのご意見を賜りたいので書き込みました



Graphics.CopyFromScreenメソッドを使用して
連続でディスプレイをキャプチャ

画像ファイルを繋げて動画へ変換しつつ
httpとUDPで通信できるサーバを立てる

メディアプレイヤーから接続があった場合
そこへ動画を配信する

175 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:28:02 ]
エンコードはしないの?

176 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:33:40 ]
エンコードしないとサイズやらなんやら大きくなってしまいますね・・
メモしておきます

177 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 16:26:30 ]
WindowsMediaServiceで出来るだろん

178 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:36:23 ]
C#の正規表現で、「スペース(半角、空白)か改行しかない」という
条件はどう表現するのでしょうか。

179 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:51:25 ]
>>169
インデクサに関してちょこっと調べてきました。
setやgetで要素を設定・取得するわけですが、要素数が100個とか1000個になると
swich〜case文で設定していくのは大変な作業になってしまう気がするのですが・・・

180 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:58:13 ]
意味が分からん
普通そんなのはDictionary使うだろ



181 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:59:07 ]
私の辞書にその発想は無かったわ。

182 名前:178 mailto:sage [2008/10/17(金) 20:13:57 ]
^\s+\n と ^\s*$ を組み合わせる事で表現出来たような気がする
んですが、間違ってないでしょうか。

183 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:20:22 ]
>>179
なんでswitch? その発想はなかったわw
class MyArray<T> {
 private T[] array;
 public T this[int index] { get { 0 <= index && index < array.Length ? array[index] : -1 } }
}

184 名前:178 mailto:sage [2008/10/17(金) 20:21:18 ]
すいません。正規表現スレ行きます。

185 名前:183 mailto:sage [2008/10/17(金) 20:22:17 ]
return忘れてた
setはarray[index] = value;ね

186 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:56:23 ]
>>183
>>185
どうもです(^-^)ノ
そのsetを実装すればあとはfor文なりで配列に値を普通に格納していけるわけですね。

187 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:34:02 ]
すみません。
配列で複数作ったクラスに継承使ったら複数の基底クラスが生成されて負担が大きくなる
という事はありますか?

188 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:36:06 ]
うぜえよお前!

189 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:36:14 ]
C#か日本語でおk

190 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 22:13:47 ]
クラスを入れる変数はポインタだからクラスの大きさとは関係ない
配列は変数がたくさん並んだものだからクラスの大きさとは関係ない



191 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 22:31:55 ]
>>190
分かりました。ありがとうございます。

192 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:21:21 ]
コマンドライン引数に関する質問です。
class MyApp { static void Main(string[] args) { foreach(string s in args) System.Console.WriteLine(s); } }
こんな感じの引数を表示するだけの物を動かしてて気付いたんですが、
argsにはワイルドカードが展開されない状態のコマンドライン引数が入るみたいですけど、
展開済みの引数配列を得るにはどうすればよいんでしょう?

193 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:25:14 ]
そもそも引数にそんな概念はないだろ
自分で好きなように処理するだけ

194 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:35:22 ]
Unixのシェルには存在するらしいよ
シェルだからプログラムに渡される前に展開される

195 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:39:34 ]
ワイルドカードを「展開」するとかされるって言い回しは一般的なんだろうか

196 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 01:10:11 ]
>>195
Unixシェルがやってくれるのは展開すると言われることが多いと思う。

197 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 01:23:21 ]
VC++のsetargv.objみたいなのは.NETにはないのかな
自前で展開すればいいんだろうけど
いかにも車輪の再発明になりそうで躊躇してしまうね

198 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 05:08:21 ]
Directory.GetFiles()でダメな理由は?
ttp://msdn.microsoft.com/ja-jp/library/wz42302f.aspx

199 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 05:14:46 ]
別にダメでもないが

200 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 06:58:55 ]
>>198
Directory.GetFiles() がダメっていうよりシェルが展開しないとダメな理由は
ワイルドカード展開処理が各プログラムごとに異なって実装される可能性があるから。



201 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 10:10:01 ]
>>200
例えばdir *\*.txtは文句言われるけど、
ruby -e"p ARGV" *\*.txtは1階層下の.txtのリストを表示してくれる、
みたいに実際に処理できるパターンが違うものがあります。

結局の所、展開処理は標準ライブラリでは用意されてないから
Directory.GetFiles, Directory.GetDirectoriesを使って自前で処理を書かないと駄目ってことでしょうか。

202 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 11:24:32 ]
www.google.co.jp/search?hl=ja&q=%22expanding+wildcard%22+%2Bsite%3Amsdn.microsoft.com&btnG=%8C%9F%8D%F5&lr=lang_ja
Cのリンカオプションには存在するみたいだな。

203 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:35:43 ]
pythonにはパターンからそのパターンにマッチする
ファイルのリストを返すglobとかいうモジュールが標準でついてた気がする
そういうのがほしいのか

204 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:30:35 ]
結局自前で書いてみた。
www.uploda.org/uporg1732453.cs.html

205 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 17:28:30 ]
2つの文字列が一致しているかどうか判定するプログラムを書きたいと思っています。

string A="(文字列)";
string B="(文字列)";

とし、
if (A == B)
で判定はできるかとは思いますが、たとえば比較する文字列が長い場合(2ちゃんに投稿
される平均的な1レスくらい)でもこの方法を使うべきでしょうか?

それとも長い文字列の比較のためには別に推奨された方法がありますか?

206 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 17:39:07 ]
>>205
予め等しいか等しくないかが分かっているのでなければ、
少なくとも一度は線形時間かかる方法で比較しないといけない。

でも、一度等しいかどうかを判断すれば、その結果を変数に保存しておくとか、
System.Xml.NameTableのような仕組みを使ったりすることで、
二度目以降は定数時間の比較で済む。

207 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 17:44:36 ]
>>206
不用意な回答だと思うなあ。
まあ質問者の質問の仕方が悪いんだが。
例えばDBとか検索エンジンのようにハッシュを使う方法もありうるし、
目的を明確にせずに一概に言えないとしかいいようがないと思うんだが。

208 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 17:48:30 ]
比較対象の傾向にもよるけど、例えばまず文字列長を比較するとか
基本的に数文字で一致しなくなる掲示板レスみたいなのなら普通に比較するだけでも十分だろうし
そもそも比較回数が少ないなら気にすることもないだろうし

209 名前:205 mailto:sage [2008/10/18(土) 18:07:32 ]
>>206-208
ハッシュという方法がありましたか( ´・ω・)!

文字列をハッシュを使っていったんハッシュ値に変換してから比較するのと、
C#に標準で用意された文字列比較(==)とではどちらが短時間で済むでしょうか?

あとC#にはハッシュ関数は用意されていましたっけ?
それとも自前で構築する必要がありますか?

210 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 18:09:24 ]
初心者がハッシュね
うん



211 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 18:14:22 ]
ちなみに==よりもString.Equalsの方が早いよ。

212 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 18:14:55 ]
どういうシステムなのか次第で最適な方法なんていくらでも変わってくるんだから、
その辺を明らかにせずに聞いても仕方ないんじゃないか?

たった2つの文字列を1回きり比較するだけとか、
数百万件の文字列データを高速に比較したいとかで
全然やり方なんて違うだろ。

213 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 18:24:54 ]
object.GetHashCode()でハッシュは取れるが
そんなこと考えず==で普通に比較すりゃいい

214 名前:205 mailto:sage [2008/10/18(土) 18:36:28 ]
>>211-213
プログラムは2ちゃんに投稿される1レス相当の文字列を数千回程度比較する規模です。
このくらいでしたら==やString.Equalsを使った方が速いでしょうか?

215 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 18:39:28 ]
>>214
数千回と一口に言っても
一つの文字列と複数の文字列を比較する場合とか、
複数と複数を比較する場合とかで違ってくるわけだが。

やりたいことを全部書けよ。

216 名前:205 mailto:sage [2008/10/18(土) 19:19:53 ]
>>215
はい(´・ω・`)

比較する文字列はすべて違います。
webにアップロードされてる文字列に変更が加えられている物が無いかを
チェックするため、手元にコピーしておいた過去の文字列と、たった今web上
から落としてきた文字列を1つ1つ照らし合わせながら比較していきます。
その数が一回の処理でだいたい数千回に上るという仕様です。

217 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:27:12 ]
それなら普通に==で比較するのでいいんじゃね。
「異なっていること」を判断するのにハッシュはあまり役に立たない。

218 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:33:16 ]
初心者ほど何故か小出しにするから、中級者以上の回答者が混乱して無駄に議論を始める

219 名前:205 mailto:sage [2008/10/18(土) 19:34:46 ]
>>218
す、すいません(´;ω;`)ブワッ

>>217
そうなんですか(´・ω・`)・・・
逆にハッシュを使った文字列比較が活躍する場所は何でしょうか( ´・ω・)?

220 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:35:36 ]
>>216
== or String.Equalsで良いと思う。



221 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:36:51 ]
>>219
ハッシュは文字列の場合はパスワードの認証とかに使われるし、それ以外ならほとんどバイナリの整合性を取るために使われる。

222 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:40:49 ]
>>219
保存されてる数千の文字列を総当たりで比較する場合とか。
ハッシュ作るのに相当なコストかかるから、比較の一方が1回しか
比較の対象にならないならば、効率が悪すぎる。

223 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:52:59 ]
==とString.Equalsに違った部分があるかのような言説はなんなんだよ

224 名前:205 mailto:sage [2008/10/18(土) 19:53:08 ]
同じ文字列を何度も比較に使うときはハッシュにすると効率がよくなるということですね?

225 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:58:26 ]
ちゃんとキャッシュすればね

226 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 20:01:20 ]
と言うよりも、比較の際にハッシュ作成の時間をカウントしないで済むかどうかが肝なんだろうね。
つまりハッシュ値を事前に用意できるかどうか。

>>216の場合はハッシュによるふるいわけが適用可能な例に思える。

227 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 20:39:44 ]
どう考えてもハッシュを使う意味がない。
こういう場合にハッシュを使う意味がある可能性があるのは、かなりサイズが大きい場合。
つまり全文をディスクから読む負荷がかなり大きい場合。

2ちゃんレスレベルなど、ハッシュ計算の自体の方がはるかに負荷が大きい。
ディスクからの全文読み込み負荷と、ハッシュのみ読み込み負荷の差が、
ハッシュ計算自体の負荷よりもずっと大きいなら効率化できるかもしれない。
ハッシュ計算結果を全部メモリにキャッシュしとけば別だが、

2ちゃんレスレベルならいっそ文字列全部キャッシュしてもいいくらい(件数によるが数千件レベルなら)。

そこまで性能にシビアでないなら何も考えず全文比較でいい。

228 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 20:49:05 ]
初心者がいきなりそんなどっちが早いとか考えなくていいです
希望する動作を実現するのに最も簡単な方法を教えてあげてください

229 名前:205 mailto:sage [2008/10/18(土) 20:56:10 ]
>>227
> 2ちゃんレスレベルならいっそ文字列全部キャッシュしてもいいくらい(件数によるが数千件レベルなら)。

どうもです。
スタックに

string[] A = {"文字列", "文字列", "文字列", "文字列",・・・,"文字列"};

みたいな感じで格納して計算してもいいと思いますか?

230 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 20:56:30 ]
>>227
分かってるような感じでいい加減なことを言わんように



231 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:06:03 ]
>>211
あちこちで言われてる事ではあるけど
String.Equalsの方が早いと言っても微々たる差でしかないし
とくに初心者はString.Equals(String)ではなく、誤ってString.Equals(Object)を使ってしまう危険性が高い。

その場合、stringとintの比較のように型が異なっていてもエラーが出ずコンパイルが通ってしまい、バグの発見が遅れる可能性が出てくる。(実行時に例外発生)

問題点を教えずに使わせるのは良くないと思うんだ。

232 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:06:28 ]
このスレにはC#の未来が掛っています
初心者潰しをするか初心者を受けれるかはあなた次第

233 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:12:20 ]
どの部分がいい加減なのかをきっちり指摘すればいいと思うんだよね。


234 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:13:29 ]
おっと
>どの部分がいい加減なのかをきっちり指摘すればいいと思うんだよね。
>>230宛てね。


235 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:14:03 ]
a.Equals(b)って対称じゃなくて嫌い

236 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:15:50 ]
String.Equalsでのパフォーマンスの差なんて、文字列がよっぽど短くなけりゃ完全無視できるレベル。


237 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:29:42 ]
>>227でいい加減なこといってると思われそうな箇所は、

>2ちゃんレスレベルなど、ハッシュ計算の自体の方がはるかに負荷が大きい。
ディスク読み込みよりもハッシュ計算の方がはるかに思いといってるように読めるかもしれない。
→ここで書いたのは文字列比較よりもはるかに重いという意味

あとは、なんだ、ハッシュを暗号関連のハッシュではなく、.NETでのGetHashCodeによる
ハッシュの意味と思われてる可能性があるのかもしれないが、GetHashCodeの値はそもそも
ディスクに永続化なんぞしちゃいけない情報なのでこういう用途にはもともと使えないから除外してる。

あとはどこかいな?


238 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:32:08 ]
あとGetHashCodeじゃ現実的に衝突を考慮する必要も出てくるだろうから使えないしね。


239 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:39:41 ]
>>234
ハッシュを使う価値があるのは同じ文字列を複数回比較に使う場合
代表的にはn個の文字列の中に同じものが含まれるかどうかといった場合だ
文字列が長いとどうだとか瑣末な問題を全てであるかのように語っているのがいい加減だ

240 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:45:47 ]
Dictionary<int, List<string>> cache = new Dictionary<int, List<string>>();
int hash;
List<string> sl;

foreach(string str in getStrings())
{
hash = str.GetHashCode();

if(!cache.ContainsKey(hash))
{
sl = new List<string>();
cache[hash] = sl;
}
sl.Add(str);
}

string input = Input();
hash = input.GetHashCode();
if(cache.ContainsKey(hash))
{
sl = cache[hash];
if(sl.Contains(input))
Console.WriteLine("一致");
}
205じゃないけどhash使う場合ってこんな感じになんの?



241 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:49:35 ]
cache.TryGetValue(hash, out sl);
if(sl == null)
{
sl = new List<string>();
cache[hash] = sl;
}
こうか

242 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:50:48 ]
それだと意味無いだろ
ハッシュの計算結果を使いまわさないと

243 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:55:07 ]
>>239
んなもん今回のケースと全く合わないから触れもせんかったわ。
最初から今回のケースに関わる場合という前提で書いたから。


244 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:59:09 ]
そういうハッシュも含めて文字列の長さが全てなんて言った覚えはない。
だいたい最初から一致判定の話あって、検索の話を書いてるのはお前だけだろう。
無論それを確認する意味はあるが、俺はあくまで用途がだいたい見えた状況以降を見て書いてる。

245 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:59:47 ]
>>243
今回のケースなら、同じ文字列を複数回比較に使わんのだから
文字列が長かろうと短かろうとハッシュを使う理由はない

246 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:59:53 ]
>>242
> ハッシュの計算結果を使いまわさないと

string input = Input();
hash = input.GetHashCode();
if(cache.ContainsKey(hash))
{
sl = cache[hash];
if(sl.Contains(input))
Console.WriteLine("一致");
}

の部分がループしてて何回も入力がある場合は意味があるって意味?

247 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:03:58 ]
俺も>>227はいい加減なこと言ってると思う。
少なくとも結論は間違ってる。
つまりハッシュを使う意味は>>216のケースではありうる。

こんな説明は無用だとは思うが、ハッシュの実装はいろいろありえて、
全文比較をするより軽くてかつそれなりに使える実装は考えうると思われる。

極端な話、>>216の用途に特化するなら文字数(バイト数)でもいい。

キャッシュしてあるデータのハッシュ値は事前に用意できることも考慮に入れれば、
全文を比較するよりずっと軽いと思う。

248 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:04:35 ]
>>245
やっぱり分かってないだろう。
文字列がかなり長いなら、ハッシュだけをディスクから読むことで効率化どきる可能性がある
って最初からそれを言ってるだけなのに。
それも可能性はあるって書き方しかしてないのに。

249 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:05:04 ]
> hash = input.GetHashCode();
GetHashCode()のコストは高いので、このhashを何回も使い回すような
状況じゃなければ、直接文字列比較した方がよい、って意味。
1回比較して捨てちゃうんだったら意味ない。

250 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:10:48 ]
C#ってネイティブコードも出せるんだっけ?



251 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:12:54 ]
長さ比較レベルなどただの文字列比較でも最初にやってる。
そして今回のケースは違う場合を調べたいのだから、一致しても結局全文検査が必要。
暗号ハッシュなら現実的に一致は無視できるが。
暗号ハッシュじゃなくて現実的に一致を無視できるようなハッシュは作れるかもしれんが、
それは全文検査が必要だということは分かるだろう?
つまり最初から全文一致検査したほうが早い。
よって、ディスクから読むなど、対象文字列の準備に負荷がかかる場合しか意味がない。

あと俺はもともと、キャッシュした場合の話も書いてる。


252 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:13:31 ]
>>249
ほうほうなるほど、そんな重いのか
適当に数千件の文字列食わせてhash使わない実装と比較してみる
ありがと

253 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:17:37 ]
>>250
もちろん

254 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:19:31 ]
>>251
>現実的に一致を無視できるようなハッシュ
そんなものは必要ないんだよ。
元のデータが違っててもハッシュ値が一致する確立が十分小さければ必要十分。
分かってるのかな

255 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:20:36 ]
>>248
ハッシュを作るには長い文字列をまずディスクからとってくる必要がある
このケースでは文字列を一回しか読まないんだからハッシュを使う意味はない

>>249
Dictionaryの方のハッシュが何回も使われている
文字列の長さ×文字列数の比較が
文字列の長さ分のハッシュ値の取得になっている
ものすごく意味あるだろ

256 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:25:51 ]
今回のケースは、それほど長くない文字列が大量に保存されていて、
最新の情報で変化があったものだけを抽出したい。
ディスクに対象の文字列がすでに大量に保存されている。

もし一つ一つの文字列がかなり長いなら、文書を保存する際にそれぞれ暗号的なハッシュを求めて
ディスクに保存しておき、比較時は最新の文字列のハッシュを計算、ディスクからはハッシュだけを読むことで、
長い文字列を大量に読み込む負荷を節約できる。
ハッシュだけならそもそも事前ににディスクからすべて読み出しておくこともできる。

だが文字列が短いならそもそも全文を事前にディスクからよんでキャッシュしておけば、
いちいちハッシュ計算するよりも全文一致検査の方が早い。

だから文字列がかなり長くないと意味がない。
文字列がかなり長いなら意味がある可能性はある。


257 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:29:10 ]
>このケースでは文字列を一回しか読まないんだからハッシュを使う意味はない

今回のケースの用途から察するに、この処理を定期的に繰り返すんだろ。
おれはその想定で書いてる。
取ってきた文字列を保存するときに、ハッシュも同時に求めて保存しておく。

変更のある文字列は一部だと俺は予想していた。
これはまあ実際には違うかもしれないな。
だからほとんどの文字列は何度も比較されるから、ハッシュを事前に求めて保存しておく意味があると考えた。
多くが変わるのなら意味はない。


258 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:29:24 ]
>>256

>>216
>チェックするため、手元にコピーしておいた過去の文字列と、たった今web上
>から落としてきた文字列を1つ1つ照らし合わせながら比較していきます。

ちゃんと嫁

259 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:33:59 ]
>>256
>いちいちハッシュ計算するよりも全文一致検査の方が早い

だからハッシュっていったっていろんな実装がありうるっていってるのに。。
例えば簡単な一例として、下位2バイトが文字列のバイト数、上位2バイトが文字列の
真ん中の文字の文字コードとする4バイトの値を生成するハッシュ関数でも
それなりに使えそうだし、これなら比較よりずっと軽そうなのは想像できるでしょ?



260 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:39:59 ]
>>258
どういうこと?

俺が想定していたのはこんな感じなわけ。

数千件のデータがあり、定期的に最新のものをとりに行く。
で変わったものだけを抽出して何か処理したい。
変わっているとしてもごく一部のデータの場合が多く、全く変わっていない場合もある。

変わっていた場合は、変わっていた文字列を最新情報として保存しなおすんだと思った。

>>216を読んでこう予想したわけだけど。
何かとんでもなく読み違えているかな?

まあともかく俺は、上のように予想して、なら文字列が長いならハッシュを利用する意味がある
可能性はあるだろうと書いた(ここでのハッシュは一応暗号的なハッシュ)。
しかし今回は文字列の一つ一つは短いらしいから意味はないと書いた。




261 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:43:37 ]
>>259
あのな、ハッシュを計算して比較して、で、どうするわけ?
変わってるものを抽出したいんだろう?
ならそんな方法でハッシュを計算しても、一致した場合、
結局全文を一致検査しないと本当に変わってないかは分からない。
※そんなハッシュ計算じゃ一致しても本当に変わってないかチェックが必要なのはわかるだろう?

ハッシュが違った場合、確実に変わっていると判断できるが、
一致した場合は結局全文の検査が必要だろうが。


262 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:47:22 ]
>>261
もともとハッシュというのはそういうものだから。
それでも>>254に書いたとおり、元のデータが違っていてもハッシュ値が一致する
確率が十分小さければ意味がある。

小学生でもわかる理屈だと思うけどなこれ。

263 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:50:34 ]
>>259
ほとんどがガラッと変わってる前提で、変わってないものを抽出したいなら意味はあるかもしれないが、
Webの情報というと、文字列の一部だけが変わってる可能性もあると予想できる。

長さが変わってる可能性は高いだろうが、それは文字列のただの一致判定でも最初にチェックされるから、
わざわざハッシュでやる意味はない。

そういう簡単なハッシュの意味が出るとしたら、文字列の多くの場所が変わってる前提
かつ、数千件の文字列の多くが変わっている場合だろう。

おれはそんな前提とは思えなかった。


264 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:54:36 ]
>>262
>それでも>>254に書いたとおり、元のデータが違っていてもハッシュ値が一致する
>確率が十分小さければ意味がある。

それには、>>263で書いたような前提が必要。
ガラッと変わっていない文字列でも一致の可能性を低くするには、
文字列の多くの場所を検査する必要があり、そうなるとただの一致検査に対する
パフォーマンスのメリットも小さくなる。
その上偶然一致する危険も無視できない。
無視できるほど小さくするには、文字列のずべてを使う必要がある。

まあ、ちょっとくらい違っても一致でいいやって思ってるなら、
そもそも話が合わないのでもういい。


265 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:57:59 ]
>>264
だから無視できるほど小さくする必要なんてないんだってば。。
アバウトな言い方をすれば、一致する確率が両者の方法のパフォーマンスの比より
小さければ十分でしょ。

そしれそれがそんなに実現困難な目標とは思えん。

266 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:59:31 ]
>>262
>>261
>もともとハッシュというのはそういうものだから。

それはハッシュテーブルなどで使う用途。
結局一致した場合は後できちんと一致比較する前提。
GetHashCodeなどの場合(といってもGetHashCodeも全文使って重いが)。

で、暗号的なハッシュは、現実的にそれが無視できるほど確率が低い。
もともと似た文字列で一致することがないように設計されているから。


267 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:07:23 ]
>だから無視できるほど小さくする必要なんてないんだってば。。
>アバウトな言い方をすれば、一致する確率が両者の方法のパフォーマンスの比より
>小さければ十分でしょ。

それが意味があるのは、文字列の多くが変わってる可能性が高い場合。
その場合は、ハッシュが一致することが少ないので、変わってることを早く確認できる。
一致した場合のみ、全文確認すればいいから。

でも何度もそうは思えないって書いてる。
多くの文字列が変化してないなら、多くの場合ハッシュは一致するんだから、
多くの場合に全文の一致検査が必要になる。
つまりメリットは少ない。

つうかな、長さの比較レベルまでハッシュに含めたら、
もはやハッシュの話を別にする意味ないだろ。
それは単なる文字列の一致検査の実装のチューニングだ。
多分そういう感覚でいってるんだな?
なんとなく話題にしてるハッシュの前提が根本的に違うことは分かったわ。


268 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:12:56 ]
初心者おいてきぼりのこの展開

269 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:19:44 ]
あとな、全文一致検査でも頭から見て違った時点で検査は終わるんだから、
ガラッと変わってれ場合はかなり速い可能性が高い。
でもガラッと変わってなければ、簡単なハッシュじゃ一致する可能性が高い。
単なる長さ検査なら全文一致検査でも既にやってる。

やっぱりあんまり効果があるとは思えない。

270 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:27:26 ]
おーい>>205生きてるか〜?




271 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:37:07 ]
ハッシュってのは衝突しないのが前提だぞ。
ハッシュが一致してたら一致、一致してなければ不一致とみなす。
そうじゃないと世の暗号や署名なんか成り立たないじゃないか。

んで、本題に戻ると、文字列比較なんかREPE CMPSBすりゃ一発だから、
単純比較のためにハッシュを利用する意味はない。IOを考慮するなら
確かに意味があるケースもあるような気はするが。

272 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:48:31 ]
まあ、今の話は暗号ハッシュとそうじゃないハッシュ、さらに、不一致をざっと確認するハッシュもどきまで話に出てきてるからね。

まあさすがに長さ検査はハッシュとは呼ばんと思うが。


273 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:51:52 ]
まあこのスレ的には
最低限の常識さえ踏まえていれば後は実際に問題になってから考えればいい

274 名前:205 mailto:sage [2008/10/19(日) 01:33:09 ]
>>270
((((((;´・ω・))))))ガクガクブルブル

275 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 02:35:53 ]
>>271
逆操作が難しいってのは暗号に使うハッシュ関数の特徴であるけれども、
それは衝突が起こらない/起こりにくいという意味ではない。

そもそも128bitとかそこらで、どれだけの長さの文字列が表現できると思ってるんだ。

276 名前:デフォルトの名無しさん [2008/10/19(日) 02:51:10 ]
Imageクラスに入っている画像から24bit/RGBそれぞれのbyte配列を得たいのですが、
GetPixelでは遅すぎて困ってます。

高速に処理するにはどうしたらいいのでしょうか?

// Image imgを
// byte[] r;
// byte[] g;
// byte[] b


277 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 02:53:37 ]
ImageにGetPixelはねーだろ

278 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:04:14 ]
>>275
長さ?


279 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:09:49 ]
MSはなんでgetpixelみたいな誰が見ても糞なやつを実装したんだ?

280 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:11:55 ]
>>278
128bitの空間でハッシュが衝突しないようにするには、
どれだけの長さまでの文字列を保持できるのか、って話なんじゃね。



281 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:27:09 ]
長さは関係ないでしょ。

282 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:28:39 ]
同じハッシュが生成される文字列がいくらあろうが(っていうか無限にあるわけだが)、
現実に衝突発生の「確率」が低ければよい。


283 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:31:14 ]
>>275
一般に確率的にしか衝突を起こせない場合、
十分なビット数があればそれでいい。
そして普通はそれを、衝突が発生しにくい、という。
そして、暗号ハッシュは衝突が発生しにくいのが大前提、と表現する、普通は。


284 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:32:47 ]
逆操作が難しいだけじゃ暗号ハッシュとして使い物にならない。


285 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 04:33:09 ]
>>276
ちょうどいい記事があった。
ttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_021/cs2_021_04.html

286 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 06:19:51 ]
コピー元の値(参照型)を変更すると、コピー先の値も変更されるようにするにはどうすればいいでしょうか。
具体的には、

class A
{
public string text;
public A(string text) { this.text = text; }
}

int main()
{
string text = "abc";
A a = new A(text);
text = "def";
Console.WriteLine(text);
Console.WriteLine(a.text);
}

で、最後の出力がどちらも def になるような動作にしたいのです。

287 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 06:23:20 ]
C#にそのような機能はありません

288 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 06:45:23 ]
なるほど、無理ですか。もう一度構造見直して考えてみます。
どうもでした!

289 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 09:43:51 ]
>>276
>>285はなんでこんな変なことしてるんだろう
普通はBitmap.LockBitsを使う

290 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 09:51:18 ]
まだ2003も出てない時期の記事だぜ?
色々定石とかできてなかったんだよ



291 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 10:55:20 ]
>>276
「MemoNyanDum」
junki.lix.jp/
こちらのサイトのここを見るといい
「C#(GDI+) : Bitmap の内部色データにアクセスする (1)」
junki.lix.jp/csgr/002ColorDataAccess1.htm

292 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 19:53:30 ]
VS2005のエディタ上でスラッシュ(/)を3回連続で打ち込むと突然

/// <summary>
///
/// </summary>

に変換されるんですがこれなんですか?

293 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 19:55:29 ]
XMLドキュメント

294 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 19:57:47 ]
XMLの書式でしたか。
ちなみにスラッシュ2回じゃ何もおこらず、3回目で変換された理由は何でしょう?

295 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:02:55 ]
2回で起こったらおちおちコメントも書いてられんわw

296 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:03:13 ]
や、ヘルプで調べろよ

297 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:17:14 ]
//の後ろにはコンパイルされないコメントが書けるとか書けないとか

298 名前:デフォルトの名無しさん [2008/10/19(日) 20:18:38 ]
ちょっと質問を。

構造体を返すメソッドを記述しているんだけどエラーが発生したときの処理に困ってる。
エラーを探知したら終了させるようにしたいんだけどコンパイルするときに
「構造体を返すメソッド書いてんだからエラーが発生したときもちゃんと構造体を返せ( ゚Д゚)ゴルァ!!」
って怒られちまった。

エラーが発生したときに返す構造体なんて全く想定していなかったわけだがこういうときって
何を返せばいいんだろうか?

ちなみに
return null;
じゃコンパイルは通らなかった。

299 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:22:56 ]
そもそもクラスでなく構造体を使う意味がわからんけど、
空の構造体でも返せばいいんじゃね?

300 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:29:12 ]
>>298
>「構造体を返すメソッド書いてんだからエラーが発生したときもちゃんと構造体を返せ( ゚Д゚)ゴルァ!!」
そんなこと言うわけないと思うが。

こんなスレで質問するご身分なんだから、コンパイラ様のお言葉を勝手に意訳せずに
「ありのまま」書くべきなんじゃないのか?




301 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:29:12 ]
値を返せないような場合は例外投げるしかないんじゃね?
でTry...パターンを追加

302 名前:デフォルトの名無しさん [2008/10/19(日) 20:29:40 ]
>>299
複数個のデータを効率よく渡そうと思って構造体を使った。
クラス的な活用方法はしないから構造体で十分かなと。

> 空の構造体でも返せばいいんじゃね?

return new myStruct();

↑こういうこと?こんな方法使っていいのかな?

303 名前:デフォルトの名無しさん [2008/10/19(日) 20:32:50 ]
>>298

intを返すメソッドで何らかの例外的な場合には0や-1を返したりするだろ。
nullを返すか?
クラスじゃなくてあえて構造体を使うなら、初期状態の構造体を返すなり
構造体メンバにフラグやメッセージを含めてそれにわかるようなもんを入れて
返したりするのがいいんじゃね

304 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:34:58 ]
ここはCスレかと

305 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:41:13 ]
エラーが起きて値が返せないなら例外を投げればいいだけだと思うが。

306 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:41:43 ]
>>302
同じ意味だけどreturn default(myStruct);の方が誤解を生まない

307 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:41:57 ]
例外投げるかnullable使えよ

308 名前:デフォルトの名無しさん [2008/10/19(日) 20:42:45 ]
> 同じ意味だけどreturn default(myStruct);の方が誤解を生まない

こんな方法があったとは・・・
C#って奥が深いな・・・

309 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:42:52 ]
Nullableは意味のあるnullに使うものだと思うんだけど

310 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 21:02:52 ]
そうでもない



311 名前:デフォルトの名無しさん [2008/10/19(日) 21:20:21 ]
戻り値が必須のメソッド内でも

throw Exception()

すれば戻り値設定しなくてもコンパイル通るの?

312 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 21:21:24 ]
やってみればいいんじゃね?

313 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 21:39:58 ]
>>311
愚問だよ。
例外を投げるって意味が分かってる?

314 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 21:48:18 ]
>>311
当たり前の事だが、正常処理の戻り値は設定する必要はあるぞ。
で、例外というのは、その正常処理を続行出来なくなった時に、
処理を強制終了させる仕組みだから。

315 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:51:55 ]
>>311
new がないからコンパイルは通らんね。

316 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:18:23 ]
System.Exception Exception(){ return new System.Exception(); }

317 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:22:06 ]
次は文末のセミコロンが無いから……

318 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:32:22 ]
C#にてDWM(WindowsVistaのAeroグラス)をウィンドウに適用する方法についての
詳細な方法や情報はありませんか?

ちょっと好奇心でやってみたらどうもうまく行かなくて突っかかっています

319 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:40:36 ]
>>318
単純な例で良ければ。
msdn.microsoft.com/ja-jp/magazine/cc163435.aspx

320 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:41:01 ]
> 同じ意味だけどreturn default(myStruct);の方が誤解を生まない

残念だが同じ意味ではない。
return default(myStruct);
の方がいいのは事実だが。




321 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:44:44 ]
>>318
ごめん>>319じゃほとんどコード無かったから、代わりにこっちを。
www.danielmoth.com/Blog/2006/06/vista-glass-in-c_17.html

322 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 02:00:10 ]
NPlotを使って散布図を描こうと考えています。
二次元配列で格納してあるデータをそれぞれX軸Y軸に対応させて
linePlot.AbscissaData = test[j,0];
linePlot.OrdinateData = test[j,1];
のように設定しfor文でjを変えてデータをどんどんグラフに点を加えさせていきたいのですが上手くいきません。
どのように設定すればよいのか、ご存知の方ご指導お願いします

323 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 02:03:17 ]
STLでよく使うイテレータってC#でも使う?

324 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 04:38:46 ]
>>322
それforで回したら上書きされて最後のデータしか残らないやん
AbscissaDataとOrdinateDataにはコレクション入れるんでないの?

325 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 06:22:22 ]
graphicsメンバに1ドットだけ描画するメソッドが見あたらないのですが、
1ドットだけ描画するにはどうすればいいのでしょうか?
drawlineで 1,1,1,1 にしても何も表示されませんでした。

326 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 09:21:58 ]
ドットなんて概念を排除してるからねー
FillRectangleで代用かな

327 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 11:41:14 ]
STLみたいな柔軟な使い方はない。
基本的には前方読み取りのみだから。


328 名前:デフォルトの名無しさん [2008/10/20(月) 12:29:36 ]
C#を始めたばかりなので上手く質問が出来るのか分からないのですが

今、平均点を求めるクラスを作り
heikinten Asan = new heikinten();
でAさんの平均点を求めることが出来るようになりました

これをAさん固定ではなく
Bさん、Cさん、、、、Zさんなど
いろいろな名前が記載されてるname.txtから人数を数えて
その人数分だけそれぞれ平均点を求めたいと思っています
人数に応じて動的にheikintenクラスをオブジェクト化する方法は無い物でしょうか

こんな方法もあるぞみたいなのがありましたら教えていただけないでしょうか
よろしくお願いいたします




329 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 12:57:55 ]
List<heikinten>
heikinten[]


330 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:01:08 ]
>>328
人数を数える方法はいいのかな?
人数がわかればその分だけList<heikinten>に突っ込めばいいんじゃないかな?
List<heikinten> people = new List<heikinten>();
for (int i = 0; i < 5; i++)
  people.Add(new heikinten());



331 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:17:24 ]
訂正:
for分のi<5は人数を入れてね

List<heikinten> people = new List<heikinten>();
for (int i = 0; i < 人数; i++)
  people.Add(new heikinten());


332 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:24:02 ]
heikintenクラスに突っ込みたくてならないのだが
StudentクラスにAverageメソッド用意するのが普通だろうと

333 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:48:30 ]
>>329->>332
思った通りのことが出来ました
ありがとうございます


人数を数える方法は 改行コードをカウントして行けばいいかなと思っていますので
ファイル操作周りを勉強してやって行こうと思います




334 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 14:02:59 ]
計算した値を返すメソッドを実装しています。

中には計算が無意味なケースもあり、そういうときはNullableの変数を返して
大元の呼び出しもとでの処理に役立てようと思っています( .hasValueフィールドで
Nullableかどうか判別がつきます)。

そこで普通の変数と、Nullableの両方を返すメソッドを書くことにしました。

public Nullable<int> Method(int x)
{
   ・・・(処理)・・・
   if (計算が無意味なケース)
   {
       return Nullable<int> null;
   }
   return (計算結果);
}

↑のように実装したところ、return Nullable<int> null; のところでエラーが出てしまいました。
そこでこの部分を、

Nullable<int> i = null;
return i;

としたところ問題なく通ったのですが、Nullableを返すためだけにわざわざNullable型の変数iを
宣言してやる必要はあるのでしょうか?なにか無駄なことをやっているような気がしてならないのですが。

335 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 14:10:58 ]
return null;
でいいんじゃないかな
return Nullable<int> null;はたとえばintの3を返すときに
return int 3;
とかやるようなもんだべ

336 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 14:27:15 ]
>>335
> return null;
> でいいんじゃないかな

( ゚д゚)!

うわぁ・・(;´・ω・)、それで通っちゃいましたorz・・・

お騒がせしてすいません(´・ω・`)

337 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 15:38:22 ]
>>334
余計なお世話かもしれんが、int.TryParseとかDictionary<T>.TryGetValueみたいに

Public bool Method(int value, out int result){
{
   ・・・(処理)・・・
   if (計算が無意味なケース)
   {
       return false;
   }
   result = (計算結果);
return true;
}

こうした方が良くないかね?

338 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 16:11:00 ]
>>337
処理を明確化する意味でもNullableを使わずにbool値を使った方がいいでしょうか?

逆にNullableを活用すべき分野はどういったところでしょうか?

339 名前:337 mailto:sage [2008/10/20(月) 16:18:23 ]
>>338
俺は使ったことないから分からんけど、たとえばPoint構造体を使って座標計算をするときに、
普通にPoint p = new Point(); とやるとX=0,Y=0の構造体ができちゃうけど、それをそのまま座標計算に
使われると困ってしまうような設計のクラスライブラリとかで、Nullable<Point>とかを使うとか。
あくまで想像だが。

処理を分岐させたいだけだったらやっぱり>>337の方法にすべきだと思う。

340 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 16:21:31 ]
out を使うのは負けだと思ってる・・・



341 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 16:22:29 ]
>>338
よく使われる例だけど
データベースなどでは、通常の(有効な)値と null(無効な値)を取る型が使われる為、Nullable型があると便利。

342 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 16:30:07 ]
まとめますと

-データベースや行列のように大量のデータを一括して扱うときにNullable型を活用すると
 処理に一貫性が出て楽

-一つ一つの処理を確実に行いたいときは戻り値にbool型で計算の可否を判定、計算結果の値は
 参照型として渡す

というのが定石ということですね?

343 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 16:37:58 ]
参照型じゃなくて参照渡しな

344 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 17:44:56 ]
すいません質問です。
publicなフィールドと両方publicな自動プロパティ、具体的に動作が異なるのはどんな時でしょうか?

345 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 17:50:36 ]
>>344
virtual とかできる。

346 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 17:57:05 ]
数字を指定したスペースに表示させたいのですが、

Console.Write("{0,10}", num);

上記の例は数字numを10桁分のスペースに右詰めで表示させよ、という意味です。
この「10桁分」のところを変数にして、状況に応じて任意のスペースにさせたいのですが
プログラムはどう書けばよろしいでしょうか?

任意のスペースを表す変数を n とします。

おそらく
Console.Write("{0, n}", num);
とするとエラーが生じてしまうと思います。
他に方法はあるでしょうか?

347 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:08:43 ]
string fmt = "{0," + n.ToString() + "}";
Console.WriteLine(fmt, num);

348 名前:デフォルトの名無しさん [2008/10/20(月) 18:09:22 ]
C#で画像ビューア作りながら勉強しているのですが、Google Picasaみたいな
画像一覧部分でのスムーススクロールってどうやるのでしょうか?

ListViewで画像一覧は出せたのですが、スムーススクロールもやってみたいのです。
画像に限らずスムーススクロールの仕組みを教えていただけるとありがたいです。

349 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:20:05 ]
>>345
逆に言えばvirtualをつけなければ、同じなんですね。ありがとうございました。

350 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:26:56 ]
>>347
どうもです



351 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:36:30 ]
プロパティかフィールドかっつう最も大きい違いがあるがな

352 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 19:57:56 ]
プロパティは参照渡しできないし値型のときはコピーが発生する
後でフィールドを何の問題もなくプロパティに変更することはできないから,
とりあえず何も考えずプロパティにしとけ

>>320
>>302の場合はまったく同じだよ
違いが出るのは対象がジェネリック型パラメータの場合のみ

353 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:01:16 ]
private void Form1_FormClosing(object sender, EventArgs e)
{
//なぜか設定の保存が出来ない
Settings.Default.SettingFont = textBox1.Font;
}

private void Form1_Load(object sender, EventArgs e)
{
//なぜか設定の読み込みができない
textBox1.Font = Settings.Default.SettingFont;
}

SettingFontはSystem.Drawing.Font型です
エラー警告メッセージ出ません
両辺を逆にしても駄目でした
複雑なコードにしたくありません
処理の早さ等は考慮しません
よろしくおねがいします

354 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:05:03 ]
>>353
Saveしてない、なんてオチではないだろうな

355 名前:デフォルトの名無しさん [2008/10/20(月) 20:10:32 ]
オレもまっ先に >>354 と同じ発想がうかんだのだが
それはあまりにも…w と思い書けなかった


356 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:18:13 ]
こっちのページですか?
下の二つのイベントハンドラを有効にして
いま下の怪しいところにSave();を足してみました

private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
// SettingChangingEvent イベントを処理するコードをここに追加してください。
}

private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
Save();
// SettingsSaving イベントを処理するコードをここに追加してください。
}

これでもエラーでませんでしたが
保存できていません、もしくは読み込まれていませんでした
>>353のコードにも何か書くのですか?

357 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:19:30 ]
>>355
勇気を持って全てをさらけ出してくれませんか?
わからないんです

358 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:26:28 ]
Properties.Settings.Default.Save();
を書いてなけりゃSaveされんだろう?ってことだったんだけど。


359 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:39:09 ]
>>358
private void Form1_FormClosing(object sender, EventArgs e)
{
//なぜか設定の保存が出来ない
//↑出来ました
Settings.Default.SettingFont = textBox1.Font;
//今、感動して涙が止まりません
Settings.Default.Save(); //Saveって本当に良いものですね
//ありがとうございました
}

360 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 21:03:33 ]
ワロタ



361 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 22:17:35 ]
>>321
レスありがとうございます。
DWMを利用するまでは自分でも何とか検索して出来たのですが、ボタン等のコントロール上の黒色が
透明化されてしまう、という問題があったので、それについて調べた所

ttp://piece.coron.jp/weblog/archives/2007/05/14/012953/
こちらのサイトで、UseCompatibleTextRenderingをtrueに変更してやる方法、というのがあったのですが
どうも使い方が分かりません、Program.csにてApplication.SetCompatibleTextRenderingDefault(true);に
してみたのですが、全く状況が変わりません

自分のレベルではまだこのようなことをするのは早いのでしょうか?
DWMは情報が少なすぎて困っています・・・

362 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 22:21:42 ]
>>361
UseCompatibleTextRenderingはButtonやLabelとかの一部のコントロールにプロパティとして存在する。

363 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 11:56:48 ]
DataGridViewのColumnsプロパティのようなものを自作するにはどういう方法が一般的なのでしょうか?
やりたいことは、Columnsのようにプロパティ名[インデクサ]が実装したいのと
Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。

初めはColumnsクラスにイベントを作って親クラスに知らせる方法を考えたのですが、
その方法だと外からColumnsのイベント一覧が見えてしまいます。

そもそもそんなやり方は一般的ではないのでしょうか?宜しくお願いします。

364 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 12:06:59 ]
普通にコレクション作ればいいじゃん
> Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。
このVisibleの変更はDataGridViewColumn.Visibleの変更であってColumnsとは関係ない

まあ実際には大抵internalでDataGridView持ってたりするけどな

365 名前:363 mailto:sage [2008/10/21(火) 12:34:44 ]
ありがとうございます
早速試してみたのですが、internalを指定しても外部から見えてしまうのですが…

[test1.cs]
public class Data
{
  internal Parent parent;
}

[test2.cs]
Data test=new Data();
test.parent=null; ←通ってしまう

internalって別ファイルからは参照できなくなると理解したつもりなのですが違うのでしょうか?

366 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 12:37:45 ]
別アセンブリ。
exe/dll単位。

367 名前:363 mailto:sage [2008/10/21(火) 12:44:57 ]
ありがとうございます。
すると同アセンブリ内では隠しようがないんですね。フレンドもないようですし…
となるとデータクラスのコンストラクタで親クラスを渡すしかなさそうに思えます。

ただ、データクラスのプロパティ変化時に親クラスのプライベートな処理を走らせることも難しそうですね^^;
DataGridであればColumnクラスのWidth等変更時にグリッドの表示幅が更新されたりしていますが
あれはどういったメカニズムなんでしょうか…

さらに言えば、コレクションクラスにはデフォルトでRemoveAtが実装されているようですが、
これでは外部から削除できてしまいます。外部から要素数の変更はさせたくない場合、
コレクションクラスの実装は向かないのでしょうか…

混乱してきた・・・・長々とすみませんm(_ _)m

368 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 12:50:59 ]
> ただ、データクラスのプロパティ変化時に親クラスのプライベートな処理を走らせることも難しそうですね^^;
> DataGridであればColumnクラスのWidth等変更時にグリッドの表示幅が更新されたりしていますが
> あれはどういったメカニズムなんでしょうか…
別にevent使ってもいい。
DataGridViewColumn.Widthなら多分DataGridViewのinternalなメソッド呼び出してる。
いやまあ再描画だけならInvalidate呼び出すだけだけどな。

> さらに言えば、コレクションクラスにはデフォルトでRemoveAtが実装されているようですが、
> これでは外部から削除できてしまいます。外部から要素数の変更はさせたくない場合、
> コレクションクラスの実装は向かないのでしょうか…
やらせたくないなら例外投げればいいだけ。

369 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 13:09:38 ]
なるほど、例外を投げるという手がありますね。参考になります。
イベントで実装もありかと思うのですが、何れにしろ同アセンブリ内なので
外部クラスからイベントの定義も出来てしまいますね。そこだけが問題です。

しかし実装自体は出来そうなので頑張ってみます。ありがとうございました!

370 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 13:57:37 ]
0以上の整数しか使わないような変数に積極的にuintを使うのはいい方法でしょうか?
それとも整数は特殊な事情がない限りintで統一するべきですか?



371 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:22:31 ]
符号なし整数はCLS非準拠なので他の言語で使えないかもよ、と
実際VB7では扱い面倒だったしな

private/internalならお好きに

372 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:00:49 ]
2次元配列を作成し
ARRAY[*,0]に得点を入れて
ARRAY[*,0]の順番は変更しないで
ARRAY[*,1]に順位を作成したいと思いるのですがいい方法が浮かばないで困っています
皆さん何かいい方法は無いものでしょうか

373 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:01:27 ]
>>371
> 符号なし整数はCLS非準拠なので他の言語で使えないかもよ、と

おお、そういう落とし穴があったとは・・・
int型に統一させていただきますm(_ _)m

374 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:03:30 ]
>>372
心底意味が分からん。
具体的に値入れて説明してくれ。

375 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:13:44 ]
Console.Writeline("hoge");

で白文字以外にカラフルな文字を表示させることってできませんか?

それが無理なら反転文字とか、アンダーライン文字とか、目立つ文字を表示できないでしょうか?
文書の一部分を強調表示したいんです。

376 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:18:49 ]
>>374
分かりにくくて申し訳ないです
詳しく書くと

int[,] array = new int[8,2];
array[0,0]=100;
array[1,0]=10;
array[2,0]=80;
array[3,0]=20;
array[4,0]=90;
array[5,0]=40;
array[6,0]=60;
array[7,0]=30;
という得点が入ってるとして
得点によって順位を決めて隣の要素に入れて行きたいと思っています
array[0,1]には1
array[1,1]には8
array[2,1]には3
array[3,1]には7
array[4,1]には2
array[5,1]には5
array[6,1]には4
array[7,1]には6
といった感じに、、、、
まだ分かりにくいかもしれないのですが
何かいい方法無い物でしょうか


377 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:40:49 ]
>>375
Console.ForegroundColor = ConsoleColor.Red; とかで切り替えればいいかも。

378 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:49:39 ]
>>377
ありがとうございます、無事変えられました

379 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 16:09:19 ]
>>376
static void setRank(int[,] array)
{
SortedList<int, int> sl = new SortedList<int, int>();

for(int i = 0; i < array.GetLength(0); i++)
{
sl.Add(array[i, 0], i);
}
int rank = 1;
foreach(var kvp in sl.Reverse())
{
array[kvp.Value, 1] = rank++;
}
}
こうかな、なんかもっとうまく書けそうで俺には書けなかった

380 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:20:37 ]
>>379
こういうのって、「もっとエレガントにかけるかも」って思ってしまうよな…w



381 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:21:25 ]
複数の計算結果を配列に格納する予定なんですが、あいにく得られる計算結果の順番と
配列の順番が逆だったりします。というわけで計算結果は配列の先頭からではなく最後尾から
先頭に向かって格納する必要があるわけですが、これを実現するには


a) とにかくもうひとつ仮の配列(同サイズ)をつくり、何も考えずに先頭から計算結果を
  詰め込む。全ての計算結果が出たところで本来の配列に後ろから値をコピーしていく。

b) 配列の要素数を表すstaticな変数を準備し、その変数を参考に配列に書き込む場所を特定する。
  配列に書き込むたびにそのstaticな変数を -1 することで保存すべき配列の位置を特定することができる。

c) 配列をNullable型として宣言し、書き込む位置はnullが格納されている最後尾と決めれば
  後ろからデータを格納することができる。

d) c)の亜種。配列を用意し、あり得ない数字(0とか-10000とか)で初期化する。
  あり得ない数字の最後尾からデータを格納していけば後ろからデータを詰めていったことになる。


ざっと考えて上記のa)〜d)が思いついたんですがどの方法がいいでしょうか?
あるいは他に方法がありますか?

382 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:33:27 ]
初めから要素数が分かってるならbで十分だし(ていうか何故static?)
そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

383 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:40:32 ]
labelのTextが増えたとき、左に伸びていくようにするには
どうすればいいでしょうか?

例えば、
label1.AutoSize=true;
label1.TextAlign=TopRight;
for(int i = 0; i < 10; i++) label1.Text += "あ";
では右に伸びていってしまいました。

384 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:40:41 ]
>>382
> 初めから要素数が分かってるならbで十分だし(ていうか何故static?)
> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

もしかしてReverseってList<>だけでなく普通の配列にも使えたりしません?
要素数は分かっているので何も考えず計算結果を配列に突っ込んだ後
最後にReverseかければa)〜d)のようなややこしいことをするまでも無い気が・・・

385 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:44:23 ]
もしかしなくても、.NET 3.5では配列はおろかIEnumerable<T>ならReverseが使える。

386 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:35:45 ]
>>382
> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

List<>型に対してReverseはどう使えばいいでしょうか?

List<int> a;

に対して

Array.Reverse(a);

としたらエラーが返されてしまったのですが。
ちなみに一般的な配列なら問題ありませんでした。

387 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:39:17 ]
a.Reverse();

388 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:50:32 ]
>>387
ありがとう( ´∀`)

389 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:36:09 ]
メソッドに変数を渡して、そのメソッド内で変数を書き換えてかえしてもらうとき
値型なら問答無用でout/refを付ければいいとして、参照型の変数のときはどうすればいいでしょうか?

参照型なら別にout/refは付けなくてもメソッド先での変更はちゃんと反映されるかと思いますが・・・

390 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:42:15 ]
どうしたいかによるとしか



391 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:45:00 ]
例えば、参照型でもそれ自体を書き換えるなら必要。
void f(out object o)
{
o = new object();
}

392 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:56:44 ]
newするかしないかで使い分ければいいということですね

393 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 20:23:58 ]
使い分けというのは変だな
どうしても必要な場合以外は基本的に参照渡しは使わない,でいいと思う

394 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 00:04:42 ]
>>379-380
一次元配列ならこれだけなんだがなぁ

var array = new[] { 100, 10, 80, 20, 90, 40, 60, 30 };
var indices = Enumerable.Range(0, array.Length).ToArray();
Array.Sort(array, indices);


てか、誰か指摘してやれよ
>>376の問題に多次元配列を使うこと自体が愚策だと

395 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 00:07:16 ]
特別な事情があるか、どうせそのうち丸ごと捨ててやりなおすかと思ってさ

396 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 01:50:42 ]
C++と違ってC#は構造体にもメソッドを定義できるようにされていると聞きますが、
わざわざクラスではなく構造体でメソッドを定義できるようにした意味は何でしょうか?

メソッドを書くならクラスにするよう統一しても良かったと思いますが・・・

397 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 01:58:07 ]
わざわざメソッドが定義できるのをクラスに限定するメリットがわからん


398 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 02:09:36 ]
それ以前にC++でもstructにメンバ関数書けるんだが。


399 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 02:26:02 ]
C++の場合はデフォルトのアクセス制限がpublicかprivateかの違いしかない。
他は全部classとstructは一緒。

>>396はC#におけるクラスと構造体の違いを知りたいの?

400 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 03:17:06 ]
C#では構造体とクラスはこれだけ近い存在にされてるのになぜあえて分けているのかが分からないんです。



401 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 05:02:37 ]
話し聞いてないな。
C++においての違いはほぼ無い。
C#においての違いはそれよりある。

402 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 08:35:52 ]
>>400
そもそも、C++の構造体にもメソッドが定義できるわけだが。

403 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 08:51:43 ]
C++ は元々は C との互換性のために struct キーワード残しただけかと。
結局それが、慣例として使い分け方ができて、
C# では言語的にも値型と参照型で使い分けるように変化。

404 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:16:03 ]
デフォルトのアクセス権がちがうだけだよね。あと、慣例ってのは重要なキーワードだな。

405 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:19:57 ]
C++/CLIみたいにref classとvalue classにして
呼び方も参照クラスと値クラスにしたほうがわかりやすかったかもね

406 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:24:33 ]
なんかC#の話じゃなさげなんだけど聞いてくれ。
デスクトップのアイコンにファイルをD&Dすると
開くアプリケーションとかあるでしょ?あれをやりたいんだけど
C# D&DとかでググるとアイコンへのD&Dじゃなく
開いてるウインドウへのD&Dばかりがみつかるのさ。

だれか解説してるサイトか、これぞ、みたいな検索ワード
教えてくれないかなーっと。

407 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:27:01 ]
static void Main(string[] args) { Console.WriteLine(args[0]); }

408 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:34:08 ]
>>407
うわーい。ただの引数になるのか。
確認しますた。おばかでスマソ。

409 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:04:42 ]
string[]型配列に処理した結果を参照で返すメソッドを作っています。
返す結果の有無を判別させるためにbool型をreturnします。

private bool Hoge(out string[] Str)
{
  ・・・・(処理)・・・
  return true/false;
}

この際、Strに返す結果が無いとき(つまりfalseをreturnするとき)、コンパイラに
「out宣言したStrを空のまま返すな( ゚Д゚)ゴルァ!!」としかられてしまうんですが
こういうときはみなさんどうされますか?
falseを返すときでも適当な文字を入れてお茶をごまかすべきでしょうか?

410 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:09:22 ]
TryParseパターンではnull(default(string[])のほうがいいかも)を入れるのが普通みたい



411 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:14:02 ]
>>410
Str = null(default(string[]);
としたうえで return false; すればよろしいんですね?

412 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:14:34 ]
配列を返値にして要素数0の配列を返す
要素数0に意味があるなら仕方ないのでnull返す

413 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:18:58 ]
TryParseパターンがfalseを返す時は「初期化されていない」って意味だから使えない値を返すべき
str = default(string[]);だよ (str = null;と同じ意味)
値型かジェネリック型の場合は前者だけど参照型なら後者でいいと思う

414 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:24:33 ]
みなさんどうもです。
まとめますと、

1.要素数を0の配列をつくりこれを返値にする : Str = new string[0]: return Str;

2.参照型だからnullを代入して返す : Str = null;

のどちらかということですね。

>>413
値型の場合は
default();
を採用すればいいと言うのは初耳でした。以前値型の変数にnullを代入して返そうとした
んですがコンパイラに蹴られてしまいました。代わりに default(「値型」); とすればいいとは
知りませんでした。結構有名な手法なんですか?

415 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:37:08 ]
default(値型)はnew 値型()と同じなんだけど後者はなんか値に意味がありそうで嫌でしょ
defaultは本来はジェネリックのために導入された機能で,
default(T)は型パラメータTが参照型のときはnullを返し,Tが値型のときはnew T()を返す

416 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:50:39 ]
なるほど、.Net2.0からの付加機能でしたか>ジェネリック

417 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:16:24 ]
Control.BringToFront()が呼ばれたときに発生するイベントってないのかな?

418 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:58:44 ]
WM_CHILDACTIVATE

419 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:08:08 ]
>>418
Win32APIは出来るだけ使いたくないのでBringToFrontをオーバーライドすることにした。


420 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:12:55 ]
や、WndProcのオーバーライド(またはNativeWindowでのメッセージフック)
だから純粋なマネージドコードだが。



421 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:13:39 ]
"abc123" -> ok
"abc:12" -> ng
みたいにファイル名が有効か判断するメソッドってある?
なければ例外で処理すればいいんだけど

422 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:21:24 ]
Path.GetInvalidFileNameChars とかあるけどドライブ指定できない時点で厳密ではないな
やはり基本は実際に作ること
:だってNTFS的にはパスとして有りなんだぜ .NETからは使えないけど

423 名前:デフォルトの名無しさん [2008/10/22(水) 19:40:00 ]
C#でできたソフトってどんなのがあるのでしょうか?
また、普通ソフトってどの言語で作られているものなのでしょうか?
(ここでいうソフトってのは、市販のソフトだったり、フリーソフトだったり。)

424 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:52:45 ]
>>423
マジレスすると実行ファイル開いて
はじめの一行(#!〜)に
perlってあればperl
shってあればシェルスクリプト
ruby(ry

Delphiで作ると Delphi臭がするのはなぜだろうw

425 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:50:02 ]
同じクラス内に最後と引数の個数以外が全く同じメソッド1,2があるとします。

void Method1(int i)
{

・・・・・(うり二つ)・・・・・

・・・(ココだけ違う)・・・・
}

void Method2(int i, intj)
{

・・・・・(うり二つ)・・・・・

・・・(ココだけ違う)・・・・
}

最後の (ココだけ違う) と、引数の個数の違いだけですが律儀に2つのメソッドを記述する必要があるでしょうか?

426 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:55:22 ]
private void うり二つ(int i) { うり二つ… }
void Method1(int i){
 うり二つ(i);
 ここだけ違う
}
void Method2(int i, int j){
 うり二つ(i);
・・・(ココだけ違う)・・・・
}

427 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:01:31 ]
>>426
な、なるほど・・・

428 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:31:01 ]
コンストラクタでよくあるパターンだよなw

429 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 23:26:08 ]
> 値型の default(T), new T()
Point構造体とかだと明示的にEmpty返すことはあるな

>>421-422
確か、Path.GetFullPathかFileInfo使えという結論だったはず
パスの有効性をチェックする非公開メソッド(確かinternal)があって、
結局はそれが呼ばれるので、最も副作用が無いもの使うのが良いという話

>>423
> C#でできたソフト
VS, SSMS, etc.
SSMS(2005)はよく落ちる(.NET標準のエラーハンドラが出る)からすぐ分かるよ



430 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 23:55:51 ]
参照型はnewしないと使えないって教えられたんですが
string型は参照型なのにnewしなくても使えるのはなんでですか?



431 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 23:57:31 ]
C#とCLRに組み込まれてるから
簡単に言うと,特別だから

432 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:01:09 ]
なるほど
ありがトン

433 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:06:41 ]
そんなすっとこどっこいな回答で納得しちゃダメw
実際にはnew(インスタンスの生成)しなくても使えているわけではなく、
インスタンスの生成がラップされている、つまり間接的に生成してるだけ。

つまり、別に文字列以外のクラスでも同じように見かけ上newを隠蔽することはできる。

434 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:08:25 ]
( ・∀・)つ〃∩ ヘェーヘェー

435 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:08:43 ]
>>433
ちげーよ。文字列ってのはCIL上はプリミティブ型で、
それを巧妙にクラスに見せかけてあるだけ。

436 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:12:29 ]
>>435
わけのわからん混同しすぎ。
System.Stringが様々な場面で特別扱いされるという事実と
>>430の話は直接関係がない。

437 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:14:36 ]
string str = "Hello World";がなんでnewしなくていいのかという話なら
暗黙にnewされてるからというのは間違いで「特別扱いだから」としか答えようがない

438 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:16:38 ]
String str = new String("Hello World");で統一すれば惑わされずにすむ


439 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:18:35 ]
javaと違ってC#ではできないよそれ

440 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:19:37 ]
new は実行時にヒープにオブジェクトを作ってそれへの参照を返す。
文字列リテラルの場合はコンパイルの段階でメタデータに格納しておき、
実行時にはその文字列への参照を返す。
こういった仕組みの相違が文法にも反映されている。

たぶん。



441 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:19:58 ]
String str = new String("Hello World".ToCharArray());
うはは、無駄無駄無駄!

442 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:24:16 ]
>>436
>>435>>430ではなく>>433へのレスに見えるんだが

443 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:25:32 ]
>>440

違う
stringはCLIの組み込み型
string定数を読み込むIL命令があるの

444 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:25:53 ]
変数sに代入したアルファベットをtextboxに出力するのってどうすればいいんですか?

445 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:28:46 ]
>>443
> string定数を読み込むIL命令があるの
ldstr だよね。通常の参照型は newobj 。
別に>>440で間違ってないと思うけど、どこか勘違いしているなら指摘お願い。

446 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:29:51 ]
俺には>>440>>443が同じことを言っているように見える。

447 名前:443 mailto:sage [2008/10/23(木) 00:30:31 ]
ああすまんミスリード
コンパイラの話してるのかと思った

448 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:32:38 ]
textbox.Text = s;

449 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:46:35 ]
むしろ全部暗黙newすべき

450 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:57:00 ]
せんでよか



451 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:00:44 ]
ldstrでインターンプールから読むだけ。
stringインスタンスは、インターンプールにまだなければ、
JIT時に実体が作成されインターンプールに保存される。





んじゃないかな?


452 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:02:17 ]
正規表現で文字列を表現しようとしているんですが、

@"(文字列)"

↑の(文字列)の部分に " マークが入っている場合はどう対処したらいいでしょうか?
エスケープシーケンス\をしても認識してくれません。

たとえば↓のような例の場合です。

string str = @"<a href="www.google.com" target="_blank">";

453 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:03:43 ]
@使うな

454 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:03:54 ]
>>452
@"""文字列"""

455 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:06:23 ]
>>452
その質問に答えるのは簡単だが、これ読んで他のことも理解した方がためになると思う。
www.microsoft.com/japan/msdn/columns/drguinet/drguinet5_update.aspx#drguinet5_update_topic4

456 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:11:36 ]
失礼しました。
@は使わない方向で頑張りますorz・・・

457 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:15:03 ]
使っていいんだが。
>>455は読んだか?

458 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 02:45:47 ]
>>457
正規表現を使いたいなら@は使うな、ということですよね?

459 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 02:55:58 ]
  _, ._
(;゚ Д゚)


460 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 03:01:23 ]
吹いた



461 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 06:00:49 ]
private void系を並び替える機能ありますか?

462 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 10:58:01 ]
>>461
List.Sort

463 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:28:56 ]
グラフ(散布図)を作りたいのですが、よくわかりません。
書店に置いてある本は、線や円の描き方は載っているものの、グラフ作成の方法までは載っていないのがほとんどでした。
NPlotも試してみましたが、NPlotの使い方が分からず挫折しました。
グラフの描き方について詳しく書かれている本があれば、教えて欲しいです

464 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:39:04 ]
>>463
座標系とプロットしたい値、それを描画方法する方法が全てじゃない?
全て知ってると思うけど

465 名前:デフォルトの名無しさん [2008/10/23(木) 19:18:46 ]

YouTube - 9.11真相究明講演会 ベンジャミン・フルフォード講演ダイジェスト
jp.youtube.com/watch?v=mQ_lVOpINOE&feature=related

911 Truth Tokyo 2008 (テロ事件真相研究-東京日本) -MP Fujita Yukihisa 藤田幸久
jp.youtube.com/watch?v=aV3TEEwSdiU&feature=related
9.11真相究明講演会 藤田幸久議員講演ダイジェスト
jp.youtube.com/watch?v=8tS9DnhfUeI&feature=related

9.11真相究明講演会 きくちゆみさんダイジェスト Part1-2/2
jp.youtube.com/watch?v=qu1LfwluTjU&feature=related
jp.youtube.com/watch?v=zRwFcSm_uTE&feature=related

9.11真相究明講演会 3人の対談・ラストメッセージ
jp.youtube.com/watch?v=I6Sl3HZbxt0&feature=related

YouTube - 9.11真相究明講演会 ベンジャミンvs藤田議員 ダイジェスト版 Part 12
jp.youtube.com/watch?v=s3HPMAG5DKk&feature=related
jp.youtube.com/watch?v=quHyQL-MbNA&feature=related


466 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:19:17 ]
コピペ君って馬鹿だな、まで読んだ。

467 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:31:05 ]

YouTube - グリフィン博士来日!911真相究明国際会議(2008113イベント)CM
jp.youtube.com/watch?v=DmoUVxAMAlc&eurl=http://kikuchiyumi.blogspot.com/


468 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:32:08 ]
コピペ君って馬鹿だな、まで読んだ。

469 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:47:00 ]
書店の本でおすすめを教えてください

分厚いのではなく萌えるC#的なのでお願いつかまつります!

470 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:51:23 ]
薄手のエロ本片手にリッチャーのC#本でも読んどけ



471 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:55:06 ]
そいやHead First C#が出たみたいだな
いつものように分厚いだろうし萌えもしないだろうけどな

472 名前:デフォルトの名無しさん [2008/10/23(木) 21:34:34 ]
: error LNK2019: 未解決の外部シンボル _prntf が関数 _main で参照されました。
: fatal error LNK1120: 外部参照 1 が未解決です。

VS2008でC言語のプログラムを作ったのですが、コンパイルしようとしたら↑のような
エラーが出てきてしまいました。どうすればよいのでしょうか?

473 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:35:54 ]
C#とCは違う言語だ。

>>472 それはprintf()のつづり間違いだろ。

474 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:36:00 ]
>>472
Cのスレで聞け。

475 名前:デフォルトの名無しさん [2008/10/23(木) 21:38:44 ]
>>473-474
失礼しました

476 名前:デフォルトの名無しさん [2008/10/23(木) 23:05:27 ]
C#2005ExpressEditionでアプリケーションを実行するとDataGridViewに
自動的にデータが読み込まれるんですが、これの接続はすぐ切れるんですか?

477 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:27:56 ]
今の子供たちの切れやすさと同じです

478 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:53:33 ]
C#2008Expressでネイティブコードを出すにはどうしたらいいですか?

479 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:56:27 ]
ビルドプロセスを弄ってC++のコードをコンパイルできるようにする

480 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:57:17 ]
>>478
C#でC++コンパイラを書く



481 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 00:14:12 ]
>>478
無い。
むしろ.NETをネイティブだと思うんだ。

482 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 00:26:25 ]
CodeDOMやReflectionを使えば
C#コードをManaged C++コードに直すことは出来そうなんだがな
Managed C++にしたところで、Console::Writeがprintfになるわけでもないけどね

>>478
ngenじゃだめ?

483 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 00:31:58 ]
ネイティブコンパイルの話は定期的に出るね。
GC、型システム、BCL(基本クラスライブラリ)をそのままにしてネイティブコンパイルしても、
ほとんど効果がないばかりかマイナスになる可能性が高い。
GC、型システム、BCLを別のものに置き換えればそれはもうC#ではない。
前者のアプローチはjavaにたいしてgcjがやってみたのだがさっぱりなのはご存知の通り。

484 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 00:48:17 ]
ngen.exeをRunに登録させればいいの?

485 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 01:04:27 ]
ngen.exe したからといって C/C++ で作ったような exe が出来上がるわけじゃないぞ
依然として実行には .NET Framework が必要

486 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 01:08:00 ]
フォルダにテキストファイルがあるときに自動的に起動したいと思います。

string[] files = Directory.GetFiles("my documents", "*.txt", SearchOption.AllDirectories);
foreach(string file in files) {
if ( File.Exists(file) ) { //fileがあるときだけと書いたつもり。
Process.Start("Notepad", file); //メモ帳を起動する。
}}

で、コンパイルは正常に通るのですが、ifのところでファイルがないという例外が出ています。
全体をtry〜catchで包むと、ファイルがないエラーは発生しませんが、今度は、ファイルがある場合2回起動します。
なんでこんなふうになっちゃうのでしょう?


487 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 01:26:04 ]
なんて例外が出たのか
try-catchでどう囲んだのか

488 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 01:27:40 ]
言葉が足りなかったか
ソースとメッセージをそのまま貼ってね

489 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 02:11:10 ]
>>478
何のために?
つか、実行時はネイティブに変換されるんだが、それじゃダメなのか?

490 名前:476 [2008/10/24(金) 04:01:56 ]
>>477ありがとうございます。すぐ切れてしまうのですね。

あれから、プログラムを組んでまた疑問点にぶち当たりました。。お助けを・・
DataSetとDataGridをツールボックスから貼り付けてDataSetで指定したデータベースを
データグリッドのデータソースとして登録しました。Formがロードされると
一覧が表示されるのですが、フォームに貼り付けたDataSetオブジェクトにその後アクセスすることは
不可能なんでしょうか?

やりたいことは、フォームが表示される→ボタンを押すともう一度そのデータを参照・更新したいのですが
フォームがロードされたときのDataSetオブジェクトにアクセスできれば良いと思うんですが無理ですか?
やりたいことを果たすためには、ButtonのOnClickメソッドの中でDataSetオブジェクトを作成して
もう一度データベースからデータを取得する必要があるのでしょうか?

このフォームに貼り付けたDataSetオブジェクトも色々なソースファイルを眺めてもどこにもでてきませんので
利用する事は不可能なんでしょうか?

意味がわかりにくい文章ですみません。もし分かる人がいたらおしえてください。



491 名前:476 [2008/10/24(金) 04:08:49 ]
事故解決しました。。FormLoadに書いてあった。。

すみませんでした。

492 名前:476 mailto:sage [2008/10/24(金) 04:24:50 ]
すいません。。やっぱりわかりません。
FormLoad時以降もフォームに貼ったDataSetオブジェクトにはデータがいっぱいつまっているのですか?

もし、FormLoad以降もデータが蓄積された状態ならば、私は他のフォームからそのデータセットを使いたいんですが、
private宣言されています。publicにかえちゃっていいですか?

すみませんがよろしくお願いします。もう寝ますので明朝みます。

493 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 07:49:01 ]
教えてください。
C# uniq
で、
d.hatena.ne.jp/siokoshou/20050408
のソースが見つかったんだが、これでテキストをuniqするには、
string text = File.ReadAllText("test.txt",Encoding.Default);
text = Siokoshou.ArrayListWithUnique.Unique(text);
File.AppendAllText("test2.txt" , text, Encoding.Default);
じゃだめなん?
コンパイルすると、
エラー 1 引数を '1' 個指定できる、メソッド 'Unique' のオーバーロードはありません。
といわれる。たしかに、Uniqueには引数の指定がないが…。


494 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 08:04:12 ]
>>493
だめ。

495 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 08:29:05 ]
イエスノーキャンセルダイアログで

if (MessageBox.show(なんとか) == DialogResalt.Yes)
{
はいが押されたときの処理
{
else if ==DialogResalt.No //ここどういうふうに書くの?
{
いいえが押されたときの処理
}
else
{
キャンセルの処理
}

496 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 08:59:53 ]
DialogResult result = MessageBox.show();

if(result==DialogResult.Yes)
else if(result==DialogResult.No)

じゃダメ?

497 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 09:03:20 ]
一時変数に突っ込みたくないならそこ if じゃなくて switch にするって手もあるけどやめとけ

498 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 09:19:36 ]
>>496-497
ではDialogResultの処理はifで統一しときます
ありがとうございました

499 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 10:35:13 ]
IntPtrって何の略?
Int32やInt64と同じように,ポインタサイズの整数型ってこと?

500 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:10:56 ]
>>499
まんまInteger Pointerの略で良いと思う。
システムによってポインタのサイズとint型のサイズは必ずしも同じではないから、区別されてる。



501 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:20:11 ]
起動しているプロセスを、読み込んでいるファイル名込みで取得するにはどうしたらよいですか?
たとえば、Notepadで、orange.txtというファイルを読み込んでいる場合、
if(Process.GetProcessesByName("Notepad.exe").Length == 0)
で、Notepadが起動していることはわかります。
同時にorange.txtと、banana.txtというファイルを読み込んでいる場合に、
区別して扱いたいです。


502 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:25:56 ]
notepadならMainWindowTitleで分かるんじゃない?

503 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:11:38 ]
スマートな方法はないわな

504 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:18:48 ]
>>492
別に良いんじゃないの?
デザイナーで貼り付けたDataSetなら、直接ソースを書き換えるより
デザイナーでDataSetのオプションのModifiersをPublicにする方が良いんじゃね?

505 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 14:45:25 ]
using System;
namespace TestApplication {
class Test {

private string message;

public Test(string message) {
this.message = message;
}

public void Say() {
Console.WriteLine(message);
}

}
}

上記のコードをCSharpCodeProviderでコンパイルしてインスタンスを作成し、Sayメソッドを呼び出すことはできますでしょうか。
ネット上ではstaticなメソッドの呼び出しとかはよく見るのですが、このケースについては見つけられませんでした。

506 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 14:54:17 ]
Activator.CreateInstance

507 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 15:00:34 ]
>>505
出来るはず。インスタンスの作成はActivator.CreateInstanceで出来る.

using System.Reflection;

Assembly asm = hogehoge.CompiledAssembly
Type classType = asm.GetType("myNamespace.MyClass");
Object = Activator.CreateInstance(classType);

508 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 15:20:30 ]
>>493
uniqになってないしw
ついでに、Enumerable.Distinctがある今ではそいつは不要だな

509 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 15:40:48 ]
>>502
ばっちりでした。
ありがとうございます。


510 名前:デフォルトの名無しさん [2008/10/24(金) 16:24:19 ]
質問です。

Microsoft Visual C# 2005 Express Edition で開発しているのですが、変数やメソッドを使用している
箇所で右クリックして、「定義へ移動」や「すべての参照の検索」を選んだとき、同一ソリューションの
他のプロジェクトにあるクラスは検索の対象にならないようです。

ソリューション単位でビルドしているのにこれは変だと思い、いろいろ設定を探したのですが、
見つかりませんでした。

どのようにすれば、他プロジェクトを検索してくれるようになるのでしょうか?

よろしくお願いします。



511 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 17:20:07 ]
>>508
Enumerable.Distinctですか。

public static IEnumerable<TSource> Distinct<TSource>(
this IEnumerable<TSource> source,
IEqualityComparer<TSource> comparer
)

というのですが、例示するとどうなりますでしょう?


512 名前:492 mailto:sage [2008/10/24(金) 19:54:54 ]
>>504
デザイナーで切り替えができるんですね。初めて知りました。というよりC#が初めてだ揉んで・・
Javaの場合はデータをカプセル化して、メソッドでデータをset/getしてまして、
DataSetをカプセル化してメソッドでDataSetをset/getするのもスマートなやり方じゃないなあ、
でもソースコードでpublicにするのもちょっと違和感がありまして、一番オーソドックスな方法を知りたかったのです。
デザイナの方で色んなformから参照できるようにすることができるなら、それが一番しっくりきますね。

一番いい方法を教えていただき、感謝しています。本当に知りたかったのでうれしいです。
どうもありがとうございました。

513 名前:デフォルトの名無しさん [2008/10/24(金) 20:29:38 ]
>>504
フォームのコントロールのmodifierがデザイナから変えられるって俺も
初めて知った。

つーか、492と同じくコントロールをpublicで外部に公開するのは作法として
よろしくないもんだと思って一所懸命コントロール操作用のメソッドを書いてた

public void IncrementProgressbar(int i)とか…



514 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:35:35 ]
作法云々じゃなくて普通のプログラミングセンスしてれば
そんなことをしたいとは思わないはずだと思う。

逆に言えば、そんなことをしたいと思うのは99.99%どこか設計がオカシイんだよ。

515 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:56:02 ]
IncrementProgressbar
こんなもんコントロールをpublicにするのと変わらん
フォームの「役割」を考えるんだ

516 名前:デフォルトの名無しさん [2008/10/24(金) 21:00:52 ]
邪悪なBSDで邪悪なDephiを用いて邪悪な.NETアプリ
pc11.2ch.net/test/read.cgi/mac/1224839401/
消しゴムじゃないMONOを使ってみるスレ 2個目
pc11.2ch.net/test/read.cgi/tech/1100616350/

517 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:08:16 ]
do〜while文でループ処理をしています。
ループ処理を実行し始めてから次のループ処理を実行するまで最低でもxxx分はあけておきたい
という場合にはどうプログラムを組んだらいいでしょうか?

ループ処理が終わった時点でxxx分経っていなければ、どこかでxxx分になるまで待つ
必要があります。反面一つのループ処理にxxx分以上かかった場合は待つことなく
即次のループ作業に入らせたいです。

518 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:10:47 ]
>>517
ループの先頭で、clock()とかで時刻をとって、ループの最後で一定時間たってるか確認して、
足りなかったらsleep()系の関数で止まる。

519 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:20:49 ]
ゲームならスレッド止めないでApplication.Idleイベント使った方がいいよ

520 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:26:04 ]
>>518
>>519
どうもです。

sleep()
Apliclation.Ide

どちらがいいですか?



521 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:29:12 ]
>>520
そもそも何故そんなことをしたいのか、という重大な疑問を棚に上げたままで
まともな回答なんて期待するだけ野暮だと思うぞ。

522 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:29:43 ]
>>506,507

出来ました。
これ使えればなかなか面白いことが出来そうです。

523 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:58:49 ]
foreach(int a in GetIntegerList())
{
  yield return a;
}

これをもっとシンプルに書けない?

524 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:02:13 ]
それだけならreturn GetIntegerList();でいいだろ
前後にもyieldがあるなら,前後のyieldをそれぞれ別のメソッドに分けてEnumerable.Concat

525 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:10:14 ]
>>524
ありがと

526 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:13:44 ]
string[]をstringにするときってどうやるの?

527 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:16:05 ]
String.Concat

528 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:23:59 ]
今から本格的にC#を勉強する!
おまいらよろしく。

529 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:55:51 ]
質問していいのは一通り勉強してからだよ

530 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:58:45 ]
どうして?



531 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:03:24 ]
ガイドラインって通読しておくもの?

532 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:04:40 ]
>>530
エスパー不足だから

>>531
読まないよりは読んだ方がいい

533 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:05:04 ]
馬鹿にされたくなければ「クラスライブラリの開発者向けガイドライン」くらいは読んどいた方がいいんじゃね

534 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:06:22 ]
>>530
入門者は変にいろいろ考えるよりも勉強した方が早い

535 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:09:13 ]
>>529
こちら,スネーク。了解した!

536 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:18:51 ]
でもわからない事はきいたほうがはやいじゃん?

537 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:25:49 ]
textBoxで、下地の背景を表示したいと思います。
textBoxを半透明にするにはどうしたらよいですか?
普通に配置して、プロパティで選択すると、
できないといわれます。
代わりに、textBoxの上にpictureBoxを配置したら、
透明にはできましたが、textBoxは下になって隠れてしまって、
文字入力できません。


538 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:27:44 ]
初心者のみなさん
こまったちゃんが>>529みたいなこと言ってるけれど
好きな時にすきなだけ質問していいんだよ


539 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:43:44 ]
>>538
なんだか意識が小学生だね君ってw
行動の基準が「先生に怒られるかどうか」って感じ。

良いか悪いか(先生に怒られるかどうか)じゃなくて、
そうしないとお前が損するんだぜって話だと思うんだが。

540 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:44:16 ]
>>537
普通には無理
それが重要ならWPF池



541 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:54:39 ]
>>537
Managed DirectX

542 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:10:39 ]
>>527
ありがとう。String.Concatでできました。


543 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:20:23 ]
>>540
WPFしてみます。
がっ。デザイナが開かず、
「TrueTypeフォントのみがサポートされています。
これはTrueTypeフォントではありません」
って、これってどれよ?


544 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:31:52 ]
再起動してみる
VSのフォント関連の設定をリセットしてみる
SP1入れてないなら入れてみる
VS再インストール

545 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:31:58 ]
>>543
これ=Managed DirectX

546 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:52:44 ]
大量のテキストデータから指定した複数の単語を含む文章を検索するプログラムを
作ろうと思っています。各社のニュース系のサイトから記事を自動的に収集してくる
プログラムを作り、記事を保存します。社によっても違いますが、だいたいニュース系の
サイトは半年以内にリンク切れしてしまうので、そうなるまえに記事を自動的に収集して
おき、必要に応じて検索して過去の記事を探してくるプログラムを作りたいわけです。

そこで大量のテキストファイルから合致する記事を探し出してくるプログラムを作る必要
があるわけですが、C#でそういった検索プログラムを作る上で参考となる手法はあるで
しょうか?とくに無ければ検索ワードを入れると過去記事を一から順番に巡回して探し
だす、何の変哲もないプログラムにしようかと思っています。

547 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 02:20:39 ]
めんどくさいからナマズに探させればいいじゃん

548 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 03:23:13 ]
すごい基本的なことなんですが本で勉強していて

「変数をカプセル化するためにプロパティを使う。
変数をprivateにし、プロパティをpublicにする」

ってなってました。
結局publicでアクセスできるんだから
カプセル化されてないような気が?
どういうことなんですか?

549 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 03:28:10 ]
プロパティにしておけば、値が設定される時にその値を検査する仕組みを入れたり、
変数の実体を無くして動的に計算して値を返すなんてことも出来るし。
変数のままpublicだったらそんなこと出来ないだろ?

550 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 03:31:03 ]
それはそうだと思うんですが
カプセル化するためっていうことを考えると
プロパティもprivateにするべきじゃないかと思いました



551 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 03:33:55 ]
じゃあ、クラスの他のメソッドを通じて変数に値を設定することも、
値を読み出すことも出来ちゃだめってことにならない?

552 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 03:40:40 ]
>>547
webブラウザを通して検索させるということですか?

553 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 03:49:55 ]
>>552
インターフェースはCCGIに限らないよ

554 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 04:02:58 ]
カプセル化をちょっと誤解してました。
すいません。
ところで
クラス内のフィールドにアクセスする時も
全部プロパティ経由の方がいいんですか?

555 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 08:09:38 ]
本当に誤解が解けたのが疑問だが
全部プロパティ経由でおk

556 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 09:52:20 ]
List<string>とかはフィールドのまま使うしかないですよね?

557 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 10:24:25 ]
意味不明です

558 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 10:40:29 ]
コレクションもプロパティにしていい
ただしList<string>型のパブリックプロパティはガイドライン違反だからIList<string>として返すとか

559 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:31:00 ]
初めて聞いた
そのガイドラインどこにある?

560 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:35:41 ]
msdn.microsoft.com/ja-jp/library/ms182142(VS.80).aspx
これだね
FxCopのガイドラインまで気にしてたらキリがないかもしれないけど
たまに話題になる有名なやつだから



561 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:37:25 ]
どうもどうも

562 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:49:33 ]
>>555
なんか端折った話?

publicな変数をインターフェースを変えることなくプロパティに出来るのが
C#のプロパティのメリットじゃないのか?

563 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:56:44 ]
それは間違い
publicフィールドをプロパティに変えたら使用側がエラーになる場合は多い
面倒なら自動プロパティでいいから全部プロパティにするべき

564 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 12:04:41 ]
>>544
SP1にバージョンアップし(3時間もかかった…)、
WPFを使ったら、テキストボックスの背景に、
画像を表示できました!
アドバイス多謝。


565 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 12:34:19 ]
C#ってSTLのvectorに相当するコレクションある?

566 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 12:35:28 ]
List<T>

567 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 12:35:54 ]
WPFって実用段階に入ってるんだっけ?

568 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 12:40:23 ]
とっくの昔に.NET3.0と一緒にリリースされて
.NET3.5にバージョンアップしてVS2008で正式サポートされてる

569 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:01:59 ]
いやそれは知ってるけど数年前の普及価格帯のノートPCとかでも
普通にストレスなく動くのかと。

570 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:05:13 ]
余裕



571 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:15:22 ]
WPFの質問です。
textBoxでボックスの幅で折り返しして、
複数行を表示するにはどうしたらいいですか?

普通のFormの場合には、
textBoxの右上に小さい矢印が出て、
そこをクリックすると、multilineを選択できました。

ひょっとしてtextBoxでなくて、
textBlockを使うのかなと思ったのですが、
こちらでは文字入力できず。


572 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:23:09 ]
>>571
msdn.microsoft.com/ja-jp/library/aa969815.aspx

573 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:25:02 ]
>>571
MaxLineが1じゃなけりゃ普通に複数行じゃない?
リターンキーで改行したいなら、AcceptsReturnにチェック

574 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:28:17 ]
>>571
少しは自分で調べたの?
プロパティ見たらTextWrappingとかAcceptsReturnとかすぐに見つかったんだが


575 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:34:27 ]
みなさんありがとう。
調べてMaxLinesの値を10000とかにはしてみたのですが、
なぜか失敗してました。
TextWrappingは見逃してました。
textBlockのほうを見て混乱してたかも。

WPFは初めてなので、ちょっと勝手が違ってとまどってます。
msdn見てたら、むちゃくちゃ強力ですね。


576 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:07:07 ]
WPFは柔軟な代わりに結構複雑で難解だよな

577 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:10:06 ]
慣れの問題だよ

578 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:28:27 ]
WPFは色々いじってみたいけど、認知度がやたらと低いのが難点。
表とかアニメーションとか簡単に表示させられるし、とても魅力的ではあるんだけどね。

579 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:14:52 ]
そもそも公開しなくて済むならそれにこしたことはない
ほんとに公開する必要あるの?

580 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:29:39 ]
>>563
マジっすか・・・
参考までにどういうケースでおかしくなるか2、3教えてくれん?
Reflection絡みぐらいしか思いつかん。

自動プロパティ使えるといいんだけど、うちぁVS2005だからなぁ・・・



581 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:38:40 ]
違いなら

・ref, out の動作
Int32.TryParse("...", ref inst.Field);

・フィールドのフィールド
inst.Field.Field = value;

・データバインディング全般(リフレクションベースなので)
ctrl.DataSource = values;

個人的にはパブリックフィールド使いたいのなんて値を表すような
クラスが大半だろ?ってことはバインディングに使われやすいわけ
だろ?なんで初めからプロパティにしない?と思う。

582 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:42:35 ]
> publicな変数をインターフェースを変えることなくプロパティに出来るのが
> C#のプロパティのメリットじゃないのか?
privateなフィールド+アクセサだとobj.GetFoo()やらobjSetBar(123)とか書くの面倒だから
っていうのが第一にあると思うぞ

583 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:47:01 ]
javaだとそういう見にくいコードになるね

584 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:54:59 ]
フィールド直接見せるのはダメだろJK

でもOOPとしてオブジェクトは操作と属性を持つってなってんのに属性を見せないって変じゃね?

の解としてプロパティ

585 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:57:39 ]
>>582
そうだけどコンポーネントモデルにおけるいわゆる「プロパティ」が
メタデータレベルで一級の扱いを受けるようになったことのほうが
大きい。
一級扱いだから「プロパティ」そのものにアトリビュートが付けられる
ようになったしアクセスするオブジェクトのモデル(リフレクション)も
整理された。

わかりにくいなら例えば Browsable アトリビュートは「どれ」に付け
るべきかって話を考えてみるといい。セッタかゲッタ、クラスだと
意味的に変だろ?なら型のメンバとしてサポートしなきゃと。

・・・という話があるわけなのだが C# に詳しくない人が単なるシンタ
クッスシュガーだとプロパティを判断して迷宮に迷い込むと

586 名前:デフォルトの名無しさん [2008/10/25(土) 19:11:36 ]
>>581
サンクス。

ref、outに使えないのは知らなんだ。
滅多に使わないからなぁ。>ref、out

フィールドのフィールドは良く分からなかった。
そういうコードが出てきた時に気にしてみるよ。

>個人的には
個人的な話をすると、バインドするつもりが無かったデータのクラスを
後から何かにバインドすることが殆ど無いので。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<145KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef