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

このエントリーをはてなブックマークに追加
1ななしぃ#
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
2ななしぃ#:2008/10/12(日) 15:09:52
C#, C♯, C#相談室 Part48
http://pc11.2ch.net/test/read.cgi/tech/1219481054/

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

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

初心者のためのプログラミング言語ガイド Part11
http://pc11.2ch.net/test/read.cgi/tech/1218282605/
3ななしぃ#:2008/10/12(日) 15:11:43
4デフォルトの名無しさん:2008/10/12(日) 15:17:02
>>1
5デフォルトの名無しさん:2008/10/12(日) 15:22:45
>>1
糞スレ乱立すんな
6デフォルトの名無しさん:2008/10/12(日) 15:23:40
7デフォルトの名無しさん:2008/10/12(日) 15:35:47
>>1

ぷらっととかいうスレを立ててる荒らしは死ね
8デフォルトの名無しさん:2008/10/12(日) 15:42:15
楽しいか?
しかし幼稚な奴らばっかりだな本当。
9デフォルトの名無しさん:2008/10/12(日) 15:46:29
さて、こちらをお気に入りに追加して
ぷらっとを削除する作業に戻るとするか
10デフォルトの名無しさん:2008/10/12(日) 15:51:49
11デフォルトの名無しさん:2008/10/12(日) 15:55:47
>>10
いい加減にしろ
死ね
12デフォルトの名無しさん:2008/10/12(日) 15:59:11
>>1


ぷらっととかという荒らしの立てたスレは放置で。
質問のある方どうぞ
13デフォルトの名無しさん:2008/10/12(日) 16:00:14
>>10
死にません。

以降、こちらのすれをご利用ください。
http://pc11.2ch.net/test/read.cgi/tech/1223777524/
14デフォルトの名無しさん:2008/10/12(日) 16:02:14
>>13
いいえ使いません
15デフォルトの名無しさん:2008/10/12(日) 16:30:14
質問です、以前のWindowsではプロセス間通信をDDEやOLEで行っていたかと
思いますが、.NETではそれに代わるものが出来たのでしょうか?
よろしくお願いします。
16デフォルトの名無しさん:2008/10/12(日) 16:33:57
リモーティングとかWCFとか
17デフォルトの名無しさん:2008/10/12(日) 17:48:21
アセンブリ情報のタイトルと製品の違いが分かりません
どのように表記すべきか

ご教授ください
18デフォルトの名無しさん:2008/10/12(日) 18:01:28
他のEXEのプロパティとか見てみては
19デフォルトの名無しさん:2008/10/12(日) 18:19:49
例えば
タイトルがVisual C# 2008
製品がVisual C# 2008 Express Edition
みたいな感じとかで考えたらどうだろう
ちなみにAssemblyTitle属性はXP以降でタスクバーボタンのグループ化したときにも表示されたりしたはず
20デフォルトの名無しさん:2008/10/12(日) 19:19:01
つまりタイトルはタイトルバーに表示されるべき範囲の名称に留め、製品はそれを個と見なした場合の製品名ということですね!わかります!!
21デフォルトの名無しさん:2008/10/12(日) 19:57:04
タイトルに2バイト文字列使うってプログラマとしてどうなの?
22デフォルトの名無しさん:2008/10/12(日) 20:02:21
突っ込む奴が馬鹿だと笑えない。
「2バイト文字列」っていつの時代の概念だよ。
23デフォルトの名無しさん:2008/10/12(日) 20:51:02
Windowsの人たちはUTF-16LEBOMありのことを
昔からの慣習を引きずってUnicodeとか言うので
2バイト文字列って言ってくれたほうが正直ありがたい

サロゲートペア?シラネ
24デフォルトの名無しさん:2008/10/12(日) 22:00:12
今時2バイトだの3バイトだの言ってる奴プログラマ(の重鎮だと思ってる)人としてどうなの?
25デフォルトの名無しさん:2008/10/12(日) 22:20:36
文鎮としてはどうでもいい
26デフォルトの名無しさん:2008/10/12(日) 23:15:59
System.Stringは2バイト/文字だから(例えASCIIの範囲内でも)タイトルに使ってはいけないということですね
27デフォルトの名無しさん:2008/10/13(月) 01:05:49
サロゲートペアと組み合わせ文字わすれんなカス
28デフォルトの名無しさん:2008/10/13(月) 08:54:45
byte配列からデータを抜き出して使用する場合って、みんなどうしてるの?

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

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

そもそもキャストなんてしないように思えるんだけど、良い方法が思い浮かばない
29デフォルトの名無しさん:2008/10/13(月) 09:28:58
日本語でおk
30デフォルトの名無しさん:2008/10/13(月) 09:46:21
>>28

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

外してたらごめんね
31デフォルトの名無しさん:2008/10/13(月) 09:52:48
>>28
BinaryReader, MemoryStream 使う。
32デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/13(月) 20:11:57
それで動くと思うよ。エスパーを待ってもいいけど
どう「止まる」かを具体的に書くといいかもしれない
エラーが出るならそのメッセージとか
35デフォルトの名無しさん:2008/10/13(月) 22:00:47
>>33
要はそのコードなら止まらないが、st = "Hoge,野田,め組,578954"とかだと
int.Parse(stArray[0])の呼び出しで例外が発生する。
それを回避するために
int.TryParse(stArray[0],out value)

こっちを使うといい。
36デフォルトの名無しさん:2008/10/13(月) 22:34:16
>>33
教師やっててそんなこともわからないのかよ
37デフォルトの名無しさん:2008/10/13(月) 22:41:48
のだめ知らんのか
38デフォルトの名無しさん:2008/10/13(月) 22:42:45
みんなsprintfを自作して使っていると思う。俺は、へたれだから、Formatでいやいや逃げてきている。
ここらで、便利なsprintf もってる椰子がいたら公開してはくれんだろうか。
39デフォルトの名無しさん:2008/10/13(月) 22:49:54
普通にstring.Formatのほうが便利
40デフォルトの名無しさん:2008/10/13(月) 22:51:16
まじですか。c++が長すぎて、なんか直感的じゃないんだよな。
41デフォルトの名無しさん:2008/10/13(月) 23:01:23
Stringってかかなきゃいかんのがめんどいよなあ
42デフォルトの名無しさん:2008/10/13(月) 23:03:21
俺も、MSDNの文字列化の書式指定辺りが訳わかめだし。
正規表現も思ったように指定するのがめんどいんで、
sprintf,sscanf互換の関数が欲しい。
43デフォルトの名無しさん:2008/10/13(月) 23:10:20
string.Sprintf()でもいいから、欲しいくらいだよ。
それか、perl, ruby風の文字列表記。
44デフォルトの名無しさん:2008/10/13(月) 23:11:50
なんかねえ
慣れろとしか言えん
45デフォルトの名無しさん:2008/10/13(月) 23:19:45
わからないから戻せっていうんならずっとCやってれば
46デフォルトの名無しさん:2008/10/13(月) 23:21:11
C#のほうが高尚だとおもってる奴がまたでたな。
47デフォルトの名無しさん:2008/10/13(月) 23:28:51
http://d.hatena.ne.jp/deraw/20070517/1179332432
俺は、このまんま、ちょい必要なの足して使ってるな。
48デフォルトの名無しさん:2008/10/13(月) 23:29:55
ほとんどは型指定なしの{0}ですむんだから、難しく思えるのはどのあたりだろ?
整数とか実数のことをいってるのかな。前詰め後ろ詰めのこと?
49デフォルトの名無しさん:2008/10/13(月) 23:35:50
使い方なんて、わかんないとこないとおもうし、わからなかったら調べるだけ。
問題なのは、 直感的に最終的な文字列がわかり難い ことだとおもう。
無駄に長い記述になるし。
50デフォルトの名無しさん:2008/10/13(月) 23:45:43
俺は、%02X 相当のことするのにだいぶヘルプを探しまくった。
結局、精度指定子とやらが文章中に埋まってるのをようやく発見したが、
あんな仕様書は俺が上司だったら却下だな。
同じヘルプのsprintfとかの方が全然読みやすいのに。なんだあれは。
51デフォルトの名無しさん:2008/10/13(月) 23:53:34
そういう話なら慣れの問題としかいえないね。
あとはマニュアル(MSDN)の記述がよくなくて探しにくいというのが大きいかも。

{ 位置情報 [[ , 総桁数] : 型[[0]サイズ]] }
「カンマ総桁数」のあたりの書き方がどわすれすることが多いよね。
52デフォルトの名無しさん:2008/10/14(火) 00:48:54
私はfontDialog1で選択されたフォントをtextBox1に適用しようとしています

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

これで何も変化がありません
エスパー助けてください
53デフォルトの名無しさん:2008/10/14(火) 01:31:28
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Font = fontDialog1.Font;
}
じゃだめなのか?
54デフォルトの名無しさん:2008/10/14(火) 01:36:10
適用ボタンでもいけた。呼ばれてないんじゃない?
5552:2008/10/14(火) 01:40:37
>>53
思い通りの動作になりました有難うございます
56デフォルトの名無しさん:2008/10/14(火) 01:47:35
Okというイベントが無いみたいで呼ばれてなかったです
小生Applyでは簡単に反映は出来ていたんですが、適用ボタン表示したくなかったのでOKボタンで反映させる方法が知りたかったのであります
57デフォルトの名無しさん:2008/10/14(火) 01:57:43
なるほど、自前で無理やり用意したのかw
58デフォルトの名無しさん:2008/10/14(火) 12:19:36
Media Player Classicのような再生プレイヤーを作るのって難しいでしょうか?

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

もしこれらの機能を実装するとしたらどんなことを勉強する必要がありますか?
59デフォルトの名無しさん:2008/10/14(火) 12:21:19
過去の遺産だが俺ならDirectShow
60デフォルトの名無しさん:2008/10/14(火) 13:57:35
いろいろと問題も多いけど、AudioVideoPlaybackを触ってみるのもいいかも。
6158:2008/10/14(火) 14:16:19
どうもです。
目指すのは本当にシンプルで再生負荷が極めて軽いプレイヤーです。
8年前のPCでH.264といった動画も再生できるような軽さを追求したいと思っています。

プログラムの工夫いかんで軽くすることは可能でしょうか?
62デフォルトの名無しさん:2008/10/14(火) 14:20:41
それはH264デコーダの革命が必要だろう
プレイヤー関係ないと思うけど
63デフォルトの名無しさん:2008/10/14(火) 14:30:31
こんな質問してる奴が作れるのかね
64デフォルトの名無しさん:2008/10/14(火) 14:41:37
C#の開発手順?というか定石みたいなのが書いてあるWebサイトってありますか?
Program.csに書いたらいいのか、新しいクラス作って書いていけばいいのか、、、など。
65デフォルトの名無しさん:2008/10/14(火) 14:45:58
取りあえずProgram.cs(Main)は殆ど触らん
66デフォルトの名無しさん:2008/10/14(火) 14:59:14
>>65
ありがとうございます。
そうなんですか。。。今とりあえずprogram.csの中にメソッド追加してるんですが、良い方法ではないんですね。
プロジェクト->クラスの追加
でクラスを追加して、そこにコーディングしていくのが良いんでしょうか。
もしそうなら、そのクラスをnewするのはどこが一番いいですか?
67デフォルトの名無しさん:2008/10/14(火) 15:08:11
>>63
誰もが一度は通る道だろ。
お前さんだって、俺だって・・・
68デフォルトの名無しさん:2008/10/14(火) 15:15:00
>>66
おまいさんに必要なのは、まず何を作りたいのかはっきりさせることだ。
次にそれを作るのに必要なクラスを考えることだ。
69デフォルトの名無しさん:2008/10/14(火) 15:20:28
>>68
それをmain()の中でnewすればいいですか?
70デフォルトの名無しさん:2008/10/14(火) 15:42:59
7年前のノートPC使ってるけどWMPでH.264再生してますよ
この1年で何があったんだよ・・
71デフォルトの名無しさん:2008/10/14(火) 16:26:24
ベストプラクティス的なものは本を買わないと無いんでしょうか?
ググりまくっても、なかなかいい資料に出会えません。
初心者の道しるべがほしい・・・。
72デフォルトの名無しさん:2008/10/14(火) 17:44:33
そういうのは先人のコードから学ぶのが一番だと思う。
SourceForge や CodePlex 等から適当なやつを拾ってきて読むと、いい勉強になるんじゃないかな。
73デフォルトの名無しさん:2008/10/14(火) 18:33:20
メニョーストリップで一個一個のアイテムのハンドラで処理するんじゃなくて、
一箇所で受け取って、このアイテムが押されてたからこの処理。的な事はできないの?
74デフォルトの名無しさん:2008/10/14(火) 18:37:40

座標しかわからないよ
75デフォルトの名無しさん:2008/10/14(火) 18:40:03
できるよ
76デフォルトの名無しさん:2008/10/14(火) 18:44:08
むりよ
77デフォルトの名無しさん:2008/10/14(火) 18:45:54
ハンドラ一ヶ所にしたい、ということならできる。
78デフォルトの名無しさん:2008/10/14(火) 18:47:43
イベントハンドラ使い廻すか。
ストリップ本体のClick拾って項目突き止めるか。
79デフォルトの名無しさん:2008/10/14(火) 22:04:59
「メニョー」では無理
80デフォルトの名無しさん:2008/10/14(火) 22:08:06
「メニェー」とか発音が困難になるよかマシ
81デフォルトの名無しさん:2008/10/14(火) 22:50:59
3.5SP1は何時になったら完全日本語になんねん!
82デフォルトの名無しさん:2008/10/15(水) 02:37:55
for文とかのループ中ではプロパティは使わない方がベター?
83デフォルトの名無しさん:2008/10/15(水) 03:29:49
>>82
単純なGet/Setならインライン化されるので問題なし
84デフォルトの名無しさん:2008/10/15(水) 03:31:47
インライン化されるプロパティとされないプロパティはどう区別するの?
85デフォルトの名無しさん:2008/10/15(水) 04:33:42
CLRの気持ちになって考える
86デフォルトの名無しさん:2008/10/15(水) 16:18:04
コントロールには処理自体に時間のかかるプロパティが多いので場合によってはキャッシュ
System.Drawingも注意
87デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/15(水) 17:57:35
二次元配列なんて捨ててDateTimeとFruitの二つのプロパティ持ったクラスの配列にしたほうがいいと思うけどなー

とりあえずReadAllLinesで読み込んで
その後二次元配列を生成
読み込んだのをループで回してSplitで分割して挿入していく
89デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/15(水) 19:01:46
どこからも参照されていないメソッドの列挙とかって出来ますか?
91デフォルトの名無しさん:2008/10/15(水) 19:07:42
FxCop使ってみるとか
92デフォルトの名無しさん:2008/10/15(水) 19:13:14
普通に考えて無理。
まあソリューション内で直参照だけでいいなら、全ての参照を検索だったかで出来る。
93デフォルトの名無しさん:2008/10/15(水) 19:14:38
あごめん、それじゃ駄目なんだなきっと。
FxCopってできたっけかな?
94デフォルトの名無しさん:2008/10/15(水) 19:16:26
FxCopでできるよ
95デフォルトの名無しさん:2008/10/15(水) 19:20:40
あやうくgrepとか答えて赤面するところだった
96デフォルトの名無しさん:2008/10/15(水) 19:23:00
>>88
二つのプロパティ持ったクラスの配列を作った場合に例えば
DateTimeだけの配列やFruitだけの配列を取り出したい場合は
for文などで新たな配列を作るしか思いつかないのですが
他に良い方法はないでしょうか。
97デフォルトの名無しさん:2008/10/15(水) 19:24:58
fruits.Select(x=>x.Fruit).ToArray()
98デフォルトの名無しさん:2008/10/15(水) 19:26:48
そんなのは別に二次元配列だろうがジャグ配列だろうが変わらんが
まあC#3.0ならlist.Select(x => x.Fruit).ToArray()とかできるけどな
99デフォルトの名無しさん:2008/10/15(水) 19:29:50
>>88
アドバイスありがとうございます。
二次元配列を生成、というところができていないので、
具体的なソースもいただけるとうれしいです。
>>89
配列の配列。そういう考え方があるのですね。
このコード、{}の対応がとれていないみたいなのですが、
Split(new[] {' ');
のところって、
Split(new[] {' '});
Split(new[] ' ');
Split(' ');
とかやってみたのですが、うまくいかず。

ところで、二次元配列にはしないものなのですか?
100デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/15(水) 19:49:49
まあ使ってるうちにわかるよ
そのうち気がついたら2次元配列は全く使わなくなってるから
102デフォルトの名無しさん:2008/10/15(水) 19:58:38
>>88、100
ありがとうございます。

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

>>101
うっ。そうなんですか。
103デフォルトの名無しさん: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だけの配列を作成
104103: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デフォルトの名無しさん:2008/10/15(水) 20:19:46
どうしてプログラムのサンプルって動物とかフルーツなの?
106デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/15(水) 20:58:00
PointとPoint、SizeとSize、同士では足したり引いたりできないの
書いたらこんな風に

ポリフォニカは普通かった面白いだろ。
特に姉妹がかわいいし。
108デフォルトの名無しさん:2008/10/15(水) 20:59:03
>>104、106
これで
バナナ
りんご
みかん

のみを一括して出力するには、
Console.Write(Fruit[]); //104
Console.Write(Fruit); //106
でいいと思うのですが、
問題はこの行をどこに書くかです。
どこに書きゃいいんでしょ?
10996:2008/10/15(水) 21:21:02
C#2.0環境なので、LINQ使わずに実現したいのですが方法は無いでしょうか。
110デフォルトの名無しさん:2008/10/15(水) 21:26:47
>>107
意味的におかしいからできない
WPFのPointは引き算できるんだけど、位置ベクトル扱いで戻り値はVector型だったりする
111デフォルトの名無しさん:2008/10/15(水) 22:56:30
byteとByteみたいに同じような型がいっぱいあるのはなんでなの?
112デフォルトの名無しさん:2008/10/15(水) 22:59:29
byteとByteは同じですよ?
113デフォルトの名無しさん:2008/10/15(水) 23:04:04
回答になってない
なんでおなじのがあるんだよ
114デフォルトの名無しさん:2008/10/15(水) 23:06:58
System.Int32 i;
とかやるのが面倒だから?
115デフォルトの名無しさん:2008/10/15(水) 23:07:45
まあ、よく使う型は短くないと使いにくいからな。

位置づけとしては、
byte の方は C# の組み込みキーワード。
System.Byte の方は .NET Framework の正式名称。
116デフォルトの名無しさん:2008/10/15(水) 23:07:55
基本型だってのを強調するためじゃないの
117デフォルトの名無しさん:2008/10/15(水) 23:27:10
プログラマとしてはどう使い分ければいいの?
118デフォルトの名無しさん:2008/10/15(水) 23:30:48
変数宣言ならキーワード使ってればいい
ただしメソッド名とかの場合はInt32とか使う Convert.ToInt32みたいなの
119デフォルトの名無しさん:2008/10/15(水) 23:30:52
予約語の方一択。
120デフォルトの名無しさん:2008/10/15(水) 23:32:14
自分は定義されてるstaticメソッドを呼び出すときはエイリアスじゃない方をつかうな
Int32.Parse()
Char.IsDigit()
とか
なんでかはわからんが
121デフォルトの名無しさん:2008/10/15(水) 23:33:58
using System が使われていないときに

Byte[] byteStream;

とかやるとByte何それってコンパイラに怒られるから
なるべくbyteを使うようにすればいいんじゃないかと思ったり
122デフォルトの名無しさん:2008/10/15(水) 23:39:36
byteはmscorlib参照しなくても使える
123デフォルトの名無しさん:2008/10/15(水) 23:43:17
予約語一択が無難なんですね
ありやとやんした!
124デフォルトの名無しさん:2008/10/15(水) 23:54:19
理念的にはC#と.NET Frameworkは独立している(例えばintがSystem.int32じゃない
C#の実装もありうる)っていうような「アリバイ作り」以上の意味はないという
認識だったんだが、違うのか?
125デフォルトの名無しさん:2008/10/15(水) 23:56:54
intはSystem.Int32のエイリアスだと言語仕様できまってる
126デフォルトの名無しさん:2008/10/16(木) 01:10:00
それはMSのC#コンパイラの仕様じゃないの?
127デフォルトの名無しさん:2008/10/16(木) 01:17:11
たしかに
128デフォルトの名無しさん:2008/10/16(木) 01:30:09
EcmaのC#言語仕様で 予約語 int は System.Int32 のエイリアスだって決まってる
(Ecma 334 C# Language Specification の 11.1.4 Simple types)
だからMSのコンパイラが、ってわけじゃないと思う。勘違いしてたらごめんね
129デフォルトの名無しさん:2008/10/16(木) 09:28:24
たしかに
130デフォルトの名無しさん:2008/10/16(木) 14:05:50
ListBoxにDisplayMemberとValueMemberを設定してKeyValuePairを
放り込んで操作しているんですが、こういうやり方と、DataSourceを
設定してそっちを操作するのでは、どちらが軽いんでしょうか。
131デフォルトの名無しさん:2008/10/16(木) 14:12:16
普通は問題にならんよそんなのの差
132デフォルトの名無しさん:2008/10/16(木) 14:14:40
知らないならレスしなくていいよ
133デフォルトの名無しさん:2008/10/16(木) 16:43:05
すいません小数点→文字列変換時の丸めについて質問です。
double i = 1999.999999;
Console.WriteLine(i.ToString("F2"));
の結果が 2000.00 になってしまいます。
1999.99 にしたいのですが、勝手に丸められてしまいます。
丸められない方法はないですか?
134デフォルトの名無しさん:2008/10/16(木) 17:17:11
>>133
#.##
135デフォルトの名無しさん:2008/10/16(木) 17:22:03
>>134
丸められてしまいます。
136デフォルトの名無しさん:2008/10/16(木) 17:25:31
数値を切り捨てるか、文字列にしてから切り出す、かなあ。
数値で切り捨てるのは、小数点以下2ケタなら100倍してMath.Floorとか。
137デフォルトの名無しさん:2008/10/16(木) 17:33:26
>>136
グーですグー!
result = Math.Floor(result * 100) / 100;
result.ToString();
でいけました。どもです!
138デフォルトの名無しさん:2008/10/16(木) 19:32:41
decimal 使うたれや
139デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/16(木) 21:02:45
自己解決。
ConvertToに与える加工済みのbmpは既にpng形式になってたので引数2個のほうで問題ありませんでした。
141デフォルトの名無しさん:2008/10/16(木) 21:21:48
普通はMemoryStreamに対してSaveする。
142デフォルトの名無しさん:2008/10/16(木) 22:10:29
>ガベージ コレクションにより、メモリ開放の煩雑さが不必要
Disposeしなくていいってことですか?
143デフォルトの名無しさん:2008/10/16(木) 22:19:33
どこの文章かは分からんがIDisposable.Disposeと.NET管理下のメモリとは何の関係も無い

って何回繰り返したことだろう
144デフォルトの名無しさん:2008/10/16(木) 22:23:19
大事なことなので繰り返しました
145デフォルトの名無しさん:2008/10/16(木) 22:27:23
>>143
それは不正確だと思うが。。
Disposeの個別の実装次第だろう。
146デフォルトの名無しさん:2008/10/16(木) 22:36:59
>>145
じゃあ具体的にマネージドメモリをDisposeの実装でどうにかしてくれ
147デフォルトの名無しさん:2008/10/16(木) 22:42:02
>>146
言ってる意味理解して反論してる?
148デフォルトの名無しさん:2008/10/16(木) 22:45:04
うん
でDisposeの個別の実装をどうマネージドメモリに関係させるの?
149デフォルトの名無しさん:2008/10/16(木) 22:58:25
例えば(Disposeに期待される役割から言って意味がないから普通はやらないけど)
巨大配列への参照をnullにする実装だってありうる。

「それはメモリを開放したことにならん」って言いたいかもしれんが、
その時は落ち着いて>>143を読もう。
150デフォルトの名無しさん:2008/10/16(木) 23:16:06
でもやっぱり関係ないよね
参照を消しただけだもの
151デフォルトの名無しさん:2008/10/17(金) 00:10:34
良く分からんが、Disposeの実装でGC.Collect()を実行するような話か?
152デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/17(金) 00:32:02
普通にはできない。
foreachしたいだけなら、IEnumerable<T>を引数にしたほうがいい。
154デフォルトの名無しさん:2008/10/17(金) 02:34:02
C♯ってくらいだからC言語の内容を包括してますか?
あとC♯を勉強してたらJAVAやD言語についての理解も深まって
いざってときにそれらにシフトしていくことも可能ですか?
C♯に一番興味あるんですけど、JAVAやC言語、D言語ってのも
いいってきくのでその3つにつなげることができるのか疑問です。
155デフォルトの名無しさん:2008/10/17(金) 03:00:47
お前には無理
156デフォルトの名無しさん:2008/10/17(金) 03:41:55
s.Close;ってなんなの
何でいちいちこんなことする必要あるの?
157デフォルトの名無しさん:2008/10/17(金) 04:33:25
>>156
書いておく癖をつけとかないと、なんか色々漏れるんだよ。
理由が想像すらつかない程度の知識しかないんなら、とりあえず面倒でも従っとけ。
158デフォルトの名無しさん:2008/10/17(金) 04:44:09
>>154
言語の知識だけで一人前になれるほどプログラムは単純じゃありません。
興味を持っただけの段階で知識の応用範囲を気にするなんて小賢しい真似をする暇があるなら
さっさと勉強した方がなんぼか有意義です。
でないと自分に必要な分野すら見えてきません。
159デフォルトの名無しさん:2008/10/17(金) 05:22:12
>>153
なんで嘘つくの?
160デフォルトの名無しさん:2008/10/17(金) 06:11:34
>なんなの、するの? 
こういう言い回しする奴はとことん頭悪そうだな
161デフォルトの名無しさん:2008/10/17(金) 06:54:25
>>152
リフレクション
162デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/17(金) 08:52:18
>>162
両方同じインターフェース継承させちゃダメなのか?

それがダメなら、リフレクションでやれ。
165デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/17(金) 12:46:33
それが面倒だって言ってるんだろ
168デフォルトの名無しさん:2008/10/17(金) 13:59:56
配列
int[] a = a[10];
があるとします。

この配列の範囲外にアクセスしようとしたら、たとえばa[-1]やa[10]にアクセスしようとしたとき、
特定の数字(たとえば-1)を返すようにすることは可能でしょうか?
169デフォルトの名無しさん:2008/10/17(金) 14:01:16
無理
インデクサを実装した型を自作してそれっぽく振る舞わせることは可能
意味がわからなかったら勉強しろとしか言えない
170デフォルトの名無しさん:2008/10/17(金) 14:07:39
インデクサですか、ちょっと勉強してきます。

あるいは簡単にメソッドで実現するという方法は一般的でしょうか?
int a(int x)
とし、0 <= x <= 9 以外の範囲を指定したら-1をreturnするようなメソッドの中に
int a[];
を宣言するという方法もあるかと思いますが・・・
171デフォルトの名無しさん:2008/10/17(金) 14:20:08
ま別にそれでもいいんじゃね
今なら拡張メソッドでGetValueOrDefault<T>(this IList<T> list, int index, T default)とかか
やらんけど
172デフォルトの名無しさん:2008/10/17(金) 14:57:16
ここ初心者用なのに初心者叩かれるよね
173デフォルトの名無しさん:2008/10/17(金) 15:08:31
全然
174デフォルトの名無しさん:2008/10/17(金) 15:10:08
ディスプレイ(もしくは特定のウインド)を(動画で)キャプチャし
その動画をLAN内の別のPCのメディアプレイヤーで見れるようにする(WMEのような)ソフトを作りたいのですが

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



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

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

メディアプレイヤーから接続があった場合
そこへ動画を配信する
175デフォルトの名無しさん:2008/10/17(金) 15:28:02
エンコードはしないの?
176デフォルトの名無しさん:2008/10/17(金) 15:33:40
エンコードしないとサイズやらなんやら大きくなってしまいますね・・
メモしておきます
177デフォルトの名無しさん:2008/10/17(金) 16:26:30
WindowsMediaServiceで出来るだろん
178デフォルトの名無しさん:2008/10/17(金) 18:36:23
C#の正規表現で、「スペース(半角、空白)か改行しかない」という
条件はどう表現するのでしょうか。
179デフォルトの名無しさん:2008/10/17(金) 18:51:25
>>169
インデクサに関してちょこっと調べてきました。
setやgetで要素を設定・取得するわけですが、要素数が100個とか1000個になると
swich〜case文で設定していくのは大変な作業になってしまう気がするのですが・・・
180デフォルトの名無しさん:2008/10/17(金) 18:58:13
意味が分からん
普通そんなのはDictionary使うだろ
181デフォルトの名無しさん:2008/10/17(金) 18:59:07
私の辞書にその発想は無かったわ。
182178:2008/10/17(金) 20:13:57
^\s+\n と ^\s*$ を組み合わせる事で表現出来たような気がする
んですが、間違ってないでしょうか。
183デフォルトの名無しさん: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 } }
}
184178:2008/10/17(金) 20:21:18
すいません。正規表現スレ行きます。
185183:2008/10/17(金) 20:22:17
return忘れてた
setはarray[index] = value;ね
186デフォルトの名無しさん:2008/10/17(金) 20:56:23
>>183
>>185
どうもです(^-^)ノ
そのsetを実装すればあとはfor文なりで配列に値を普通に格納していけるわけですね。
187デフォルトの名無しさん:2008/10/17(金) 21:34:02
すみません。
配列で複数作ったクラスに継承使ったら複数の基底クラスが生成されて負担が大きくなる
という事はありますか?
188デフォルトの名無しさん:2008/10/17(金) 21:36:06
うぜえよお前!
189デフォルトの名無しさん:2008/10/17(金) 21:36:14
C#か日本語でおk
190デフォルトの名無しさん:2008/10/17(金) 22:13:47
クラスを入れる変数はポインタだからクラスの大きさとは関係ない
配列は変数がたくさん並んだものだからクラスの大きさとは関係ない
191デフォルトの名無しさん:2008/10/17(金) 22:31:55
>>190
分かりました。ありがとうございます。
192デフォルトの名無しさん:2008/10/18(土) 00:21:21
コマンドライン引数に関する質問です。
class MyApp { static void Main(string[] args) { foreach(string s in args) System.Console.WriteLine(s); } }
こんな感じの引数を表示するだけの物を動かしてて気付いたんですが、
argsにはワイルドカードが展開されない状態のコマンドライン引数が入るみたいですけど、
展開済みの引数配列を得るにはどうすればよいんでしょう?
193デフォルトの名無しさん:2008/10/18(土) 00:25:14
そもそも引数にそんな概念はないだろ
自分で好きなように処理するだけ
194デフォルトの名無しさん:2008/10/18(土) 00:35:22
Unixのシェルには存在するらしいよ
シェルだからプログラムに渡される前に展開される
195デフォルトの名無しさん:2008/10/18(土) 00:39:34
ワイルドカードを「展開」するとかされるって言い回しは一般的なんだろうか
196デフォルトの名無しさん:2008/10/18(土) 01:10:11
>>195
Unixシェルがやってくれるのは展開すると言われることが多いと思う。
197デフォルトの名無しさん:2008/10/18(土) 01:23:21
VC++のsetargv.objみたいなのは.NETにはないのかな
自前で展開すればいいんだろうけど
いかにも車輪の再発明になりそうで躊躇してしまうね
198デフォルトの名無しさん:2008/10/18(土) 05:08:21
Directory.GetFiles()でダメな理由は?
ttp://msdn.microsoft.com/ja-jp/library/wz42302f.aspx
199デフォルトの名無しさん:2008/10/18(土) 05:14:46
別にダメでもないが
200デフォルトの名無しさん:2008/10/18(土) 06:58:55
>>198
Directory.GetFiles() がダメっていうよりシェルが展開しないとダメな理由は
ワイルドカード展開処理が各プログラムごとに異なって実装される可能性があるから。
201デフォルトの名無しさん:2008/10/18(土) 10:10:01
>>200
例えばdir *\*.txtは文句言われるけど、
ruby -e"p ARGV" *\*.txtは1階層下の.txtのリストを表示してくれる、
みたいに実際に処理できるパターンが違うものがあります。

結局の所、展開処理は標準ライブラリでは用意されてないから
Directory.GetFiles, Directory.GetDirectoriesを使って自前で処理を書かないと駄目ってことでしょうか。
202デフォルトの名無しさん:2008/10/18(土) 11:24:32
203デフォルトの名無しさん:2008/10/18(土) 12:35:43
pythonにはパターンからそのパターンにマッチする
ファイルのリストを返すglobとかいうモジュールが標準でついてた気がする
そういうのがほしいのか
204デフォルトの名無しさん:2008/10/18(土) 13:30:35
結局自前で書いてみた。
http://www.uploda.org/uporg1732453.cs.html
205デフォルトの名無しさん:2008/10/18(土) 17:28:30
2つの文字列が一致しているかどうか判定するプログラムを書きたいと思っています。

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

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

それとも長い文字列の比較のためには別に推奨された方法がありますか?
206デフォルトの名無しさん:2008/10/18(土) 17:39:07
>>205
予め等しいか等しくないかが分かっているのでなければ、
少なくとも一度は線形時間かかる方法で比較しないといけない。

でも、一度等しいかどうかを判断すれば、その結果を変数に保存しておくとか、
System.Xml.NameTableのような仕組みを使ったりすることで、
二度目以降は定数時間の比較で済む。
207デフォルトの名無しさん:2008/10/18(土) 17:44:36
>>206
不用意な回答だと思うなあ。
まあ質問者の質問の仕方が悪いんだが。
例えばDBとか検索エンジンのようにハッシュを使う方法もありうるし、
目的を明確にせずに一概に言えないとしかいいようがないと思うんだが。
208デフォルトの名無しさん:2008/10/18(土) 17:48:30
比較対象の傾向にもよるけど、例えばまず文字列長を比較するとか
基本的に数文字で一致しなくなる掲示板レスみたいなのなら普通に比較するだけでも十分だろうし
そもそも比較回数が少ないなら気にすることもないだろうし
209205:2008/10/18(土) 18:07:32
>>206-208
ハッシュという方法がありましたか( ´・ω・)!

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

あとC#にはハッシュ関数は用意されていましたっけ?
それとも自前で構築する必要がありますか?
210デフォルトの名無しさん:2008/10/18(土) 18:09:24
初心者がハッシュね
うん
211デフォルトの名無しさん:2008/10/18(土) 18:14:22
ちなみに==よりもString.Equalsの方が早いよ。
212デフォルトの名無しさん:2008/10/18(土) 18:14:55
どういうシステムなのか次第で最適な方法なんていくらでも変わってくるんだから、
その辺を明らかにせずに聞いても仕方ないんじゃないか?

たった2つの文字列を1回きり比較するだけとか、
数百万件の文字列データを高速に比較したいとかで
全然やり方なんて違うだろ。
213デフォルトの名無しさん:2008/10/18(土) 18:24:54
object.GetHashCode()でハッシュは取れるが
そんなこと考えず==で普通に比較すりゃいい
214205:2008/10/18(土) 18:36:28
>>211-213
プログラムは2ちゃんに投稿される1レス相当の文字列を数千回程度比較する規模です。
このくらいでしたら==やString.Equalsを使った方が速いでしょうか?
215デフォルトの名無しさん:2008/10/18(土) 18:39:28
>>214
数千回と一口に言っても
一つの文字列と複数の文字列を比較する場合とか、
複数と複数を比較する場合とかで違ってくるわけだが。

やりたいことを全部書けよ。
216205:2008/10/18(土) 19:19:53
>>215
はい(´・ω・`)

比較する文字列はすべて違います。
webにアップロードされてる文字列に変更が加えられている物が無いかを
チェックするため、手元にコピーしておいた過去の文字列と、たった今web上
から落としてきた文字列を1つ1つ照らし合わせながら比較していきます。
その数が一回の処理でだいたい数千回に上るという仕様です。
217デフォルトの名無しさん:2008/10/18(土) 19:27:12
それなら普通に==で比較するのでいいんじゃね。
「異なっていること」を判断するのにハッシュはあまり役に立たない。
218デフォルトの名無しさん:2008/10/18(土) 19:33:16
初心者ほど何故か小出しにするから、中級者以上の回答者が混乱して無駄に議論を始める
219205:2008/10/18(土) 19:34:46
>>218
す、すいません(´;ω;`)ブワッ

>>217
そうなんですか(´・ω・`)・・・
逆にハッシュを使った文字列比較が活躍する場所は何でしょうか( ´・ω・)?
220デフォルトの名無しさん:2008/10/18(土) 19:35:36
>>216
== or String.Equalsで良いと思う。
221デフォルトの名無しさん:2008/10/18(土) 19:36:51
>>219
ハッシュは文字列の場合はパスワードの認証とかに使われるし、それ以外ならほとんどバイナリの整合性を取るために使われる。
222デフォルトの名無しさん:2008/10/18(土) 19:40:49
>>219
保存されてる数千の文字列を総当たりで比較する場合とか。
ハッシュ作るのに相当なコストかかるから、比較の一方が1回しか
比較の対象にならないならば、効率が悪すぎる。
223デフォルトの名無しさん:2008/10/18(土) 19:52:59
==とString.Equalsに違った部分があるかのような言説はなんなんだよ
224205:2008/10/18(土) 19:53:08
同じ文字列を何度も比較に使うときはハッシュにすると効率がよくなるということですね?
225デフォルトの名無しさん:2008/10/18(土) 19:58:26
ちゃんとキャッシュすればね
226デフォルトの名無しさん:2008/10/18(土) 20:01:20
と言うよりも、比較の際にハッシュ作成の時間をカウントしないで済むかどうかが肝なんだろうね。
つまりハッシュ値を事前に用意できるかどうか。

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

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

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

そこまで性能にシビアでないなら何も考えず全文比較でいい。
228デフォルトの名無しさん:2008/10/18(土) 20:49:05
初心者がいきなりそんなどっちが早いとか考えなくていいです
希望する動作を実現するのに最も簡単な方法を教えてあげてください
229205:2008/10/18(土) 20:56:10
>>227
> 2ちゃんレスレベルならいっそ文字列全部キャッシュしてもいいくらい(件数によるが数千件レベルなら)。

どうもです。
スタックに

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

みたいな感じで格納して計算してもいいと思いますか?
230デフォルトの名無しさん:2008/10/18(土) 20:56:30
>>227
分かってるような感じでいい加減なことを言わんように
231デフォルトの名無しさん:2008/10/18(土) 21:06:03
>>211
あちこちで言われてる事ではあるけど
String.Equalsの方が早いと言っても微々たる差でしかないし
とくに初心者はString.Equals(String)ではなく、誤ってString.Equals(Object)を使ってしまう危険性が高い。

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

問題点を教えずに使わせるのは良くないと思うんだ。
232デフォルトの名無しさん:2008/10/18(土) 21:06:28
このスレにはC#の未来が掛っています
初心者潰しをするか初心者を受けれるかはあなた次第
233デフォルトの名無しさん:2008/10/18(土) 21:12:20
どの部分がいい加減なのかをきっちり指摘すればいいと思うんだよね。
234デフォルトの名無しさん:2008/10/18(土) 21:13:29
おっと
>どの部分がいい加減なのかをきっちり指摘すればいいと思うんだよね。
>>230宛てね。
235デフォルトの名無しさん:2008/10/18(土) 21:14:03
a.Equals(b)って対称じゃなくて嫌い
236デフォルトの名無しさん:2008/10/18(土) 21:15:50
String.Equalsでのパフォーマンスの差なんて、文字列がよっぽど短くなけりゃ完全無視できるレベル。
237デフォルトの名無しさん:2008/10/18(土) 21:29:42
>>227でいい加減なこといってると思われそうな箇所は、

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

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

あとはどこかいな?
238デフォルトの名無しさん:2008/10/18(土) 21:32:08
あとGetHashCodeじゃ現実的に衝突を考慮する必要も出てくるだろうから使えないしね。
239デフォルトの名無しさん:2008/10/18(土) 21:39:41
>>234
ハッシュを使う価値があるのは同じ文字列を複数回比較に使う場合
代表的にはn個の文字列の中に同じものが含まれるかどうかといった場合だ
文字列が長いとどうだとか瑣末な問題を全てであるかのように語っているのがいい加減だ
240デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/18(土) 21:49:35
cache.TryGetValue(hash, out sl);
if(sl == null)
{
sl = new List<string>();
cache[hash] = sl;
}
こうか
242デフォルトの名無しさん:2008/10/18(土) 21:50:48
それだと意味無いだろ
ハッシュの計算結果を使いまわさないと
243デフォルトの名無しさん:2008/10/18(土) 21:55:07
>>239
んなもん今回のケースと全く合わないから触れもせんかったわ。
最初から今回のケースに関わる場合という前提で書いたから。
244デフォルトの名無しさん:2008/10/18(土) 21:59:09
そういうハッシュも含めて文字列の長さが全てなんて言った覚えはない。
だいたい最初から一致判定の話あって、検索の話を書いてるのはお前だけだろう。
無論それを確認する意味はあるが、俺はあくまで用途がだいたい見えた状況以降を見て書いてる。
245デフォルトの名無しさん:2008/10/18(土) 21:59:47
>>243
今回のケースなら、同じ文字列を複数回比較に使わんのだから
文字列が長かろうと短かろうとハッシュを使う理由はない
246デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/18(土) 22:03:58
俺も>>227はいい加減なこと言ってると思う。
少なくとも結論は間違ってる。
つまりハッシュを使う意味は>>216のケースではありうる。

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

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

キャッシュしてあるデータのハッシュ値は事前に用意できることも考慮に入れれば、
全文を比較するよりずっと軽いと思う。
248デフォルトの名無しさん:2008/10/18(土) 22:04:35
>>245
やっぱり分かってないだろう。
文字列がかなり長いなら、ハッシュだけをディスクから読むことで効率化どきる可能性がある
って最初からそれを言ってるだけなのに。
それも可能性はあるって書き方しかしてないのに。
249デフォルトの名無しさん:2008/10/18(土) 22:05:04
> hash = input.GetHashCode();
GetHashCode()のコストは高いので、このhashを何回も使い回すような
状況じゃなければ、直接文字列比較した方がよい、って意味。
1回比較して捨てちゃうんだったら意味ない。
250デフォルトの名無しさん:2008/10/18(土) 22:10:48
C#ってネイティブコードも出せるんだっけ?
251デフォルトの名無しさん:2008/10/18(土) 22:12:54
長さ比較レベルなどただの文字列比較でも最初にやってる。
そして今回のケースは違う場合を調べたいのだから、一致しても結局全文検査が必要。
暗号ハッシュなら現実的に一致は無視できるが。
暗号ハッシュじゃなくて現実的に一致を無視できるようなハッシュは作れるかもしれんが、
それは全文検査が必要だということは分かるだろう?
つまり最初から全文一致検査したほうが早い。
よって、ディスクから読むなど、対象文字列の準備に負荷がかかる場合しか意味がない。

あと俺はもともと、キャッシュした場合の話も書いてる。
252デフォルトの名無しさん:2008/10/18(土) 22:13:31
>>249
ほうほうなるほど、そんな重いのか
適当に数千件の文字列食わせてhash使わない実装と比較してみる
ありがと
253デフォルトの名無しさん:2008/10/18(土) 22:17:37
>>250
もちろん
254デフォルトの名無しさん:2008/10/18(土) 22:19:31
>>251
>現実的に一致を無視できるようなハッシュ
そんなものは必要ないんだよ。
元のデータが違っててもハッシュ値が一致する確立が十分小さければ必要十分。
分かってるのかな
255デフォルトの名無しさん:2008/10/18(土) 22:20:36
>>248
ハッシュを作るには長い文字列をまずディスクからとってくる必要がある
このケースでは文字列を一回しか読まないんだからハッシュを使う意味はない

>>249
Dictionaryの方のハッシュが何回も使われている
文字列の長さ×文字列数の比較が
文字列の長さ分のハッシュ値の取得になっている
ものすごく意味あるだろ
256デフォルトの名無しさん:2008/10/18(土) 22:25:51
今回のケースは、それほど長くない文字列が大量に保存されていて、
最新の情報で変化があったものだけを抽出したい。
ディスクに対象の文字列がすでに大量に保存されている。

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

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

だから文字列がかなり長くないと意味がない。
文字列がかなり長いなら意味がある可能性はある。
257デフォルトの名無しさん:2008/10/18(土) 22:29:10
>このケースでは文字列を一回しか読まないんだからハッシュを使う意味はない

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

変更のある文字列は一部だと俺は予想していた。
これはまあ実際には違うかもしれないな。
だからほとんどの文字列は何度も比較されるから、ハッシュを事前に求めて保存しておく意味があると考えた。
多くが変わるのなら意味はない。
258デフォルトの名無しさん:2008/10/18(土) 22:29:24
>>256

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

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

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

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

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

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

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

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

まあともかく俺は、上のように予想して、なら文字列が長いならハッシュを利用する意味がある
可能性はあるだろうと書いた(ここでのハッシュは一応暗号的なハッシュ)。
しかし今回は文字列の一つ一つは短いらしいから意味はないと書いた。
261デフォルトの名無しさん:2008/10/18(土) 22:43:37
>>259
あのな、ハッシュを計算して比較して、で、どうするわけ?
変わってるものを抽出したいんだろう?
ならそんな方法でハッシュを計算しても、一致した場合、
結局全文を一致検査しないと本当に変わってないかは分からない。
※そんなハッシュ計算じゃ一致しても本当に変わってないかチェックが必要なのはわかるだろう?

ハッシュが違った場合、確実に変わっていると判断できるが、
一致した場合は結局全文の検査が必要だろうが。
262デフォルトの名無しさん:2008/10/18(土) 22:47:22
>>261
もともとハッシュというのはそういうものだから。
それでも>>254に書いたとおり、元のデータが違っていてもハッシュ値が一致する
確率が十分小さければ意味がある。

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

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

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

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

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

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

そしれそれがそんなに実現困難な目標とは思えん。
266デフォルトの名無しさん:2008/10/18(土) 22:59:31
>>262
>>261
>もともとハッシュというのはそういうものだから。

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

で、暗号的なハッシュは、現実的にそれが無視できるほど確率が低い。
もともと似た文字列で一致することがないように設計されているから。
267デフォルトの名無しさん:2008/10/18(土) 23:07:23
>だから無視できるほど小さくする必要なんてないんだってば。。
>アバウトな言い方をすれば、一致する確率が両者の方法のパフォーマンスの比より
>小さければ十分でしょ。

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

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

つうかな、長さの比較レベルまでハッシュに含めたら、
もはやハッシュの話を別にする意味ないだろ。
それは単なる文字列の一致検査の実装のチューニングだ。
多分そういう感覚でいってるんだな?
なんとなく話題にしてるハッシュの前提が根本的に違うことは分かったわ。
268デフォルトの名無しさん:2008/10/18(土) 23:12:56
初心者おいてきぼりのこの展開
269デフォルトの名無しさん:2008/10/18(土) 23:19:44
あとな、全文一致検査でも頭から見て違った時点で検査は終わるんだから、
ガラッと変わってれ場合はかなり速い可能性が高い。
でもガラッと変わってなければ、簡単なハッシュじゃ一致する可能性が高い。
単なる長さ検査なら全文一致検査でも既にやってる。

やっぱりあんまり効果があるとは思えない。
270デフォルトの名無しさん:2008/10/18(土) 23:27:26
おーい>>205生きてるか〜?
271デフォルトの名無しさん:2008/10/18(土) 23:37:07
ハッシュってのは衝突しないのが前提だぞ。
ハッシュが一致してたら一致、一致してなければ不一致とみなす。
そうじゃないと世の暗号や署名なんか成り立たないじゃないか。

んで、本題に戻ると、文字列比較なんかREPE CMPSBすりゃ一発だから、
単純比較のためにハッシュを利用する意味はない。IOを考慮するなら
確かに意味があるケースもあるような気はするが。
272デフォルトの名無しさん:2008/10/18(土) 23:48:31
まあ、今の話は暗号ハッシュとそうじゃないハッシュ、さらに、不一致をざっと確認するハッシュもどきまで話に出てきてるからね。

まあさすがに長さ検査はハッシュとは呼ばんと思うが。
273デフォルトの名無しさん:2008/10/18(土) 23:51:52
まあこのスレ的には
最低限の常識さえ踏まえていれば後は実際に問題になってから考えればいい
274205:2008/10/19(日) 01:33:09
>>270
((((((;´・ω・))))))ガクガクブルブル
275デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/19(日) 02:53:37
ImageにGetPixelはねーだろ
278デフォルトの名無しさん:2008/10/19(日) 03:04:14
>>275
長さ?
279デフォルトの名無しさん:2008/10/19(日) 03:09:49
MSはなんでgetpixelみたいな誰が見ても糞なやつを実装したんだ?
280デフォルトの名無しさん:2008/10/19(日) 03:11:55
>>278
128bitの空間でハッシュが衝突しないようにするには、
どれだけの長さまでの文字列を保持できるのか、って話なんじゃね。
281デフォルトの名無しさん:2008/10/19(日) 03:27:09
長さは関係ないでしょ。
282デフォルトの名無しさん:2008/10/19(日) 03:28:39
同じハッシュが生成される文字列がいくらあろうが(っていうか無限にあるわけだが)、
現実に衝突発生の「確率」が低ければよい。
283デフォルトの名無しさん:2008/10/19(日) 03:31:14
>>275
一般に確率的にしか衝突を起こせない場合、
十分なビット数があればそれでいい。
そして普通はそれを、衝突が発生しにくい、という。
そして、暗号ハッシュは衝突が発生しにくいのが大前提、と表現する、普通は。
284デフォルトの名無しさん:2008/10/19(日) 03:32:47
逆操作が難しいだけじゃ暗号ハッシュとして使い物にならない。
285デフォルトの名無しさん:2008/10/19(日) 04:33:09
286デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/19(日) 06:23:20
C#にそのような機能はありません
288デフォルトの名無しさん:2008/10/19(日) 06:45:23
なるほど、無理ですか。もう一度構造見直して考えてみます。
どうもでした!
289デフォルトの名無しさん:2008/10/19(日) 09:43:51
>>276
>>285はなんでこんな変なことしてるんだろう
普通はBitmap.LockBitsを使う
290デフォルトの名無しさん:2008/10/19(日) 09:51:18
まだ2003も出てない時期の記事だぜ?
色々定石とかできてなかったんだよ
291デフォルトの名無しさん:2008/10/19(日) 10:55:20
>>276
「MemoNyanDum」
http://junki.lix.jp/
こちらのサイトのここを見るといい
「C#(GDI+) : Bitmap の内部色データにアクセスする (1)」
http://junki.lix.jp/csgr/002ColorDataAccess1.htm
292デフォルトの名無しさん:2008/10/19(日) 19:53:30
VS2005のエディタ上でスラッシュ(/)を3回連続で打ち込むと突然

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

に変換されるんですがこれなんですか?
293デフォルトの名無しさん:2008/10/19(日) 19:55:29
XMLドキュメント
294デフォルトの名無しさん:2008/10/19(日) 19:57:47
XMLの書式でしたか。
ちなみにスラッシュ2回じゃ何もおこらず、3回目で変換された理由は何でしょう?
295デフォルトの名無しさん:2008/10/19(日) 20:02:55
2回で起こったらおちおちコメントも書いてられんわw
296デフォルトの名無しさん:2008/10/19(日) 20:03:13
や、ヘルプで調べろよ
297デフォルトの名無しさん:2008/10/19(日) 20:17:14
//の後ろにはコンパイルされないコメントが書けるとか書けないとか
298デフォルトの名無しさん:2008/10/19(日) 20:18:38
ちょっと質問を。

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

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

ちなみに
return null;
じゃコンパイルは通らなかった。
299デフォルトの名無しさん:2008/10/19(日) 20:22:56
そもそもクラスでなく構造体を使う意味がわからんけど、
空の構造体でも返せばいいんじゃね?
300デフォルトの名無しさん:2008/10/19(日) 20:29:12
>>298
>「構造体を返すメソッド書いてんだからエラーが発生したときもちゃんと構造体を返せ( ゚Д゚)ゴルァ!!」
そんなこと言うわけないと思うが。

こんなスレで質問するご身分なんだから、コンパイラ様のお言葉を勝手に意訳せずに
「ありのまま」書くべきなんじゃないのか?
301デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/19(日) 20:34:58
ここはCスレかと
305デフォルトの名無しさん:2008/10/19(日) 20:41:13
エラーが起きて値が返せないなら例外を投げればいいだけだと思うが。
306デフォルトの名無しさん:2008/10/19(日) 20:41:43
>>302
同じ意味だけどreturn default(myStruct);の方が誤解を生まない
307デフォルトの名無しさん:2008/10/19(日) 20:41:57
例外投げるかnullable使えよ
308デフォルトの名無しさん:2008/10/19(日) 20:42:45
> 同じ意味だけどreturn default(myStruct);の方が誤解を生まない

こんな方法があったとは・・・
C#って奥が深いな・・・
309デフォルトの名無しさん:2008/10/19(日) 20:42:52
Nullableは意味のあるnullに使うものだと思うんだけど
310デフォルトの名無しさん:2008/10/19(日) 21:02:52
そうでもない
311デフォルトの名無しさん:2008/10/19(日) 21:20:21
戻り値が必須のメソッド内でも

throw Exception()

すれば戻り値設定しなくてもコンパイル通るの?
312デフォルトの名無しさん:2008/10/19(日) 21:21:24
やってみればいいんじゃね?
313デフォルトの名無しさん:2008/10/19(日) 21:39:58
>>311
愚問だよ。
例外を投げるって意味が分かってる?
314デフォルトの名無しさん:2008/10/19(日) 21:48:18
>>311
当たり前の事だが、正常処理の戻り値は設定する必要はあるぞ。
で、例外というのは、その正常処理を続行出来なくなった時に、
処理を強制終了させる仕組みだから。
315デフォルトの名無しさん:2008/10/19(日) 22:51:55
>>311
new がないからコンパイルは通らんね。
316デフォルトの名無しさん:2008/10/19(日) 23:18:23
System.Exception Exception(){ return new System.Exception(); }
317デフォルトの名無しさん:2008/10/19(日) 23:22:06
次は文末のセミコロンが無いから……
318デフォルトの名無しさん:2008/10/20(月) 00:32:22
C#にてDWM(WindowsVistaのAeroグラス)をウィンドウに適用する方法についての
詳細な方法や情報はありませんか?

ちょっと好奇心でやってみたらどうもうまく行かなくて突っかかっています
319デフォルトの名無しさん:2008/10/20(月) 00:40:36
320デフォルトの名無しさん:2008/10/20(月) 00:41:01
> 同じ意味だけどreturn default(myStruct);の方が誤解を生まない

残念だが同じ意味ではない。
return default(myStruct);
の方がいいのは事実だが。
321デフォルトの名無しさん:2008/10/20(月) 00:44:44
>>318
ごめん>>319じゃほとんどコード無かったから、代わりにこっちを。
http://www.danielmoth.com/Blog/2006/06/vista-glass-in-c_17.html
322デフォルトの名無しさん:2008/10/20(月) 02:00:10
NPlotを使って散布図を描こうと考えています。
二次元配列で格納してあるデータをそれぞれX軸Y軸に対応させて
linePlot.AbscissaData = test[j,0];
linePlot.OrdinateData = test[j,1];
のように設定しfor文でjを変えてデータをどんどんグラフに点を加えさせていきたいのですが上手くいきません。
どのように設定すればよいのか、ご存知の方ご指導お願いします
323デフォルトの名無しさん:2008/10/20(月) 02:03:17
STLでよく使うイテレータってC#でも使う?
324デフォルトの名無しさん:2008/10/20(月) 04:38:46
>>322
それforで回したら上書きされて最後のデータしか残らないやん
AbscissaDataとOrdinateDataにはコレクション入れるんでないの?
325デフォルトの名無しさん:2008/10/20(月) 06:22:22
graphicsメンバに1ドットだけ描画するメソッドが見あたらないのですが、
1ドットだけ描画するにはどうすればいいのでしょうか?
drawlineで 1,1,1,1 にしても何も表示されませんでした。
326デフォルトの名無しさん:2008/10/20(月) 09:21:58
ドットなんて概念を排除してるからねー
FillRectangleで代用かな
327デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 12:57:55
List<heikinten>
heikinten[]
330デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 13:24:02
heikintenクラスに突っ込みたくてならないのだが
StudentクラスにAverageメソッド用意するのが普通だろうと
333デフォルトの名無しさん:2008/10/20(月) 13:48:30
>>329->>332
思った通りのことが出来ました
ありがとうございます


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


334デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 14:10:58
return null;
でいいんじゃないかな
return Nullable<int> null;はたとえばintの3を返すときに
return int 3;
とかやるようなもんだべ
336デフォルトの名無しさん:2008/10/20(月) 14:27:15
>>335
> return null;
> でいいんじゃないかな

( ゚д゚)!

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

お騒がせしてすいません(´・ω・`)
337デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 16:11:00
>>337
処理を明確化する意味でもNullableを使わずにbool値を使った方がいいでしょうか?

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

処理を分岐させたいだけだったらやっぱり>>337の方法にすべきだと思う。
340デフォルトの名無しさん:2008/10/20(月) 16:21:31
out を使うのは負けだと思ってる・・・
341デフォルトの名無しさん:2008/10/20(月) 16:22:29
>>338
よく使われる例だけど
データベースなどでは、通常の(有効な)値と null(無効な値)を取る型が使われる為、Nullable型があると便利。
342デフォルトの名無しさん:2008/10/20(月) 16:30:07
まとめますと

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

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

というのが定石ということですね?
343デフォルトの名無しさん:2008/10/20(月) 16:37:58
参照型じゃなくて参照渡しな
344デフォルトの名無しさん:2008/10/20(月) 17:44:56
すいません質問です。
publicなフィールドと両方publicな自動プロパティ、具体的に動作が異なるのはどんな時でしょうか?
345デフォルトの名無しさん:2008/10/20(月) 17:50:36
>>344
virtual とかできる。
346デフォルトの名無しさん:2008/10/20(月) 17:57:05
数字を指定したスペースに表示させたいのですが、

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

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

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

おそらく
Console.Write("{0, n}", num);
とするとエラーが生じてしまうと思います。
他に方法はあるでしょうか?
347デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 18:20:05
>>345
逆に言えばvirtualをつけなければ、同じなんですね。ありがとうございました。
350デフォルトの名無しさん:2008/10/20(月) 18:26:56
>>347
どうもです
351デフォルトの名無しさん:2008/10/20(月) 18:36:30
プロパティかフィールドかっつう最も大きい違いがあるがな
352デフォルトの名無しさん:2008/10/20(月) 19:57:56
プロパティは参照渡しできないし値型のときはコピーが発生する
後でフィールドを何の問題もなくプロパティに変更することはできないから,
とりあえず何も考えずプロパティにしとけ

>>320
>>302の場合はまったく同じだよ
違いが出るのは対象がジェネリック型パラメータの場合のみ
353デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 20:05:03
>>353
Saveしてない、なんてオチではないだろうな
355デフォルトの名無しさん:2008/10/20(月) 20:10:32
オレもまっ先に >>354 と同じ発想がうかんだのだが
それはあまりにも…w と思い書けなかった
356デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 20:19:30
>>355
勇気を持って全てをさらけ出してくれませんか?
わからないんです
358デフォルトの名無しさん:2008/10/20(月) 20:26:28
Properties.Settings.Default.Save();
を書いてなけりゃSaveされんだろう?ってことだったんだけど。
359デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 21:03:33
ワロタ
361デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/20(月) 22:21:42
>>361
UseCompatibleTextRenderingはButtonやLabelとかの一部のコントロールにプロパティとして存在する。
363デフォルトの名無しさん:2008/10/21(火) 11:56:48
DataGridViewのColumnsプロパティのようなものを自作するにはどういう方法が一般的なのでしょうか?
やりたいことは、Columnsのようにプロパティ名[インデクサ]が実装したいのと
Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。

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

そもそもそんなやり方は一般的ではないのでしょうか?宜しくお願いします。
364デフォルトの名無しさん:2008/10/21(火) 12:06:59
普通にコレクション作ればいいじゃん
> Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。
このVisibleの変更はDataGridViewColumn.Visibleの変更であってColumnsとは関係ない

まあ実際には大抵internalでDataGridView持ってたりするけどな
365363: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デフォルトの名無しさん:2008/10/21(火) 12:37:45
別アセンブリ。
exe/dll単位。
367363:2008/10/21(火) 12:44:57
ありがとうございます。
すると同アセンブリ内では隠しようがないんですね。フレンドもないようですし…
となるとデータクラスのコンストラクタで親クラスを渡すしかなさそうに思えます。

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

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

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

> さらに言えば、コレクションクラスにはデフォルトでRemoveAtが実装されているようですが、
> これでは外部から削除できてしまいます。外部から要素数の変更はさせたくない場合、
> コレクションクラスの実装は向かないのでしょうか…
やらせたくないなら例外投げればいいだけ。
369デフォルトの名無しさん:2008/10/21(火) 13:09:38
なるほど、例外を投げるという手がありますね。参考になります。
イベントで実装もありかと思うのですが、何れにしろ同アセンブリ内なので
外部クラスからイベントの定義も出来てしまいますね。そこだけが問題です。

しかし実装自体は出来そうなので頑張ってみます。ありがとうございました!
370デフォルトの名無しさん:2008/10/21(火) 13:57:37
0以上の整数しか使わないような変数に積極的にuintを使うのはいい方法でしょうか?
それとも整数は特殊な事情がない限りintで統一するべきですか?
371デフォルトの名無しさん:2008/10/21(火) 14:22:31
符号なし整数はCLS非準拠なので他の言語で使えないかもよ、と
実際VB7では扱い面倒だったしな

private/internalならお好きに
372デフォルトの名無しさん:2008/10/21(火) 15:00:49
2次元配列を作成し
ARRAY[*,0]に得点を入れて
ARRAY[*,0]の順番は変更しないで
ARRAY[*,1]に順位を作成したいと思いるのですがいい方法が浮かばないで困っています
皆さん何かいい方法は無いものでしょうか
373デフォルトの名無しさん:2008/10/21(火) 15:01:27
>>371
> 符号なし整数はCLS非準拠なので他の言語で使えないかもよ、と

おお、そういう落とし穴があったとは・・・
int型に統一させていただきますm(_ _)m
374デフォルトの名無しさん:2008/10/21(火) 15:03:30
>>372
心底意味が分からん。
具体的に値入れて説明してくれ。
375デフォルトの名無しさん:2008/10/21(火) 15:13:44
Console.Writeline("hoge");

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

それが無理なら反転文字とか、アンダーライン文字とか、目立つ文字を表示できないでしょうか?
文書の一部分を強調表示したいんです。
376デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/21(火) 15:40:49
>>375
Console.ForegroundColor = ConsoleColor.Red; とかで切り替えればいいかも。
378デフォルトの名無しさん:2008/10/21(火) 15:49:39
>>377
ありがとうございます、無事変えられました
379デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/21(火) 17:20:37
>>379
こういうのって、「もっとエレガントにかけるかも」って思ってしまうよな…w
381デフォルトの名無しさん:2008/10/21(火) 17:21:25
複数の計算結果を配列に格納する予定なんですが、あいにく得られる計算結果の順番と
配列の順番が逆だったりします。というわけで計算結果は配列の先頭からではなく最後尾から
先頭に向かって格納する必要があるわけですが、これを実現するには


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

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

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

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


ざっと考えて上記のa)〜d)が思いついたんですがどの方法がいいでしょうか?
あるいは他に方法がありますか?
382デフォルトの名無しさん:2008/10/21(火) 17:33:27
初めから要素数が分かってるならbで十分だし(ていうか何故static?)
そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ
383デフォルトの名無しさん:2008/10/21(火) 17:40:32
labelのTextが増えたとき、左に伸びていくようにするには
どうすればいいでしょうか?

例えば、
label1.AutoSize=true;
label1.TextAlign=TopRight;
for(int i = 0; i < 10; i++) label1.Text += "あ";
では右に伸びていってしまいました。
384デフォルトの名無しさん:2008/10/21(火) 17:40:41
>>382
> 初めから要素数が分かってるならbで十分だし(ていうか何故static?)
> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

もしかしてReverseってList<>だけでなく普通の配列にも使えたりしません?
要素数は分かっているので何も考えず計算結果を配列に突っ込んだ後
最後にReverseかければa)〜d)のようなややこしいことをするまでも無い気が・・・
385デフォルトの名無しさん:2008/10/21(火) 17:44:23
もしかしなくても、.NET 3.5では配列はおろかIEnumerable<T>ならReverseが使える。
386デフォルトの名無しさん:2008/10/21(火) 18:35:45
>>382
> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

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

List<int> a;

に対して

Array.Reverse(a);

としたらエラーが返されてしまったのですが。
ちなみに一般的な配列なら問題ありませんでした。
387デフォルトの名無しさん:2008/10/21(火) 18:39:17
a.Reverse();
388デフォルトの名無しさん:2008/10/21(火) 18:50:32
>>387
ありがとう( ´∀`)
389デフォルトの名無しさん:2008/10/21(火) 19:36:09
メソッドに変数を渡して、そのメソッド内で変数を書き換えてかえしてもらうとき
値型なら問答無用でout/refを付ければいいとして、参照型の変数のときはどうすればいいでしょうか?

参照型なら別にout/refは付けなくてもメソッド先での変更はちゃんと反映されるかと思いますが・・・
390デフォルトの名無しさん:2008/10/21(火) 19:42:15
どうしたいかによるとしか
391デフォルトの名無しさん:2008/10/21(火) 19:45:00
例えば、参照型でもそれ自体を書き換えるなら必要。
void f(out object o)
{
o = new object();
}
392デフォルトの名無しさん:2008/10/21(火) 19:56:44
newするかしないかで使い分ければいいということですね
393デフォルトの名無しさん:2008/10/21(火) 20:23:58
使い分けというのは変だな
どうしても必要な場合以外は基本的に参照渡しは使わない,でいいと思う
394デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/22(水) 00:07:16
特別な事情があるか、どうせそのうち丸ごと捨ててやりなおすかと思ってさ
396デフォルトの名無しさん:2008/10/22(水) 01:50:42
C++と違ってC#は構造体にもメソッドを定義できるようにされていると聞きますが、
わざわざクラスではなく構造体でメソッドを定義できるようにした意味は何でしょうか?

メソッドを書くならクラスにするよう統一しても良かったと思いますが・・・
397デフォルトの名無しさん:2008/10/22(水) 01:58:07
わざわざメソッドが定義できるのをクラスに限定するメリットがわからん
398デフォルトの名無しさん:2008/10/22(水) 02:09:36
それ以前にC++でもstructにメンバ関数書けるんだが。
399デフォルトの名無しさん:2008/10/22(水) 02:26:02
C++の場合はデフォルトのアクセス制限がpublicかprivateかの違いしかない。
他は全部classとstructは一緒。

>>396はC#におけるクラスと構造体の違いを知りたいの?
400デフォルトの名無しさん:2008/10/22(水) 03:17:06
C#では構造体とクラスはこれだけ近い存在にされてるのになぜあえて分けているのかが分からないんです。
401デフォルトの名無しさん:2008/10/22(水) 05:02:37
話し聞いてないな。
C++においての違いはほぼ無い。
C#においての違いはそれよりある。
402デフォルトの名無しさん:2008/10/22(水) 08:35:52
>>400
そもそも、C++の構造体にもメソッドが定義できるわけだが。
403デフォルトの名無しさん:2008/10/22(水) 08:51:43
C++ は元々は C との互換性のために struct キーワード残しただけかと。
結局それが、慣例として使い分け方ができて、
C# では言語的にも値型と参照型で使い分けるように変化。
404デフォルトの名無しさん:2008/10/22(水) 13:16:03
デフォルトのアクセス権がちがうだけだよね。あと、慣例ってのは重要なキーワードだな。
405デフォルトの名無しさん:2008/10/22(水) 13:19:57
C++/CLIみたいにref classとvalue classにして
呼び方も参照クラスと値クラスにしたほうがわかりやすかったかもね
406デフォルトの名無しさん:2008/10/22(水) 13:24:33
なんかC#の話じゃなさげなんだけど聞いてくれ。
デスクトップのアイコンにファイルをD&Dすると
開くアプリケーションとかあるでしょ?あれをやりたいんだけど
C# D&DとかでググるとアイコンへのD&Dじゃなく
開いてるウインドウへのD&Dばかりがみつかるのさ。

だれか解説してるサイトか、これぞ、みたいな検索ワード
教えてくれないかなーっと。
407デフォルトの名無しさん:2008/10/22(水) 13:27:01
static void Main(string[] args) { Console.WriteLine(args[0]); }
408デフォルトの名無しさん:2008/10/22(水) 13:34:08
>>407
うわーい。ただの引数になるのか。
確認しますた。おばかでスマソ。
409デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/22(水) 14:09:22
TryParseパターンではnull(default(string[])のほうがいいかも)を入れるのが普通みたい
411デフォルトの名無しさん:2008/10/22(水) 14:14:02
>>410
Str = null(default(string[]);
としたうえで return false; すればよろしいんですね?
412デフォルトの名無しさん:2008/10/22(水) 14:14:34
配列を返値にして要素数0の配列を返す
要素数0に意味があるなら仕方ないのでnull返す
413デフォルトの名無しさん:2008/10/22(水) 14:18:58
TryParseパターンがfalseを返す時は「初期化されていない」って意味だから使えない値を返すべき
str = default(string[]);だよ (str = null;と同じ意味)
値型かジェネリック型の場合は前者だけど参照型なら後者でいいと思う
414デフォルトの名無しさん:2008/10/22(水) 14:24:33
みなさんどうもです。
まとめますと、

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

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

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

>>413
値型の場合は
default();
を採用すればいいと言うのは初耳でした。以前値型の変数にnullを代入して返そうとした
んですがコンパイラに蹴られてしまいました。代わりに default(「値型」); とすればいいとは
知りませんでした。結構有名な手法なんですか?
415デフォルトの名無しさん:2008/10/22(水) 14:37:08
default(値型)はnew 値型()と同じなんだけど後者はなんか値に意味がありそうで嫌でしょ
defaultは本来はジェネリックのために導入された機能で,
default(T)は型パラメータTが参照型のときはnullを返し,Tが値型のときはnew T()を返す
416デフォルトの名無しさん:2008/10/22(水) 14:50:39
なるほど、.Net2.0からの付加機能でしたか>ジェネリック
417デフォルトの名無しさん:2008/10/22(水) 16:16:24
Control.BringToFront()が呼ばれたときに発生するイベントってないのかな?
418デフォルトの名無しさん:2008/10/22(水) 16:58:44
WM_CHILDACTIVATE
419デフォルトの名無しさん:2008/10/22(水) 17:08:08
>>418
Win32APIは出来るだけ使いたくないのでBringToFrontをオーバーライドすることにした。
420デフォルトの名無しさん:2008/10/22(水) 17:12:55
や、WndProcのオーバーライド(またはNativeWindowでのメッセージフック)
だから純粋なマネージドコードだが。
421デフォルトの名無しさん:2008/10/22(水) 18:13:39
"abc123" -> ok
"abc:12" -> ng
みたいにファイル名が有効か判断するメソッドってある?
なければ例外で処理すればいいんだけど
422デフォルトの名無しさん:2008/10/22(水) 18:21:24
Path.GetInvalidFileNameChars とかあるけどドライブ指定できない時点で厳密ではないな
やはり基本は実際に作ること
:だってNTFS的にはパスとして有りなんだぜ .NETからは使えないけど
423デフォルトの名無しさん:2008/10/22(水) 19:40:00
C#でできたソフトってどんなのがあるのでしょうか?
また、普通ソフトってどの言語で作られているものなのでしょうか?
(ここでいうソフトってのは、市販のソフトだったり、フリーソフトだったり。)
424デフォルトの名無しさん:2008/10/22(水) 19:52:45
>>423
マジレスすると実行ファイル開いて
はじめの一行(#!〜)に
perlってあればperl
shってあればシェルスクリプト
ruby(ry

Delphiで作ると Delphi臭がするのはなぜだろうw
425デフォルトの名無しさん:2008/10/22(水) 21:50:02
同じクラス内に最後と引数の個数以外が全く同じメソッド1,2があるとします。

void Method1(int i)
{

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

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

void Method2(int i, intj)
{

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

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

最後の (ココだけ違う) と、引数の個数の違いだけですが律儀に2つのメソッドを記述する必要があるでしょうか?
426デフォルトの名無しさん:2008/10/22(水) 21:55:22
private void うり二つ(int i) { うり二つ… }
void Method1(int i){
 うり二つ(i);
 ここだけ違う
}
void Method2(int i, int j){
 うり二つ(i);
・・・(ココだけ違う)・・・・
}
427デフォルトの名無しさん:2008/10/22(水) 22:01:31
>>426
な、なるほど・・・
428デフォルトの名無しさん:2008/10/22(水) 22:31:01
コンストラクタでよくあるパターンだよなw
429デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/22(水) 23:55:51
参照型はnewしないと使えないって教えられたんですが
string型は参照型なのにnewしなくても使えるのはなんでですか?
431デフォルトの名無しさん:2008/10/22(水) 23:57:31
C#とCLRに組み込まれてるから
簡単に言うと,特別だから
432デフォルトの名無しさん:2008/10/23(木) 00:01:09
なるほど
ありがトン
433デフォルトの名無しさん:2008/10/23(木) 00:06:41
そんなすっとこどっこいな回答で納得しちゃダメw
実際にはnew(インスタンスの生成)しなくても使えているわけではなく、
インスタンスの生成がラップされている、つまり間接的に生成してるだけ。

つまり、別に文字列以外のクラスでも同じように見かけ上newを隠蔽することはできる。
434デフォルトの名無しさん:2008/10/23(木) 00:08:25
( ・∀・)つ〃∩ ヘェーヘェー
435デフォルトの名無しさん:2008/10/23(木) 00:08:43
>>433
ちげーよ。文字列ってのはCIL上はプリミティブ型で、
それを巧妙にクラスに見せかけてあるだけ。
436デフォルトの名無しさん:2008/10/23(木) 00:12:29
>>435
わけのわからん混同しすぎ。
System.Stringが様々な場面で特別扱いされるという事実と
>>430の話は直接関係がない。
437デフォルトの名無しさん:2008/10/23(木) 00:14:36
string str = "Hello World";がなんでnewしなくていいのかという話なら
暗黙にnewされてるからというのは間違いで「特別扱いだから」としか答えようがない
438デフォルトの名無しさん:2008/10/23(木) 00:16:38
String str = new String("Hello World");で統一すれば惑わされずにすむ
439デフォルトの名無しさん:2008/10/23(木) 00:18:35
javaと違ってC#ではできないよそれ
440デフォルトの名無しさん:2008/10/23(木) 00:19:37
new は実行時にヒープにオブジェクトを作ってそれへの参照を返す。
文字列リテラルの場合はコンパイルの段階でメタデータに格納しておき、
実行時にはその文字列への参照を返す。
こういった仕組みの相違が文法にも反映されている。

たぶん。
441デフォルトの名無しさん:2008/10/23(木) 00:19:58
String str = new String("Hello World".ToCharArray());
うはは、無駄無駄無駄!
442デフォルトの名無しさん:2008/10/23(木) 00:24:16
>>436
>>435>>430ではなく>>433へのレスに見えるんだが
443デフォルトの名無しさん:2008/10/23(木) 00:25:32
>>440

違う
stringはCLIの組み込み型
string定数を読み込むIL命令があるの
444デフォルトの名無しさん:2008/10/23(木) 00:25:53
変数sに代入したアルファベットをtextboxに出力するのってどうすればいいんですか?
445デフォルトの名無しさん:2008/10/23(木) 00:28:46
>>443
> string定数を読み込むIL命令があるの
ldstr だよね。通常の参照型は newobj 。
別に>>440で間違ってないと思うけど、どこか勘違いしているなら指摘お願い。
446デフォルトの名無しさん:2008/10/23(木) 00:29:51
俺には>>440>>443が同じことを言っているように見える。
447443:2008/10/23(木) 00:30:31
ああすまんミスリード
コンパイラの話してるのかと思った
448デフォルトの名無しさん:2008/10/23(木) 00:32:38
textbox.Text = s;
449デフォルトの名無しさん:2008/10/23(木) 00:46:35
むしろ全部暗黙newすべき
450デフォルトの名無しさん:2008/10/23(木) 00:57:00
せんでよか
451デフォルトの名無しさん:2008/10/23(木) 01:00:44
ldstrでインターンプールから読むだけ。
stringインスタンスは、インターンプールにまだなければ、
JIT時に実体が作成されインターンプールに保存される。





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

@"(文字列)"

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

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

string str = @"<a href="http://www.google.com" target="_blank">";
453デフォルトの名無しさん:2008/10/23(木) 01:03:43
@使うな
454デフォルトの名無しさん:2008/10/23(木) 01:03:54
>>452
@"""文字列"""
455デフォルトの名無しさん:2008/10/23(木) 01:06:23
>>452
その質問に答えるのは簡単だが、これ読んで他のことも理解した方がためになると思う。
http://www.microsoft.com/japan/msdn/columns/drguinet/drguinet5_update.aspx#drguinet5_update_topic4
456デフォルトの名無しさん:2008/10/23(木) 01:11:36
失礼しました。
@は使わない方向で頑張りますorz・・・
457デフォルトの名無しさん:2008/10/23(木) 01:15:03
使っていいんだが。
>>455は読んだか?
458デフォルトの名無しさん:2008/10/23(木) 02:45:47
>>457
正規表現を使いたいなら@は使うな、ということですよね?
459デフォルトの名無しさん:2008/10/23(木) 02:55:58
  _, ._
(;゚ Д゚)
460デフォルトの名無しさん:2008/10/23(木) 03:01:23
吹いた
461デフォルトの名無しさん:2008/10/23(木) 06:00:49
private void系を並び替える機能ありますか?
462デフォルトの名無しさん:2008/10/23(木) 10:58:01
>>461
List.Sort
463デフォルトの名無しさん:2008/10/23(木) 15:28:56
グラフ(散布図)を作りたいのですが、よくわかりません。
書店に置いてある本は、線や円の描き方は載っているものの、グラフ作成の方法までは載っていないのがほとんどでした。
NPlotも試してみましたが、NPlotの使い方が分からず挫折しました。
グラフの描き方について詳しく書かれている本があれば、教えて欲しいです
464デフォルトの名無しさん:2008/10/23(木) 15:39:04
>>463
座標系とプロットしたい値、それを描画方法する方法が全てじゃない?
全て知ってると思うけど
465デフォルトの名無しさん:2008/10/23(木) 19:18:46

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

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

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

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

YouTube - 9.11真相究明講演会 ベンジャミンvs藤田議員 ダイジェスト版 Part 12
http://jp.youtube.com/watch?v=s3HPMAG5DKk&feature=related
http://jp.youtube.com/watch?v=quHyQL-MbNA&feature=related
466デフォルトの名無しさん:2008/10/23(木) 19:19:17
コピペ君って馬鹿だな、まで読んだ。
467デフォルトの名無しさん:2008/10/23(木) 19:31:05

YouTube - グリフィン博士来日!911真相究明国際会議(2008113イベント)CM
http://jp.youtube.com/watch?v=DmoUVxAMAlc&eurl=http://kikuchiyumi.blogspot.com/
468デフォルトの名無しさん:2008/10/23(木) 19:32:08
コピペ君って馬鹿だな、まで読んだ。
469デフォルトの名無しさん:2008/10/23(木) 19:47:00
書店の本でおすすめを教えてください

分厚いのではなく萌えるC#的なのでお願いつかまつります!
470デフォルトの名無しさん:2008/10/23(木) 19:51:23
薄手のエロ本片手にリッチャーのC#本でも読んどけ
471デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/23(木) 21:35:54
C#とCは違う言語だ。

>>472 それはprintf()のつづり間違いだろ。
474デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/23(木) 23:27:56
今の子供たちの切れやすさと同じです
478デフォルトの名無しさん:2008/10/23(木) 23:53:33
C#2008Expressでネイティブコードを出すにはどうしたらいいですか?
479デフォルトの名無しさん:2008/10/23(木) 23:56:27
ビルドプロセスを弄ってC++のコードをコンパイルできるようにする
480デフォルトの名無しさん:2008/10/23(木) 23:57:17
>>478
C#でC++コンパイラを書く
481デフォルトの名無しさん:2008/10/24(金) 00:14:12
>>478
無い。
むしろ.NETをネイティブだと思うんだ。
482デフォルトの名無しさん:2008/10/24(金) 00:26:25
CodeDOMやReflectionを使えば
C#コードをManaged C++コードに直すことは出来そうなんだがな
Managed C++にしたところで、Console::Writeがprintfになるわけでもないけどね

>>478
ngenじゃだめ?
483デフォルトの名無しさん:2008/10/24(金) 00:31:58
ネイティブコンパイルの話は定期的に出るね。
GC、型システム、BCL(基本クラスライブラリ)をそのままにしてネイティブコンパイルしても、
ほとんど効果がないばかりかマイナスになる可能性が高い。
GC、型システム、BCLを別のものに置き換えればそれはもうC#ではない。
前者のアプローチはjavaにたいしてgcjがやってみたのだがさっぱりなのはご存知の通り。
484デフォルトの名無しさん:2008/10/24(金) 00:48:17
ngen.exeをRunに登録させればいいの?
485デフォルトの名無しさん:2008/10/24(金) 01:04:27
ngen.exe したからといって C/C++ で作ったような exe が出来上がるわけじゃないぞ
依然として実行には .NET Framework が必要
486デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/24(金) 01:26:04
なんて例外が出たのか
try-catchでどう囲んだのか
488デフォルトの名無しさん:2008/10/24(金) 01:27:40
言葉が足りなかったか
ソースとメッセージをそのまま貼ってね
489デフォルトの名無しさん:2008/10/24(金) 02:11:10
>>478
何のために?
つか、実行時はネイティブに変換されるんだが、それじゃダメなのか?
490476:2008/10/24(金) 04:01:56
>>477ありがとうございます。すぐ切れてしまうのですね。

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

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

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

意味がわかりにくい文章ですみません。もし分かる人がいたらおしえてください。
491476:2008/10/24(金) 04:08:49
事故解決しました。。FormLoadに書いてあった。。

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

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

すみませんがよろしくお願いします。もう寝ますので明朝みます。
493デフォルトの名無しさん:2008/10/24(金) 07:49:01
教えてください。
C# uniq
で、
http://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デフォルトの名無しさん:2008/10/24(金) 08:04:12
>>493
だめ。
495デフォルトの名無しさん:2008/10/24(金) 08:29:05
イエスノーキャンセルダイアログで

if (MessageBox.show(なんとか) == DialogResalt.Yes)
{
はいが押されたときの処理
{
else if ==DialogResalt.No //ここどういうふうに書くの?
{
いいえが押されたときの処理
}
else
{
キャンセルの処理
}
496デフォルトの名無しさん:2008/10/24(金) 08:59:53
DialogResult result = MessageBox.show();

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

じゃダメ?
497デフォルトの名無しさん:2008/10/24(金) 09:03:20
一時変数に突っ込みたくないならそこ if じゃなくて switch にするって手もあるけどやめとけ
498デフォルトの名無しさん:2008/10/24(金) 09:19:36
>>496-497
ではDialogResultの処理はifで統一しときます
ありがとうございました
499デフォルトの名無しさん:2008/10/24(金) 10:35:13
IntPtrって何の略?
Int32やInt64と同じように,ポインタサイズの整数型ってこと?
500デフォルトの名無しさん:2008/10/24(金) 11:10:56
>>499
まんまInteger Pointerの略で良いと思う。
システムによってポインタのサイズとint型のサイズは必ずしも同じではないから、区別されてる。
501デフォルトの名無しさん:2008/10/24(金) 11:20:11
起動しているプロセスを、読み込んでいるファイル名込みで取得するにはどうしたらよいですか?
たとえば、Notepadで、orange.txtというファイルを読み込んでいる場合、
if(Process.GetProcessesByName("Notepad.exe").Length == 0)
で、Notepadが起動していることはわかります。
同時にorange.txtと、banana.txtというファイルを読み込んでいる場合に、
区別して扱いたいです。
502デフォルトの名無しさん:2008/10/24(金) 11:25:56
notepadならMainWindowTitleで分かるんじゃない?
503デフォルトの名無しさん:2008/10/24(金) 12:11:38
スマートな方法はないわな
504デフォルトの名無しさん:2008/10/24(金) 12:18:48
>>492
別に良いんじゃないの?
デザイナーで貼り付けたDataSetなら、直接ソースを書き換えるより
デザイナーでDataSetのオプションのModifiersをPublicにする方が良いんじゃね?
505デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/24(金) 14:54:17
Activator.CreateInstance
507デフォルトの名無しさん: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デフォルトの名無しさん:2008/10/24(金) 15:20:30
>>493
uniqになってないしw
ついでに、Enumerable.Distinctがある今ではそいつは不要だな
509デフォルトの名無しさん:2008/10/24(金) 15:40:48
>>502
ばっちりでした。
ありがとうございます。
510デフォルトの名無しさん:2008/10/24(金) 16:24:19
質問です。

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

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

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

よろしくお願いします。
511デフォルトの名無しさん:2008/10/24(金) 17:20:07
>>508
Enumerable.Distinctですか。

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

というのですが、例示するとどうなりますでしょう?
512492: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デフォルトの名無しさん:2008/10/24(金) 20:35:35
作法云々じゃなくて普通のプログラミングセンスしてれば
そんなことをしたいとは思わないはずだと思う。

逆に言えば、そんなことをしたいと思うのは99.99%どこか設計がオカシイんだよ。
515デフォルトの名無しさん:2008/10/24(金) 20:56:02
IncrementProgressbar
こんなもんコントロールをpublicにするのと変わらん
フォームの「役割」を考えるんだ
516デフォルトの名無しさん:2008/10/24(金) 21:00:52
邪悪なBSDで邪悪なDephiを用いて邪悪な.NETアプリ
http://pc11.2ch.net/test/read.cgi/mac/1224839401/
消しゴムじゃないMONOを使ってみるスレ 2個目
http://pc11.2ch.net/test/read.cgi/tech/1100616350/
517デフォルトの名無しさん:2008/10/24(金) 21:08:16
do〜while文でループ処理をしています。
ループ処理を実行し始めてから次のループ処理を実行するまで最低でもxxx分はあけておきたい
という場合にはどうプログラムを組んだらいいでしょうか?

ループ処理が終わった時点でxxx分経っていなければ、どこかでxxx分になるまで待つ
必要があります。反面一つのループ処理にxxx分以上かかった場合は待つことなく
即次のループ作業に入らせたいです。
518デフォルトの名無しさん:2008/10/24(金) 21:10:47
>>517
ループの先頭で、clock()とかで時刻をとって、ループの最後で一定時間たってるか確認して、
足りなかったらsleep()系の関数で止まる。
519デフォルトの名無しさん:2008/10/24(金) 21:20:49
ゲームならスレッド止めないでApplication.Idleイベント使った方がいいよ
520デフォルトの名無しさん:2008/10/24(金) 21:26:04
>>518
>>519
どうもです。

sleep()
Apliclation.Ide

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

出来ました。
これ使えればなかなか面白いことが出来そうです。
523デフォルトの名無しさん:2008/10/24(金) 21:58:49
foreach(int a in GetIntegerList())
{
  yield return a;
}

これをもっとシンプルに書けない?
524デフォルトの名無しさん:2008/10/24(金) 22:02:13
それだけならreturn GetIntegerList();でいいだろ
前後にもyieldがあるなら,前後のyieldをそれぞれ別のメソッドに分けてEnumerable.Concat
525デフォルトの名無しさん:2008/10/24(金) 22:10:14
>>524
ありがと
526デフォルトの名無しさん:2008/10/24(金) 22:13:44
string[]をstringにするときってどうやるの?
527デフォルトの名無しさん:2008/10/24(金) 22:16:05
String.Concat
528デフォルトの名無しさん:2008/10/24(金) 22:23:59
今から本格的にC#を勉強する!
おまいらよろしく。
529デフォルトの名無しさん:2008/10/24(金) 22:55:51
質問していいのは一通り勉強してからだよ
530デフォルトの名無しさん:2008/10/24(金) 22:58:45
どうして?
531デフォルトの名無しさん:2008/10/24(金) 23:03:24
ガイドラインって通読しておくもの?
532デフォルトの名無しさん:2008/10/24(金) 23:04:40
>>530
エスパー不足だから

>>531
読まないよりは読んだ方がいい
533デフォルトの名無しさん:2008/10/24(金) 23:05:04
馬鹿にされたくなければ「クラスライブラリの開発者向けガイドライン」くらいは読んどいた方がいいんじゃね
534デフォルトの名無しさん:2008/10/24(金) 23:06:22
>>530
入門者は変にいろいろ考えるよりも勉強した方が早い
535デフォルトの名無しさん:2008/10/24(金) 23:09:13
>>529
こちら,スネーク。了解した!
536デフォルトの名無しさん:2008/10/24(金) 23:18:51
でもわからない事はきいたほうがはやいじゃん?
537デフォルトの名無しさん:2008/10/24(金) 23:25:49
textBoxで、下地の背景を表示したいと思います。
textBoxを半透明にするにはどうしたらよいですか?
普通に配置して、プロパティで選択すると、
できないといわれます。
代わりに、textBoxの上にpictureBoxを配置したら、
透明にはできましたが、textBoxは下になって隠れてしまって、
文字入力できません。
538デフォルトの名無しさん:2008/10/24(金) 23:27:44
初心者のみなさん
こまったちゃんが>>529みたいなこと言ってるけれど
好きな時にすきなだけ質問していいんだよ
539デフォルトの名無しさん:2008/10/24(金) 23:43:44
>>538
なんだか意識が小学生だね君ってw
行動の基準が「先生に怒られるかどうか」って感じ。

良いか悪いか(先生に怒られるかどうか)じゃなくて、
そうしないとお前が損するんだぜって話だと思うんだが。
540デフォルトの名無しさん:2008/10/24(金) 23:44:16
>>537
普通には無理
それが重要ならWPF池
541デフォルトの名無しさん:2008/10/24(金) 23:54:39
>>537
Managed DirectX
542デフォルトの名無しさん:2008/10/25(土) 00:10:39
>>527
ありがとう。String.Concatでできました。
543デフォルトの名無しさん:2008/10/25(土) 00:20:23
>>540
WPFしてみます。
がっ。デザイナが開かず、
「TrueTypeフォントのみがサポートされています。
これはTrueTypeフォントではありません」
って、これってどれよ?
544デフォルトの名無しさん:2008/10/25(土) 00:31:52
再起動してみる
VSのフォント関連の設定をリセットしてみる
SP1入れてないなら入れてみる
VS再インストール
545デフォルトの名無しさん:2008/10/25(土) 00:31:58
>>543
これ=Managed DirectX
546デフォルトの名無しさん:2008/10/25(土) 01:52:44
大量のテキストデータから指定した複数の単語を含む文章を検索するプログラムを
作ろうと思っています。各社のニュース系のサイトから記事を自動的に収集してくる
プログラムを作り、記事を保存します。社によっても違いますが、だいたいニュース系の
サイトは半年以内にリンク切れしてしまうので、そうなるまえに記事を自動的に収集して
おき、必要に応じて検索して過去の記事を探してくるプログラムを作りたいわけです。

そこで大量のテキストファイルから合致する記事を探し出してくるプログラムを作る必要
があるわけですが、C#でそういった検索プログラムを作る上で参考となる手法はあるで
しょうか?とくに無ければ検索ワードを入れると過去記事を一から順番に巡回して探し
だす、何の変哲もないプログラムにしようかと思っています。
547デフォルトの名無しさん:2008/10/25(土) 02:20:39
めんどくさいからナマズに探させればいいじゃん
548デフォルトの名無しさん:2008/10/25(土) 03:23:13
すごい基本的なことなんですが本で勉強していて

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

ってなってました。
結局publicでアクセスできるんだから
カプセル化されてないような気が?
どういうことなんですか?
549デフォルトの名無しさん:2008/10/25(土) 03:28:10
プロパティにしておけば、値が設定される時にその値を検査する仕組みを入れたり、
変数の実体を無くして動的に計算して値を返すなんてことも出来るし。
変数のままpublicだったらそんなこと出来ないだろ?
550デフォルトの名無しさん:2008/10/25(土) 03:31:03
それはそうだと思うんですが
カプセル化するためっていうことを考えると
プロパティもprivateにするべきじゃないかと思いました
551デフォルトの名無しさん:2008/10/25(土) 03:33:55
じゃあ、クラスの他のメソッドを通じて変数に値を設定することも、
値を読み出すことも出来ちゃだめってことにならない?
552デフォルトの名無しさん:2008/10/25(土) 03:40:40
>>547
webブラウザを通して検索させるということですか?
553デフォルトの名無しさん:2008/10/25(土) 03:49:55
>>552
インターフェースはCCGIに限らないよ
554デフォルトの名無しさん:2008/10/25(土) 04:02:58
カプセル化をちょっと誤解してました。
すいません。
ところで
クラス内のフィールドにアクセスする時も
全部プロパティ経由の方がいいんですか?
555デフォルトの名無しさん:2008/10/25(土) 08:09:38
本当に誤解が解けたのが疑問だが
全部プロパティ経由でおk
556デフォルトの名無しさん:2008/10/25(土) 09:52:20
List<string>とかはフィールドのまま使うしかないですよね?
557デフォルトの名無しさん:2008/10/25(土) 10:24:25
意味不明です
558デフォルトの名無しさん:2008/10/25(土) 10:40:29
コレクションもプロパティにしていい
ただしList<string>型のパブリックプロパティはガイドライン違反だからIList<string>として返すとか
559デフォルトの名無しさん:2008/10/25(土) 11:31:00
初めて聞いた
そのガイドラインどこにある?
560デフォルトの名無しさん:2008/10/25(土) 11:35:41
http://msdn.microsoft.com/ja-jp/library/ms182142(VS.80).aspx
これだね
FxCopのガイドラインまで気にしてたらキリがないかもしれないけど
たまに話題になる有名なやつだから
561デフォルトの名無しさん:2008/10/25(土) 11:37:25
どうもどうも
562デフォルトの名無しさん:2008/10/25(土) 11:49:33
>>555
なんか端折った話?

publicな変数をインターフェースを変えることなくプロパティに出来るのが
C#のプロパティのメリットじゃないのか?
563デフォルトの名無しさん:2008/10/25(土) 11:56:44
それは間違い
publicフィールドをプロパティに変えたら使用側がエラーになる場合は多い
面倒なら自動プロパティでいいから全部プロパティにするべき
564デフォルトの名無しさん:2008/10/25(土) 12:04:41
>>544
SP1にバージョンアップし(3時間もかかった…)、
WPFを使ったら、テキストボックスの背景に、
画像を表示できました!
アドバイス多謝。
565デフォルトの名無しさん:2008/10/25(土) 12:34:19
C#ってSTLのvectorに相当するコレクションある?
566デフォルトの名無しさん:2008/10/25(土) 12:35:28
List<T>
567デフォルトの名無しさん:2008/10/25(土) 12:35:54
WPFって実用段階に入ってるんだっけ?
568デフォルトの名無しさん:2008/10/25(土) 12:40:23
とっくの昔に.NET3.0と一緒にリリースされて
.NET3.5にバージョンアップしてVS2008で正式サポートされてる
569デフォルトの名無しさん:2008/10/25(土) 13:01:59
いやそれは知ってるけど数年前の普及価格帯のノートPCとかでも
普通にストレスなく動くのかと。
570デフォルトの名無しさん:2008/10/25(土) 13:05:13
余裕
571デフォルトの名無しさん:2008/10/25(土) 13:15:22
WPFの質問です。
textBoxでボックスの幅で折り返しして、
複数行を表示するにはどうしたらいいですか?

普通のFormの場合には、
textBoxの右上に小さい矢印が出て、
そこをクリックすると、multilineを選択できました。

ひょっとしてtextBoxでなくて、
textBlockを使うのかなと思ったのですが、
こちらでは文字入力できず。
572デフォルトの名無しさん:2008/10/25(土) 13:23:09
573デフォルトの名無しさん:2008/10/25(土) 13:25:02
>>571
MaxLineが1じゃなけりゃ普通に複数行じゃない?
リターンキーで改行したいなら、AcceptsReturnにチェック
574デフォルトの名無しさん:2008/10/25(土) 13:28:17
>>571
少しは自分で調べたの?
プロパティ見たらTextWrappingとかAcceptsReturnとかすぐに見つかったんだが
575デフォルトの名無しさん:2008/10/25(土) 15:34:27
みなさんありがとう。
調べてMaxLinesの値を10000とかにはしてみたのですが、
なぜか失敗してました。
TextWrappingは見逃してました。
textBlockのほうを見て混乱してたかも。

WPFは初めてなので、ちょっと勝手が違ってとまどってます。
msdn見てたら、むちゃくちゃ強力ですね。
576デフォルトの名無しさん:2008/10/25(土) 16:07:07
WPFは柔軟な代わりに結構複雑で難解だよな
577デフォルトの名無しさん:2008/10/25(土) 16:10:06
慣れの問題だよ
578デフォルトの名無しさん:2008/10/25(土) 16:28:27
WPFは色々いじってみたいけど、認知度がやたらと低いのが難点。
表とかアニメーションとか簡単に表示させられるし、とても魅力的ではあるんだけどね。
579デフォルトの名無しさん:2008/10/25(土) 18:14:52
そもそも公開しなくて済むならそれにこしたことはない
ほんとに公開する必要あるの?
580デフォルトの名無しさん:2008/10/25(土) 18:29:39
>>563
マジっすか・・・
参考までにどういうケースでおかしくなるか2、3教えてくれん?
Reflection絡みぐらいしか思いつかん。

自動プロパティ使えるといいんだけど、うちぁVS2005だからなぁ・・・
581デフォルトの名無しさん:2008/10/25(土) 18:38:40
違いなら

・ref, out の動作
Int32.TryParse("...", ref inst.Field);

・フィールドのフィールド
inst.Field.Field = value;

・データバインディング全般(リフレクションベースなので)
ctrl.DataSource = values;

個人的にはパブリックフィールド使いたいのなんて値を表すような
クラスが大半だろ?ってことはバインディングに使われやすいわけ
だろ?なんで初めからプロパティにしない?と思う。
582デフォルトの名無しさん:2008/10/25(土) 18:42:35
> publicな変数をインターフェースを変えることなくプロパティに出来るのが
> C#のプロパティのメリットじゃないのか?
privateなフィールド+アクセサだとobj.GetFoo()やらobjSetBar(123)とか書くの面倒だから
っていうのが第一にあると思うぞ
583デフォルトの名無しさん:2008/10/25(土) 18:47:01
javaだとそういう見にくいコードになるね
584デフォルトの名無しさん:2008/10/25(土) 18:54:59
フィールド直接見せるのはダメだろJK

でもOOPとしてオブジェクトは操作と属性を持つってなってんのに属性を見せないって変じゃね?

の解としてプロパティ
585デフォルトの名無しさん:2008/10/25(土) 18:57:39
>>582
そうだけどコンポーネントモデルにおけるいわゆる「プロパティ」が
メタデータレベルで一級の扱いを受けるようになったことのほうが
大きい。
一級扱いだから「プロパティ」そのものにアトリビュートが付けられる
ようになったしアクセスするオブジェクトのモデル(リフレクション)も
整理された。

わかりにくいなら例えば Browsable アトリビュートは「どれ」に付け
るべきかって話を考えてみるといい。セッタかゲッタ、クラスだと
意味的に変だろ?なら型のメンバとしてサポートしなきゃと。

・・・という話があるわけなのだが C# に詳しくない人が単なるシンタ
クッスシュガーだとプロパティを判断して迷宮に迷い込むと
586デフォルトの名無しさん:2008/10/25(土) 19:11:36
>>581
サンクス。

ref、outに使えないのは知らなんだ。
滅多に使わないからなぁ。>ref、out

フィールドのフィールドは良く分からなかった。
そういうコードが出てきた時に気にしてみるよ。

>個人的には
個人的な話をすると、バインドするつもりが無かったデータのクラスを
後から何かにバインドすることが殆ど無いので。
587デフォルトの名無しさん:2008/10/25(土) 20:42:55
>>581のフィールドのフィールドの例は,前の方のFieldが値型の場合
プロパティに変えたらコンパイルエラーになる
一番やっちゃいそうな例だね
たぶんどっかでやってる
588デフォルトの名無しさん:2008/10/25(土) 23:19:48
プログラムを始めて苦節3年・・・ やっと自分のソフトを開発した。
英単語記憶&テスト付き高機能単語帳だ。しかし、Vectorにうpろうとおもったら
なんか6000語登録してあるとかいうソフトがたくさんある・・

著作権もあるだろうし、単語登録なんてできねえ。こりゃ、ダウンロード0だな・・
589デフォルトの名無しさん:2008/10/25(土) 23:23:40
>>588
ネットの英和辞書からデータをダウソして、そのソフト用のデータを作成するツールを作って一緒に配布するんだ。
590デフォルトの名無しさん:2008/10/25(土) 23:28:03
そりゃ、ダウンロード0だな
591デフォルトの名無しさん:2008/10/25(土) 23:32:29
>>588
「テスト付き」ここがどういう仕組みか次第だな
出来がいいならデータの拡張だけで人気でるかもね
592デフォルトの名無しさん:2008/10/25(土) 23:38:40
>>588
お前のは単語数いくつ?
593デフォルトの名無しさん:2008/10/26(日) 00:28:37
Settingファイルが実行ファイルと同じフォルダに出来ない
MicrosoftとかAppleとかRealのデータフォルダ入ってるとこに自分の名前入っててクソワロタ
594588:2008/10/26(日) 01:50:59
>>589
そんなことできるのかい?できるなら、是非やりたいなあ。単語データがたくさんあれば
だいぶ目鼻がつくよ。
>>591
テスト機能は、おいらが英語のTOEIC受けるときにこういう機能があればいいというのは
全部実装したから、それは目玉だよ。われながら。。かなりインターフェイスとかも
自信があるんだ。
>>590
今のままだと0だとおもうよ。。実際。
>>592
今のところ0だよ。

すれ違いなので、この辺にしときます。みんなありがとう。
595デフォルトの名無しさん:2008/10/26(日) 02:51:09
program.csから開始するのがデフォなの?
次どこに飛ばされるの?
596デフォルトの名無しさん:2008/10/26(日) 06:26:08
ファイルパスからファイル名だけを得る奥義を私だけにコッソリ伝授してください
597デフォルトの名無しさん:2008/10/26(日) 06:33:03
>>596
質問する前に検索しろ。
「C# ファイル名 取得」でググればすぐ出てくるだろ。

というか検索しなくてもだいたい想像つくだろw
598デフォルトの名無しさん:2008/10/26(日) 06:43:15
ファイルパス - ディレクトリパス = ファイル名までは考えたんですけど、
ここでグーグル先生に頼ったら負けかなと思っている
599デフォルトの名無しさん:2008/10/26(日) 06:43:55
2chに頼る方が負けだろ
600デフォルトの名無しさん:2008/10/26(日) 06:44:30
2chにも頼るなよ負け犬
601デフォルトの名無しさん:2008/10/26(日) 06:45:13
俺はいつ同じ書き込みをしたんだ
602デフォルトの名無しさん:2008/10/26(日) 06:49:48
じゃあどうすれば勝てるって言うんですか!!
603デフォルトの名無しさん:2008/10/26(日) 06:53:39
調べる気がないならfor文使えばいい
604デフォルトの名無しさん:2008/10/26(日) 06:53:40
今、問題のファイルパスはローカル変数sに入ってます
この文字列がファイルパスだということをプログラム上まだ知らせていません
自動的にファイルパスだと理解してくれてるんですか?
605デフォルトの名無しさん:2008/10/26(日) 06:57:32
System.IO.Pathが怪しい
606デフォルトの名無しさん:2008/10/26(日) 07:03:08
神はどうしても私を天才プログラマーにしたいようです
自己解決しました
607デフォルトの名無しさん:2008/10/26(日) 10:29:11
いや、つまんないから
608546:2008/10/26(日) 11:10:33
以前このスレでデータベースについて質問した者です。

もぐらを使えばいいとのことでしたが、できればデータベースとウェブデータ収集プログラムは
一心同体のものにしたいと思っています。データベースと収集プログラムを別々で起動する
方式にしては使い勝手が悪いので・・・

つきましては、「収集プログラム」の中にデータベースにインデックスを作製して格納する機能を、
「閲覧プログラム」にはデータベースに作製されたインデックスをもとに素早く検索してくる機能を
実装したいのですが、これを実現するにはデータベースを一からプログラムする必要があるでしょうか?
609デフォルトの名無しさん:2008/10/26(日) 11:22:53
Namazuがどういうことをしているのか調べたのか?
610デフォルトの名無しさん:2008/10/26(日) 14:31:32
>>588
ダウンロードしたいのですが・・
611デフォルトの名無しさん:2008/10/26(日) 14:48:11
>>609
ナマズはCGIとして動く別アプリかと・・・
612デフォルトの名無しさん:2008/10/26(日) 16:30:34
使いたいデータベース名(SQL Server, MySQL, PostreSQL, ...etc)と、"全文検索"でググレ
613デフォルトの名無しさん:2008/10/26(日) 17:06:23
>>608
収集プログラムを起動したら、そのプログラムからデータベースを起動すればいいだけ。

一般的なデータベースは、バックグラウンドで自動起動するけどね。
614デフォルトの名無しさん:2008/10/26(日) 17:46:44
マウスホイールのイベントを
this.MouseWheel += new MouseEventHandler(XXXXXX)
と実装していたんですが、マウス(というかドライバ)を交換すると
このイベントが来なくなりました。
ドライバによって違うものなんでしょうか
615614:2008/10/26(日) 17:49:49
すいません。日本語おかしいですがおねがいします。
616デフォルトの名無しさん:2008/10/26(日) 17:51:21
ホイール自体は使えてるの?
617デフォルトの名無しさん:2008/10/26(日) 18:01:59
使えています。ただIEなどをスクロールしても微妙に動きが違います。
618デフォルトの名無しさん:2008/10/26(日) 18:06:36
たまにキーボードの矢印キーを送るようなマウスはある
619デフォルトの名無しさん:2008/10/26(日) 18:08:58
WM_MOUSEWHEELに直結したイベントだから.NETがどうのというレベルじゃないね
620デフォルトの名無しさん:2008/10/26(日) 18:09:23
ユーティリティが機能追加のためにいろいろやってるケースだな
621614:2008/10/26(日) 18:57:24
皆様どうもありがとうございます。
なんかどうにもなりそうにないのでドライバ戻します。

業務での要求じゃなくてよかった…
622デフォルトの名無しさん:2008/10/26(日) 19:04:00
コントロールパネルとかで設定できるなんてことはない?
623デフォルトの名無しさん:2008/10/26(日) 19:16:23
WebBrowserクラスを使ってタブブラウザを作りたいんですが、WebBrowserで開いたページのリンクを開くと、IEが起動してしまいます。
どうすれば新しいタブで開くように出来るんでしょうか?
624614:2008/10/26(日) 19:39:30
>>622
コンパネ→マウスからホイールでスクロールする行数は
設定できています。

614ではXXXXXX関数の中で、スクロールする量を設定して
スクロールさせているのですが、このXXXXXXが呼ばれません。
が、スクロール自体はするんです。それは多分コンパネで
設定した量が反映されているのだと思います。

なので、このイベント使わない方法でスクロールさせている
のかなあと。
625デフォルトの名無しさん:2008/10/26(日) 19:42:14
>>623
レジストリ操作してデフォルトのブラウザをおまえさんの作ったブラウザに設定する。

レジストリとはこういうもの↓
http://watcher.moe-nifty.com/memo/2006/10/ie__2cb2.html
C#でレジストリを操作↓
http://dobon.net/vb/dotnet/system/registrykey.html
http://dobon.net/vb/dotnet/system/registrykey.html
あとは、ぐぐって。ぐぐればなんとかなるよ。
626デフォルトの名無しさん:2008/10/26(日) 19:53:53
>>623
普通には無理。

newwindow2イベントで自分をブラウザとして登録しないといけない。
http://support.microsoft.com/kb/815714/ja
ここら辺を参照してみるといい。
627デフォルトの名無しさん:2008/10/26(日) 20:10:22
>>612
> 使いたいデータベース名(SQL Server, MySQL, PostreSQL, ...etc)と、"全文検索"でググレ

やはりデータを格納するときか、データを取り出すときにこれらのデータベースアプリを
別途立ち上げる必要がありますか・・・
628623:2008/10/26(日) 20:23:05
返信ありがとうございます。

ド素人のため、出来ればレジストリを使わない>>626の方法を使いたいと思います。
axWebBrowserを使うのは初めてなので、また困ったら質問に来ます。
629デフォルトの名無しさん:2008/10/26(日) 20:38:26
SQLiteだったら、アプリに直接組み込める。
630デフォルトの名無しさん:2008/10/26(日) 20:48:41
>>629
VS2005でプログラムを組んでいるんですが、そこでも直接組み込むことはできるんでしょうか?
631デフォルトの名無しさん:2008/10/26(日) 20:55:43
つSystem.Data.SQLite
632デフォルトの名無しさん:2008/10/26(日) 21:01:14
>>631
> つSystem.Data.SQLite

なんと、VS2005にデフォで用意されていた機能でしたか(´・ω・`)
633デフォルトの名無しさん:2008/10/26(日) 21:05:51
おやそうじゃないよw
ググってみ
634デフォルトの名無しさん:2008/10/26(日) 21:07:52
今ならSQL Server Compact Editionという手もあるな
635デフォルトの名無しさん:2008/10/26(日) 21:11:19
mdbファイルでもいいんじゃね?
636デフォルトの名無しさん:2008/10/26(日) 22:39:20
現在C#.net(2005)にてWindowsForm内のコントロールを
ArrayList()に格納した後に、その要素の中の一番目に
フォーカスを最終的に当てたいと考えているのですが
うまく行きません。どうすれば良いでしょうか?
※for each 文を使用してコントロール要素にフルアクセスし
た場合は出来ます。

//エラー 1 'aryAll' は '変数' ですが、'メソッド' のよう
に使用されています。
ArrayList aryAll = new ArrayList();
foreach (Control c in this.Controls)
{
aryAll.Add(c);
}
aryAll(0).focus();

637デフォルトの名無しさん:2008/10/26(日) 22:44:36
aryAll[0].Focus()じゃないの
ArrayListは推奨しないけど
638デフォルトの名無しさん:2008/10/26(日) 22:59:49
>>637
サンクス!!W

VB.NETとコードの文法がごっちゃになってましたW
639デフォルトの名無しさん:2008/10/27(月) 06:11:08
textBox1上のIBeam?(マウスじゃなくて書くときに出る縦棒)の位置を一番初めに飛ばすにはどうしたらいいですか?
640デフォルトの名無しさん:2008/10/27(月) 06:17:16
textBox.Select(0,0)じゃなかったか
641639:2008/10/27(月) 06:28:24
>>640
できました
ありがとうございます
642デフォルトの名無しさん:2008/10/27(月) 07:46:03
>>628

vbだけど
http://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserNewWindow2Event.htm
ここにやりたいことと近いもんが載っている。
643デフォルトの名無しさん:2008/10/27(月) 09:58:06
ひとつ教えてくだしゃんせ。

public void method1(){
string s = 定義;
}

とすれば、

private void method2(){
if s != 定義
}

と呼べると思ったのだけど、sは現在のコンテキスト内に存在しないというエラーになります。
メソッド2からメソッド1で指定したstringを参照するには、どうしたらいい?
644デフォルトの名無しさん:2008/10/27(月) 10:00:57
すみません質問です
Buttonコントロールをオーナードローで画像表示したいのですが
Buttonコントロールが押し込まれている状態であるかを取得する方法が分かりません
ご教授願えませんでしょうか
645デフォルトの名無しさん:2008/10/27(月) 10:05:04
class Hoge{
string s = null;

public void method1(){
s = 定義;
}

private void method2(){
if s != 定義
}

こうすりゃいいんじゃね
646デフォルトの名無しさん:2008/10/27(月) 10:10:32
>>643
sをクラスのメンバ変数にする。

private string s;

public void method1(){
  this.s = 定義;
}

private void method2(){
  if this.s != 定義
}
647646:2008/10/27(月) 10:11:05
や、かぶった。
648デフォルトの名無しさん:2008/10/27(月) 10:17:19
>>644
無かったっけと思ったら見当たらないねー
とりあえずBM_GETSTATEを使えば取れるだろうけど
649デフォルトの名無しさん:2008/10/27(月) 10:37:25
>>645、646
thanks!
これをクラスのメンバ変数というんだ。
メンバ変数とは、クラス直下で指定する変数のことなのね。
ふむふむ。VisualC#ではフィールドというと。
それに対して、メソッド内部で指定するのはローカル変数。
ひとつもふたつも勉強になった気分。
650デフォルトの名無しさん:2008/10/27(月) 10:57:15
回答ありがとうございます
BM_GETSTATE(f2)で取得してみましたが、ボタンを押しこんだ状態では
BST_PUSHED(4)ではなくBST_FOCUS(8)が帰ってきてしまい取得できません
12あたりが返ってくるかと思ったのですが、呼び方がおかしいのでしょうか…
651デフォルトの名無しさん:2008/10/27(月) 11:18:25
横入りスマソ

極端な話クラス内フィールドなんて無くても構わなくない?
メソッドの引数で値のやりとりを完結させることってじゅうぶん可能だろ。

フィールドの怖いところはメソッドの預かり知らないところで値が書き換えられる
可能性があるという点だ。一昔前のC言語のグローバル変数の怖さといったら
伝わるかな?俺にはフィールドというのは、そのグローバル変数に匹敵する
怖さを持ち得ていると思うんだが、おまいらは正直どう思ってる?
652デフォルトの名無しさん:2008/10/27(月) 11:25:22
メソッドが終了した後も値が残ってなきゃ困るだろ
イベント駆動とかで

引数をやり取りするにしてもクラスにまとめないとやりにくいし
653デフォルトの名無しさん:2008/10/27(月) 11:26:43
イベントハンドラ内のローカル変数って使い終わったらCloseするのがベストなの?
654デフォルトの名無しさん:2008/10/27(月) 11:43:45
>>652
そういう値は呼び出し元のメソッドに参照渡しすればいい
655デフォルトの名無しさん:2008/10/27(月) 11:44:04
WPFのテキストボックスで、非フォーカス時に選択範囲を表示させることってできる?
656デフォルトの名無しさん:2008/10/27(月) 11:55:43
>>654
良く意味が分からん
イベント駆動のプログラムではメソッド全部終わって
次のイベントが来たらまた一からメソッドが立ち上がるだろ
前のイベントと次のイベントの間でどうやって値をやり取りするかという話になるだろ
657デフォルトの名無しさん:2008/10/27(月) 11:57:24
静的なメソッドしか頭になさそう。
658デフォルトの名無しさん:2008/10/27(月) 12:11:04
>>650
取れなかった。
んー、リフレクション使ってButtonBaseのGetFlagを0x2で呼び出せば取得できるみたい。
描画とかどうやってんだろ。
659デフォルトの名無しさん:2008/10/27(月) 12:13:50
>>634
SQLCEって全文検索できたっけ?
660デフォルトの名無しさん:2008/10/27(月) 12:35:39
>>658
ありがとうございます。
リフレクションなんて触ったことないですが頑張ってみます!
よくそんなの見つけられますね^^;
661デフォルトの名無しさん:2008/10/27(月) 17:32:36
{}の中で宣言した変数は{}の中でしか使えないよ。
662デフォルトの名無しさん:2008/10/27(月) 18:49:56
>>651
OK.
ではフィールド使わずに任意の単位ベクトルを表すクラスを書いてみて。
663デフォルトの名無しさん:2008/10/27(月) 19:06:08
NumericUpDownのvalueを変数aに代入する方法を教えてください
664デフォルトの名無しさん:2008/10/27(月) 19:32:08
Decimal型だから任意の型にキャストすれば?
665663:2008/10/27(月) 20:04:54
private void button1_Click(object sender, EventArgs e)
{
int total;
int a = (int)numericUpDown1.Value;
int b = (int)numericUpDown2.Value;
total = a * b ;
string total_str = total.ToString();
textBox1.Text = total_str;
}
なんとかできました
>>664
ありがとうございました
666デフォルトの名無しさん:2008/10/27(月) 21:12:40
public Form1( )
{
InitializeComponent( );
this.webBrowser1.Navigate( "http://id.fc2.com/index.php" );
}

private void webBrowser1_DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs e )
{
if ( this.webBrowser1.Url.ToString( ) == "http://id.fc2.com/index.php" )
{
HtmlElement submit = webBrowser1.Document.All.GetElementsByName( "Submit" )[0];
submit.InvokeMember( "click" );
}
}
WebBrowserを使ってログインできるようにはしたんですが,
ログインする判断として、DocumentCompleted以外にいいイベントやアプローチ方法ありませんか?
ボタンは使わずに起動すると全自動でログインできるようにしたいです。
ご教授お願いします。
667デフォルトの名無しさん:2008/10/27(月) 21:29:23
>>662
ああ、まぁインスタンス同士の四則演算させるときとかじゃ必要かもな。
でもそれは演算のオーバーライドとか特殊なケースなわけで一般的じゃないだろ。
668デフォルトの名無しさん:2008/10/27(月) 21:31:31
演算のオーバーライド・・・
669デフォルトの名無しさん:2008/10/27(月) 21:54:46
>>651
stringのように不変だったらいいのか?
670デフォルトの名無しさん:2008/10/27(月) 22:05:28
>>669
そういうわけではないが、メソッド間の引数の渡しで済む物は極力それで実装すべきじゃない?
たとえメソッドの引数が10個20個になっても、その個数を減らすためだけに
安易にフィールドに頼るという方法は(・A・)イクナイ!!
671デフォルトの名無しさん:2008/10/27(月) 22:10:50
>>670
だから前にもこのスレで書いた気がするけど、
普通はむしろ「安易にフィールドに頼ろう」なんて思わないよ。

世の中そういう(間違った)プログラミングが横行しているかのように
思っているのかもしれんが、それは君の妄想で事実じゃないと思う。
そんな奴あいねえよ。

むしろ余程センスのない人でもなきゃ、メソッドの引数を減らすために
フィールドを使うようなことはしないって。
672デフォルトの名無しさん:2008/10/27(月) 22:18:37
フィールドの状態を把握できなくなるような馬鹿でかいクラスを書くのが間違い
673デフォルトの名無しさん:2008/10/27(月) 22:52:46
引数が10個20個になったメソッドに可読性など存在しないに等しい
クラスにまとめろ
674デフォルトの名無しさん:2008/10/27(月) 22:55:17
スレチになるかもしれませんが、質問させてください。
Threadを用いてマルチスレッドで処理しているときの変数・配列へのアクセスについてなのですが、
複数のスレッドが全く同じ処理を行うとき、

int a = array[i]; //arrayは共通の配列

の一行が処理される間には他のスレッドは同じ要素、もしくは配列にアクセスできないのでしょうか?
というのも、画像処理などで1pixelあたりの処理は軽いけど、画素が多い場合にどうしても重くなるので、
マルチスレッド化しようとforを複数のスレッドで分割してみたのですが、全く速度は変わらず…
粒度を細かくしようと

object syncObj;
int ti;
.......
Monitor.Enter(syncObj);
ti = i;
i++;
Monitor.Exit(syncObj);
.......

としているのがだめなのかとも思い、処理する区間で分けてみても大して速度は変わらず orz
前者はともかく、後者でも速度が変わらないとなると、処理が軽すぎて何度も配列アクセスで待たされている
と思うのですが、どうなのでしょうか?
675デフォルトの名無しさん:2008/10/27(月) 22:57:10
また出たよ命令口調クンw

これで言ってることがまともなら少しはカッコもつこうというものだが、
まったく意味不明で頓珍漢だからまさにみんなの笑いものw
676674:2008/10/27(月) 22:57:28
ちなみに、配列アクセス時にはlockは掛けていません。
元の配列は読み取り専用で書き換えるわけではないので…
677デフォルトの名無しさん:2008/10/27(月) 23:02:48
メソッドって何ですか?
678デフォルトの名無しさん:2008/10/27(月) 23:03:31
一応確認だがデュアルコアとかクアッドコアとかマルチ CPU を
使ってる…よな?
679デフォルトの名無しさん:2008/10/27(月) 23:07:57
>というのも、画像処理などで1pixelあたりの処理は軽いけど、画素が多い場合にどうしても重くなるので、
>マルチスレッド化しようとforを複数のスレッドで分割してみたのですが、全く速度は変わらず…

それマルチコアマシン?
まさかシングルコアのマシンで速くならないとか思ってないだろうな?
まあ処理内容にもよるが、どうも勘違いしてるように感じる。
680デフォルトの名無しさん:2008/10/27(月) 23:09:20
だいたいそのMonitorの使い方はなんなんだ…
681デフォルトの名無しさん:2008/10/27(月) 23:15:53
>>674
マルチスレッド使ったってスループットが上がるわけないんじゃないの
常識的に言って。

マルチスレッドで得られるものは「特定の処理によるCPU時間の占有の回避」だけでしょ?
682デフォルトの名無しさん:2008/10/27(月) 23:18:07
ソースさらした方が早くないか
683デフォルトの名無しさん:2008/10/27(月) 23:19:29
Parallel Extensions使ってみたいけどうちのPCシングルコア
684674:2008/10/27(月) 23:25:40
>>978,679
使用しているCPUは C2DのE6600です。

>>680
Monitorの部分は後からInterlocked.Increment()に書き換えました。
Interlockedクラスは後から知ったのと、なぜかlockステートメントよりもMonitorの方が速い
と思いこんでいたのでそんな書き方をしていました orz

>>681
CPUの処理速度よりもデータの転送速度の方がネックなのでしょうか?
処理は、単純にbyte配列の値を

temp[i] = 255 - array[i];

とかしながらコピーしているだけなのですが…
685デフォルトの名無しさん:2008/10/27(月) 23:39:52
メソッドとは何かと聞いている
686デフォルトの名無しさん:2008/10/27(月) 23:43:05
関数
687デフォルトの名無しさん:2008/10/27(月) 23:48:13
>>684
それだったら、array/tempの前半と後半でスレッドに分ければいい。
互いに読み書きする領域がかぶらなければ排他制御は不要。
688デフォルトの名無しさん:2008/10/28(火) 00:21:24
>Monitorの部分は後からInterlocked.Increment()に書き換えました。
それ何のインクリメント?
まさかとは思うがループ変数のインクリメントじゃないだろうな…
689デフォルトの名無しさん:2008/10/28(火) 00:22:44
追記、もしそうなら、根本的にスレッドの活用方法を間違ってる。
例えば>>678みたいにするもんだ。
690デフォルトの名無しさん:2008/10/28(火) 00:23:45
すっまん>>687
691デフォルトの名無しさん:2008/10/28(火) 01:03:22
http://totora.jpn.org/archives/2006/04/post_94.html

↑にあるように構造体とプロパティは相性が悪いようですが
どう対処するのがいいですか?
692デフォルトの名無しさん:2008/10/28(火) 01:07:19
>>687,689
試してみましたが、大して速度は変わらないっぽいです。
時間にして
シングルスレッドで0.07秒ほどの物が0.06〜5秒になるくらいですが…
2倍になることはなくても大体この程度高速化できればいい方なのでしょうか?
693デフォルトの名無しさん:2008/10/28(火) 01:15:36
どんなソースで対象配列のサイズはどの程度なのよ。
メモリアクセスばっかの処理は、特にキャッシュに乗るサイズを超えるともう
メモリ帯域がすべてになるから、ほとんど改善しなくても無理はない。
694デフォルトの名無しさん:2008/10/28(火) 02:31:17
すみません。DataGridViewのSelectedRowプロパティがありますが、
一行ごとに配列に読み込んでくれる関数見たいのありませんか?
695694:2008/10/28(火) 02:39:27
自己解決しました。cellsプロパティがあるみたいです。

失礼しました。
696デフォルトの名無しさん:2008/10/28(火) 03:06:41
>>691
というか、構造体はそういう物。

使い方や利便性などを考慮して、場合によっては
Sizeプロパティに加え、それにアクセスするためのWidth, Heightプロパティを定義する
697デフォルトの名無しさん:2008/10/28(火) 03:19:28
>>696

>Sizeプロパティに加え、それにアクセスするためのWidth, Heightプロパティを定義する

コードにするとどんなかんじになりますか?
698デフォルトの名無しさん:2008/10/28(火) 03:31:57
WPFじゃないほうのRectangleだと、まずWidth, Heightがあって

// int _w, _h;
public Size Size {
get { return new Size(_w, _h); }
set { _w = value.Width; _h = value.Height; }
}

みたいな感じになってたような
699デフォルトの名無しさん:2008/10/28(火) 04:06:57
なるほど
できました!
トンクス
700デフォルトの名無しさん:2008/10/28(火) 07:15:46
何が出来たんだ?
構造体にセッターなんか作ったってプロパティ越しじゃ使えんのに
701674:2008/10/28(火) 09:09:38
寝落ちしてた orz

>>693
いただいた回答を元にもう少し原因を探ったところ、どうやら画像サイズが小さくて
差が出にくかったようです。
テストは1024*768 32bitARGBの画像で行ったのですが、ぼかし処理等ではかなり時間が
掛かっていて、十分にマルチスレッドの効果が現れていたので(処理時間がほぼ1/2)、
このくらいのサイズからならマルチスレッドで処理すれば効果があるのかと思っていましたが、
色を反転させる程度の処理ではほとんど効果がなかったようです。
試しに4000*3000の画像でテストしてみると効果が出ていました。
早とちりすいませんでした orz

回答してくださった方々、本当にありがとうございました。
702デフォルトの名無しさん:2008/10/28(火) 14:29:27
WPFとかわけわからん
本当に初心者なのか?
703デフォルトの名無しさん:2008/10/28(火) 15:54:11
>>702
お前は何を言っているのかと
704デフォルトの名無しさん:2008/10/28(火) 17:38:43
C#でできたソフトって、どんなものがありますか?
705デフォルトの名無しさん:2008/10/28(火) 18:17:49
706623:2008/10/28(火) 18:33:34
教えていただいた方法で、自身のタブで開く方法は実現できました。ありがとうございます。

しかし、問題が新たに何点か浮かんできたので質問します。

1,AxWebbrowserを使うように変更したのですが、WebbrowserのときにあったWebbrowser.Document.Title等が使えなくなってしまいました。
どのようにすればタイトルや開いたページのソースコードを取得できるのでしょうか?

2.これはwebbrowserクラスでも同じくエラーになるのですが、作ったブラウザをVista上で動かすと、認証が必要なページにて
認証成功後に画面が切り替わるときに「Soft(仮)の動作を停止しました」というメッセージが出て、フリーズしてしまいます。
デバッガを使った結果、「0xC0000005: Access Violation」というエラーを吐いているようなのですが、ググっても解決法がよく分かりません。

なお、2の問題に関してはXPではエラーとはならず、認証後のページが一応開きます。
また、axwebbrowser.Visible = false; の状態だとフリーズはせず、 Visible = true; とした瞬間にフリーズとなります。

書き込んでいる本人もよく状況が分かっていませんが、よろしくお願いします。
707デフォルトの名無しさん:2008/10/28(火) 18:49:11
1.については、mshtmlをCOM参照してDocumentをIHTMLDocument2とか3とかにキャスト
そう言えばmshtmlってPIAあったっけ? なら.NET参照の方にあるかも
708デフォルトの名無しさん:2008/10/28(火) 19:14:53
>>691の引用先の人もなんか勘違いしてるねw
普通に考えればプロパティと相性が悪いのはむしろクラスの方だと思うけど。

少なくともプロパティで取得するような「状態」を表すオブジェクトは
構造体にする方が余計な勘違いを誘わない点で無難。
709623:2008/10/28(火) 19:28:13
>>707
mshtmlをCOM参照して、IHTMLDocument2にキャストしましたが、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出てエラーとなってしまいます。

mshtml.IHTMLDocument2 hd = (mshtml.IHTMLDocument2)axWebBrowser1.Document;
label1.Text = hd.title;

このように書いています。
どのように書き直せばいいのでしょうか?
710デフォルトの名無しさん:2008/10/28(火) 19:32:38
で、どれがnullなの?
axWebBrowser1?
axWebBrowser1.Document?
hd?
ht.title?
711623:2008/10/28(火) 19:42:56
>>710
申し訳ありません、解決しました。

axWebBrowser1がnullだったのでおかしいなと思い、呼び出し位置を変えてみたところ、今度はきちんと動きました。
どうやらページに移動し終わる前にIHTMLDocument2に代入しようとしていたようです。

すみませんでした。
712デフォルトの名無しさん:2008/10/28(火) 20:20:01
>>704
以外に少ないんだな・・・
C#ってまだまだマイナーなのかな
713デフォルトの名無しさん:2008/10/28(火) 20:21:17
以外が少ないなら以下自粛
714デフォルトの名無しさん:2008/10/28(火) 20:30:13
以外に多いですよ
.NET 2.0 Framework再頒布パッケージが必要ですと書かれているものの殆どがC#だと思います
715デフォルトの名無しさん:2008/10/28(火) 20:52:31
そうか。

今のソフトってまだCとかC++とかが主流なのかな。
今から趣味程度にソフト開発始めるなら、C#でもいい?
716デフォルトの名無しさん:2008/10/28(火) 21:02:25
うるせえよ、ガタガタ言ってる暇があったらソフトの一本でも作れよ
717デフォルトの名無しさん:2008/10/28(火) 21:05:25
骨格はC#で、フォームといったインターフェースは簡単なVBで、という人はどのくらいいる?
718デフォルトの名無しさん:2008/10/28(火) 21:09:47
>>717
言ってる意味がわからない
719デフォルトの名無しさん:2008/10/28(火) 21:14:38
それなら全部C#で作るだろ
IDEはC#のほうが便利だし
720デフォルトの名無しさん:2008/10/28(火) 21:25:33
インデクサってクラスに1こしか作れないの?
クラスに配列が2個以上あったらどうするの?
721デフォルトの名無しさん:2008/10/28(火) 21:26:24
>>719
言うほど便利か?
722デフォルトの名無しさん:2008/10/28(火) 21:26:46
>>720
プロパティとして外に出せばいいんじゃね?
723デフォルトの名無しさん:2008/10/28(火) 21:27:56
どっちもどっちだな。
デザイナはどっちもかわらんし、エディタはVBのが快適な点もある。
724デフォルトの名無しさん:2008/10/28(火) 21:27:59
C#でポトペタすりゃいいじゃん
725デフォルトの名無しさん:2008/10/28(火) 21:28:50
>>720
> インデクサってクラスに1こしか作れないの?

言ってる意味がわからん。
726デフォルトの名無しさん:2008/10/28(火) 21:33:03
>>725
CLIは名前つきインデクサをサポートしていて、
VB.NETではそれを使用できる。
727デフォルトの名無しさん:2008/10/28(火) 21:33:09
>>723
そもそも VB はソースの可読性に難があるからな。
IDE 側で頑張って可読性を向上させてやろうって努力はよく分かるんだけど、それでもね…。

まあこの辺は人によって違うだろうけど。
728デフォルトの名無しさん:2008/10/28(火) 21:34:49
>>726
微妙に話が噛みあってないような気がするんだけど
729デフォルトの名無しさん:2008/10/28(火) 21:38:17
実行速度ってネイティブC/C++ >>> C++/CLI = C# = VBって感じなの?
730デフォルトの名無しさん:2008/10/28(火) 21:39:45
VBは使い方によっては遅くなる
731デフォルトの名無しさん:2008/10/28(火) 21:40:50
インデクサをオーバーロードしたいって事?
732デフォルトの名無しさん:2008/10/28(火) 21:41:53
引数つきプロパティのことっしょ
733デフォルトの名無しさん:2008/10/28(火) 21:53:18
クラス内に配列が2こ以上ある場合
インデクサはどう定義すればいいん?
734デフォルトの名無しさん:2008/10/28(火) 21:54:02
C#でインデックス付きプロパティを原則禁止して、
特別のケースとしてインデックサを設けているのはC#という言語の設計思想によるもの。
文句があるならヘルスバーグにメールしてくれ。

それはおいといて、VBでインデックス付きプロパティをもつクラスを
作ってしまってC#から使うことになった場合はset_, get_ の内部名を直接指定する。
x.set_NamedProp(1, "nnnnn");
s = x.get_NamedProp(1);
735デフォルトの名無しさん:2008/10/28(火) 21:56:38
>>733
インデクサを持った型のインスタンスを返すプロパティにする
736デフォルトの名無しさん:2008/10/28(火) 21:57:58
イテレータ使えばいいんじゃね?
737デフォルトの名無しさん:2008/10/28(火) 22:13:20
今後の展開
XXX:: デフォルトの名無しさん [sage] (ry
class HogeNest
{
  property Hoge[] FooRoom { get; set; ready;}
}
で良いんじゃね

YYY: デフォルトの名無しさん [sage] (ry
class HogeCollection:List<Hoge> {..}
class HogeNest{ (ry) }
もありかも

ZZZ: デフォルトの名無しさん [sage] (ry
>>XXX >>ZZZ
ガイドライン違反 、配列を外から云々(ry
738デフォルトの名無しさん:2008/10/28(火) 22:58:34
>>734
> C#でインデックス付きプロパティを原則禁止して、

どういうこと?
739デフォルトの名無しさん:2008/10/28(火) 23:16:14
プログラムからWebブラウザ内のプルダウンメニューから任意の値を選択するには、どうすれば良いでしょうか?
740デフォルトの名無しさん:2008/10/28(火) 23:21:14
配列を直接返すと外側で境界チェックしないといけないから面倒だよね
これがガイドライン違反 、配列を外から云々(ryってやつ?
class Program
{
static void Main(string[] args)
{
Hoge h = new Hoge();

if (h.A != null) {
for (int i = 0; i < h.A.Length; i++) {
Console.WriteLine(h.A[i]);
}
}
}
}

class Hoge
{
int[] a;
int[] b;

public int[] A { get { return a; } }
public int[] B { get { return b; } }
}
741デフォルトの名無しさん:2008/10/29(水) 01:12:40
>>740
普通にインデクサ
742デフォルトの名無しさん:2008/10/29(水) 01:40:27
ぬるぽ
743デフォルトの名無しさん:2008/10/29(水) 01:49:46
744デフォルトの名無しさん:2008/10/29(水) 02:38:18
Optional and named parametersは全体で使えるようだが、
Indexed property はCOM専用っぽい記述になってる。
どうなんだろう。
745デフォルトの名無しさん:2008/10/29(水) 02:57:24
dynamic objectじゃラムダ式は使えんのか
全然ダメじゃん
746デフォルトの名無しさん:2008/10/29(水) 07:38:18
>>745
ラムダと dynamic、用途がまるで違うんだが。
747デフォルトの名無しさん:2008/10/29(水) 07:42:04
>>744
「C# が持ってない概念に依存しない COM 呼び出しができます」じゃない?
つまり、COM 専用な概念は dynamic では呼べない。
748デフォルトの名無しさん:2008/10/29(水) 09:43:15
>>746
Rubyユーザーに馬鹿にされるところが目に浮かぶよ俺は
749デフォルトの名無しさん:2008/10/29(水) 10:24:06
COM互換はVBにやらせる方針なんだろうと思っていたよ。
今回は目玉が少ない気がする。まだ発表してない要素があるのだろうか。
750デフォルトの名無しさん:2008/10/29(水) 10:37:59
>>651
「クラスの状態」を保持するのに、フィールドを使わずにどうやって実装するの?

たとえばここに色を現わすColourというクラスがあるとして、そのインスタンスのひとつが
現在「赤」なのか「青」なのか、どうやって状態を保持する?
751デフォルトの名無しさん:2008/10/29(水) 10:41:19
dynamic object使う気ないしCOMも別に使わんしなあ
in T、out Tは使いそうだけど
752デフォルトの名無しさん:2008/10/29(水) 12:20:43
DataGridViewを使って、商品管理ソフトを作っており、
検索も追加/編集も両方同じDataGridViewを使おうと思っています。
が、検索するときに編集してしまったり、追加してしまったりしたくないのです。

最初、タブを2つ作って、そのタブの下に(中ではなく)DGVを配置していたのですが、
タブを切り替えるたびに、検索したあとの検索結果を戻したり、編集できなくさせたりするのが面倒で、
検索機能だけもったアプリ、追加・削除・編集をできるアプリ、と2つにわけました。

わけたのですが、やはりスマートじゃないかなと思い質問してみました。
答えは無いと思いますが、みなさんならどんなインターフェイスにしますか?
753デフォルトの名無しさん:2008/10/29(水) 12:20:59
Pen pen のような
ClassName classname のような宣言ができるんですが
避けた方がいいんでしょうか?
754デフォルトの名無しさん:2008/10/29(水) 12:28:30
>>750
> 現在「赤」なのか「青」なのか、どうやって状態を保持する?

メソッドの引数で伝達していけばいい
755デフォルトの名無しさん:2008/10/29(水) 12:31:16
>>651
そういうことを考えてくと、クラスの内部であってもプロパティからしかアクセスできない変数って言うのが欲しくなる
出来ないよな?そんなこと
756デフォルトの名無しさん:2008/10/29(水) 12:38:24
>>754
ウィンドウ作るのに一体いくつの引数があればいいんでしょうか
757デフォルトの名無しさん:2008/10/29(水) 12:47:51
>>755
class baseClass
{
private Object hiddenField;
protected Object ProtectedProperty{ get{ return hiddenField; } (ry)}
}
class mainClass:baseClass
でやれば出来ないこともないとは思うが、そこまでして保護する必要性もないと思う。
758デフォルトの名無しさん:2008/10/29(水) 12:53:29
>>752
別に一つのDGVで完結させても面倒なことは何一つ無いと思うが。
759デフォルトの名無しさん:2008/10/29(水) 12:55:08
>>757
フィールドがあるわけだが
760757:2008/10/29(水) 13:12:07
>>651
知らないうちに値が書き換わっているのは確かに怖いが
外部からの理不尽な書き換えをなくすために隠蔽があるわけで、外部から手が加えられないなら問題ないだろ。
クラス内部での妥当な状態変化には寛容であるべき。

>>759
mainClass(命名規則がおかしいな)ではhiddenFieldは隠蔽されない?
761デフォルトの名無しさん:2008/10/29(水) 13:12:24
>>754
それってクラスにする意味があるの?
ただの関数に思えるのだが。
762デフォルトの名無しさん:2008/10/29(水) 13:15:00
>>754
たとえば、

1.フォームが生成されたとき、デフォルトの色を「赤」に設定する。
2.ボタンが押されたら、色を「青」に変更する。

1と2のイベントの間、「赤」という情報はどこに保存するの?
763デフォルトの名無しさん:2008/10/29(水) 13:20:43
>>762
ボタンが押されたときに「青」という状態を変数にしてメソッドに渡せばいいんじゃね?
764デフォルトの名無しさん:2008/10/29(水) 13:31:24
>>760
クラス内フィールドという意味が良く分からんが、
Publicなフィールドが必要ないって意味なのかな?
それならまだ分かるんだ。
でも>>651の言っているのはPrivateなフィールドすら必要ないと言っているように聞こえるんだ。

>>763
じゃあボタンが押されたときに、フォームの色が赤だったら青に、
青だったら緑に、緑だったら赤にするようにしたいときはどうする?
765デフォルトの名無しさん:2008/10/29(水) 13:37:43
>>764
現在のフォームの色を検出するメソッドをつくって、そこから得られた色を
ボタンクリックのメソッドに渡せばいいんじゃね?
766デフォルトの名無しさん:2008/10/29(水) 13:40:20
>>765
>現在のフォームの色を検出するメソッド

これどうやって実現するの?
現在のフォームの色は何者が保持してるの?
767デフォルトの名無しさん:2008/10/29(水) 13:44:09
そもそもまともなクラス作ったことないアホだろ
768デフォルトの名無しさん:2008/10/29(水) 13:44:42
以降>>760に納得できない人の間で無限ループの悪寒
769デフォルトの名無しさん:2008/10/29(水) 13:46:03
状態を保持する必要があるものは必ず出てくる。
グローバルなんて言ってんのはそもそも適切なクラス設計が出来てないからだろう。
770デフォルトの名無しさん:2008/10/29(水) 13:48:07
>>763
ボタンが押されるまでは「赤」で「あり続ける」必要があるのだが、その「赤」という情報は
どこにあるの?

Windowsが描画を要求したとき、色の情報が存在しなければ描画できないよ。
771デフォルトの名無しさん:2008/10/29(水) 13:51:36
>>769
同意。

フィールドが存在しない(状態を保持しない)クラスなど、関数ライブラリと変わらない。
そもそもインスタンスを生成する必要がないから、全部staticでよいことになる。

それなら構造化プログラミングだけやってればいいわけで。
772デフォルトの名無しさん:2008/10/29(水) 13:54:31
流れをぶった切って質問です。

複数のテキストボックスとOKボタンを配置して入力フォームを作成しています。
タブでフォーカス遷移させながらユーザーに入力させたいのですが、
テキストボックスのどこにフォーカスがあってもEnterが押されたらOKボタンのクリックイベントが発生するような
よくある形の入力フォームにしたいです。
当然テキストボックスのPreviewKeyDownイベントでOKボタンのクリックイベントを呼び出せばいいのですが、
このときにOKボタンにフォーカスが当たっているように見せたいです。
つまり、textbox1にフォーカスが当たっているときにも、OKボタンの外枠が青っぽくなるようにしたいです。
これも良くある入力フォームの形だと思うのですが、どのように実装したら良いでしょうか。
773デフォルトの名無しさん:2008/10/29(水) 13:55:13
this.ForeColor
774デフォルトの名無しさん:2008/10/29(水) 13:59:32
>>772
AcceptButton
775623:2008/10/29(水) 14:01:10
axWebbrowserで開いたページがよく文字化けしているので、
button を押すとaxwebbrowserで現在開いているページのエンコードを utf-8 に変えたいのですが、
どのようにすれば実現できるのでしょうか?
776デフォルトの名無しさん:2008/10/29(水) 14:04:12
>>774
ありがとう
777デフォルトの名無しさん:2008/10/29(水) 14:06:28
>>753
それはみんな普通にやってるんじゃ。
MSDN でもそういうコード見かけるし。
778デフォルトの名無しさん:2008/10/29(水) 14:09:20
>>775
charset
779デフォルトの名無しさん:2008/10/29(水) 14:11:48
なんとか.Encode("UTF-8")
780623:2008/10/29(水) 14:15:26
>>778,>>779
axwebbrowser. の直下には見当たらないので困っています。

webbrowserなら、webbrowser.Document.Encodingで設定できるのですが・・・
781デフォルトの名無しさん:2008/10/29(水) 14:21:00
mshtml.HTMLDocument myDocument = (mshtml.HTMLDocument)axWebBrowser1.Document;
myDocument.charset = "utf8";
782623:2008/10/29(水) 14:30:19
>>781
「引数が無効です」というエラーが出て終了します。

myDocument.charset = "utf8";

の代入部分でエラーを出しているようです。
783デフォルトの名無しさん:2008/10/29(水) 14:38:43
頭の無いコピペマシーン
784デフォルトの名無しさん:2008/10/29(水) 14:40:48
ワロタ
ちょっとハイフン忘れただけじゃんかよ、utf-8でやってみ
785デフォルトの名無しさん:2008/10/29(水) 14:51:09
>>783,>>784
書き込んだ後で気づきました・・・
コンパイルは通るようになりましたが、エンコードの変更がページに反映されません。

axwebbrowser.Document = myDocument;

としようとすると、「プロパティまたはインデクサ 'AxSHDocVw.AxWebBrowser.Document' は読み取り専用なので、割り当てることはできません」というエラーが出てしまいます・・・
786デフォルトの名無しさん:2008/10/29(水) 14:53:47
Refresh()でいけるだろ。
ページそのものにcharset指定があると戻されるが。
787デフォルトの名無しさん:2008/10/29(水) 14:54:02
← →
788デフォルトの名無しさん:2008/10/29(水) 15:20:05
C#でプログラム書くとき、コードをどこに書けばいいかわからん。
イベントハンドラとかは、Form.csに自動で追加されるから、そこにそのまま記述してるんだけど、
ほかの処理とかも、どんどんForm.csにメソッドとして追加していけばいいのか?とか悩む
789デフォルトの名無しさん:2008/10/29(水) 15:24:04
そうですか。
790デフォルトの名無しさん:2008/10/29(水) 15:26:05
クラスとして完結できるものはクラスにしていけばいいんじゃないかな。

自分も気になるんだけどたまにWin32とかいうクラスを作って
その中にAPIの宣言を纏めて書いているプログラムをたまに見かけるけど
よくある手法?
クラス毎に必要なAPIだけ記述しているけど、当然クラスによっては
同じAPIを宣言しているものもあって、オブジェクト指向的にはどうなんだろう。
791デフォルトの名無しさん:2008/10/29(水) 15:27:57
>>788
最初のうちはそれでいいんじゃないの?
自作クラスとかカスタムコントロールを使うようになると、たとえばMyClass.csとかの
別のファイル(またはソリューション)にユーザー定義のイベントや、フィールド、メソッド、プロパティ
やらを実装していく形になる。そしてそれが肥大化した場合にフォルダ分けをしてソースコードを整理することになる。

それによって自動的に関数ライブラリとユーザーコントロールとフォーム系とその他のクラス等、
それぞれのnamespaceが変わってくることになる。
792デフォルトの名無しさん:2008/10/29(水) 15:29:19
アンマネージド関数の宣言は
NativeMethods/SafeNativeMethods/UnsafeNativeMethods
のいずれかのクラス内にまとめろってFxCopが言ってた
793デフォルトの名無しさん:2008/10/29(水) 15:44:33
Program.cs ってなんのためにあるの?
昔のC#には無かった気が駿河
794デフォルトの名無しさん:2008/10/29(水) 16:07:54
>>793
こういうやつがでてくるからコンソールアプリから勉強しろと言いたくなるんだな。
795デフォルトの名無しさん:2008/10/29(水) 16:10:20
>>794
こういうやつがでてくるから説明できないなら黙ってろと言いたくなるんだな。
796デフォルトの名無しさん:2008/10/29(水) 16:19:55
昔はForm1.csにMainまであったんだっけ
797デフォルトの名無しさん:2008/10/29(水) 16:20:46
>>795
そんな煽りに釣られるほどクマー
798デフォルトの名無しさん:2008/10/29(水) 17:02:11
>>786

Refresh()で更新をすると、こちらが指定したエンコードが元に戻るようで、結局更新されないみたいです。

Form本体、axwebbrowser両方ともにRefresh()してみましたが、駄目でした。
799デフォルトの名無しさん:2008/10/29(水) 17:04:00
質問です。

htmlファイルをFile.ReadAllText()で読み込んで、それをプログラム上で編集後に
再度htmlファイルとして保存し、それをブラウザで表示するプログラムを作っています。
以下にコードを示します。

//ソースを読み込む
string htmSource = File.ReadAllText(filename);

//----------編集処理---------------

//新しいhtmファイルの保存
File.WriteAllText(newFileName, htmSource);

//一時htmファイルを開く
System.Diagnostics.Process.Start(tmpFileName);


このときにブラウザで表示しようとすると文字化け?のようなことが起こります。
エンコードの問題だと思うのですが、その辺が疎くて分かりません。
一応SakuraEditorで元のhtmファイルを開いてみたらエンコードがシフトJISのようでした。
しかしながらSystem.Text.EncodingにはシフトJISがないようです。
どのように対処すればよいか教えて下さい。
800799:2008/10/29(水) 17:05:21
コードに不備がありましたので訂正


//ソースを読み込む
string htmSource = File.ReadAllText(filename);

//----------編集処理---------------

//新しいhtmファイルの保存
File.WriteAllText(newFileName, htmSource);

//新しいhtmファイルを開く
System.Diagnostics.Process.Start(newFileName);
801799:2008/10/29(水) 17:18:56
すみません自己解決しました。

//ソースを読み込む
string htmSource = File.ReadAllText(filename, System.Text.Encoding.GetEncoding("Shift_JIS"));

//----------編集処理---------------

//新しいhtmファイルの保存
File.WriteAllText(newFileName, htmSource, System.Text.Encoding.GetEncoding("Shift_JIS"));

//新しいhtmファイルを開く
System.Diagnostics.Process.Start(newFileName);


これでOKでした。
スレ汚し失礼しました。
802デフォルトの名無しさん:2008/10/29(水) 17:19:29
>>798に追記です。
目的ページには効果が無かったのですが、関係の無いページで試してみると変更されました。
目的ページには記述が見当たらないのですが、どこか別のところに指定があるようです。

どうやら無理っぽいので諦めたいと思います。
803デフォルトの名無しさん:2008/10/30(木) 00:55:51
foreach (string s in contentsText)
~~~~~~~~
{
if (s == "★")
{
cnt += 1;
}
}

エラー1 型 'char' を型 'string' に変換できません。

foreachの下に下線が付いて↑のコンパイルエラーになってしまいます。
contentsTextはString型文字列です。
どんな原因が考えられるでしょうか?
804デフォルトの名無しさん:2008/10/30(木) 00:59:51

まんまじゃねーか
805デフォルトの名無しさん:2008/10/30(木) 01:02:23
foreach (char c in contentsText)
{
if (c == '★')
{
cnt += 1;
}
}
806デフォルトの名無しさん:2008/10/30(木) 01:03:06
文字と文字列の違いが分かってないからだ
807803:2008/10/30(木) 01:04:24
StringクラスはCharオブジェクトのコレクションってことですね。
すいません、理解しました。
文字列をコレクションとしてループさせる場合はStringとして扱うことはできないでしょうか?
808デフォルトの名無しさん:2008/10/30(木) 01:04:35
文字列をforeachに渡したからといって行単位で処理してくれるわけじゃないぞ
contentsTextをSplitしなきゃダメ
809デフォルトの名無しさん:2008/10/30(木) 02:13:32
HtmlDocumentについて質問です。

>VB
Dim Element As HtmlElement = WebBrowser1.Document.All("last")

>C#
HtmlElement Element = WebBrowser1.Document.All("last");

VBのコードだと指定したIDをHtmlElementとして拾えるのですが、
C#だと「実行不可能なメンバ 'System.Windows.Forms.HtmlDocument.All' をメソッドのように使用することはできません。」
というエラーになります。
できればコレクションではなく、IDを指定してランダムアクセスしたいのですがご存じの方お願いします。
810デフォルトの名無しさん:2008/10/30(木) 02:19:42
>>809
よくわからんけど["last"]じゃねーの?
811デフォルトの名無しさん:2008/10/30(木) 02:39:07
foreachって{}使わないでもなんか使えるらしいぞ
812デフォルトの名無しさん:2008/10/30(木) 02:48:37
C系言語の基本
ちなみにループはもちろん,usingやfixedも{}省略可
813デフォルトの名無しさん:2008/10/30(木) 02:53:48
C++のコードからC#のコード(dll)呼べますか?
814デフォルトの名無しさん:2008/10/30(木) 02:56:05
はい。
815デフォルトの名無しさん:2008/10/30(木) 02:56:36
C++/CLI
COM
逆P/Invoke
上から順に検討しましょう
816デフォルトの名無しさん:2008/10/30(木) 02:58:34
めんどそうなので
全部c++で書こうと思います
817デフォルトの名無しさん:2008/10/30(木) 02:58:35
「C++からC#のdll」でググれ
818デフォルトの名無しさん:2008/10/30(木) 03:03:26
便乗質問なんだけど,C++/CLIでアンマネージC向けのDLLって作れるの?
逆P/InvokeやCOMは無しで
819デフォルトの名無しさん:2008/10/30(木) 03:12:13
C#がからまないとさすがにスレ違いだろ…
820デフォルトの名無しさん:2008/10/30(木) 03:28:03
textBox1.Cut();やCopy();そしてPaste();まであるのにDelete();が無いのは何故?
長いコード書かせるための罠ですか?
821デフォルトの名無しさん:2008/10/30(木) 03:33:13
ん?数文字長くなるだけだろ
822デフォルトの名無しさん:2008/10/30(木) 03:34:04
= "";
823デフォルトの名無しさん:2008/10/30(木) 03:48:30
これはマイクロソフト側の不備ですよね
こんな単純なメソが無いなんておかしいし、美しくない
824デフォルトの名無しさん:2008/10/30(木) 03:52:34
やってみたけど、うわあこれ長い
拒絶反応が出たあ

で本題ですけど、stringの""とnullって何が違うの?
825デフォルトの名無しさん:2008/10/30(木) 04:24:30
stringが参照しているnullは文字列の顔を装った化け物
""は空文字列という真っ当な文字列
826デフォルトの名無しさん:2008/10/30(木) 08:58:09
>>823
文句があるなら継承して実装する。
何のためのOOPだ。
827デフォルトの名無しさん:2008/10/30(木) 10:10:16
ふらっとC#
開いているIE7のURLを知りたいです。
次のコードで、プロセス名やプロセスのパスは取得できました。

string ProcessName = "iexplore";
Process[] allProcesses = Process.GetProcessesByName(ProcessName);
foreach (Process oneProcess in allProcesses)
{
Console.WriteLine(oneProcess.MainModule.FileName);
}

このあと、URLを知るには、どうしたらいいですか?
828デフォルトの名無しさん:2008/10/30(木) 10:14:50
>>827
プロセスからは無理。

ShellWindows を列挙して、LocationUrl を取るってのが COM 的な方法。
ウィンドウを列挙して、アドレスバーなりから取るのが Win32 的な方法。
829デフォルトの名無しさん:2008/10/30(木) 10:37:06
どちらが初心者におすすめですか?
830デフォルトの名無しさん:2008/10/30(木) 10:48:14
前者
831デフォルトの名無しさん:2008/10/30(木) 11:09:01
文字列が空かを求める処理を書く場合、
1. str.length<0
2. str==""
3. str==string.Empty

があるかと思うのですが、可読性が高いのは一般的にどれなんでしょうか?
処理速度を求めっれば1番
プログラムの綺麗さを求めれば3番
と思っていますが、個人的には2番が見やすいかなと
832831 :2008/10/30(木) 11:09:47
1. str.length==0ですね^^;
833デフォルトの名無しさん:2008/10/30(木) 11:11:28
まずShell32.dllを参照で追加しました。
次にmsdnでshellwindowsを検索しました。
が、あまり有効な情報がなく。
ShellWindows shellWindows = new ShellWindowsClass();
とかだと、参照が不足しているようなのですが、なにを追加すべきですか?
834デフォルトの名無しさん:2008/10/30(木) 11:17:48
string.Equalsと""では""のほうが速いんだっけ
==とLengthでは,==ははじめに文字列の長さを比較するようになってるからほとんど変わらないはず
835デフォルトの名無しさん:2008/10/30(木) 11:29:22
しかし聞いてるのは可読性
俺はいつも==""だな
逆も!=""
836デフォルトの名無しさん:2008/10/30(木) 11:37:37
>>833
ShellクラスのWindowsメソッドだったっけ
// Shellは厳密にはinterfaceだったはずだけどなー
837デフォルトの名無しさん:2008/10/30(木) 11:37:51
>>833

あと、SHDocVw を参照設定して、こんな感じ。
エクスプローラも含むから気をつけてね。

Shell sh;
SHDocVw.ShellWindows o;


sh = new Shell();
o = (SHDocVw.ShellWindows)sh.Windows();
foreach( InternetExplorer ie in o )
{
MessageBox.Show(ie.LocationURL);
}
838デフォルトの名無しさん:2008/10/30(木) 11:57:33
>>837
ありがとうございます。
SHDocVwライブラリは、参照-COMで、Microsoft Internet Controls-ieframe.dllがそうなんですね。
名前がぜんぜん違うので、見つけられなかったです。
InternetExplorerの参照がないといわれています。
これはなにを参照すればよいでしょう?
839デフォルトの名無しさん:2008/10/30(木) 12:03:40
SHDocVw.InternetExplorer
840デフォルトの名無しさん:2008/10/30(木) 13:35:45
せっくすしてぇょ〜
841デフォルトの名無しさん:2008/10/30(木) 14:21:04
>>840

                       や   る   な   い   か
842デフォルトの名無しさん:2008/10/30(木) 14:58:40
ローカライズの見地からはどうなのよ>>831
843デフォルトの名無しさん:2008/10/30(木) 15:01:06
空文字列かどうかの判定にローカリゼーションが入る余地は無いと思うが

後から「これしか入ってなかった場合は空文字列扱いね」はあるかもしれないな
844デフォルトの名無しさん:2008/10/30(木) 15:11:45
> 後から「これしか入ってなかった場合は空文字列扱いね」はあるかもしれないな
つっても普段からこんなのまで考慮してたらキリがない
845デフォルトの名無しさん:2008/10/30(木) 15:45:47
String.IsNullOrEmpty(s)って誰も言わないのは、なぜ?
846デフォルトの名無しさん:2008/10/30(木) 15:51:19
JAVAでいう「ヌルポ」に相当するものってC#だと何( ´∀`)?
847デフォルトの名無しさん:2008/10/30(木) 15:51:48
空文字列かどうか、とnullまたは空文字列かどうか、は別の問題だから
848デフォルトの名無しさん:2008/10/30(木) 15:59:06
>>839、837
できました。ありがとうございました。
849デフォルトの名無しさん:2008/10/30(木) 16:11:37
北海道か青森の場合、と条件を書くときって、
if (TextBox.Text.Contains("北海道|青森県"))
でいいんだよね?
850デフォルトの名無しさん:2008/10/30(木) 16:17:17
Stringクラス自体には正規表現の機能は無い
851デフォルトの名無しさん:2008/10/30(木) 16:27:20
if (TextBox.Text.Contains("北海道")) | (TextBox.Text.Contains("青森県"))
852デフォルトの名無しさん:2008/10/30(木) 16:28:53
C#のプログラムでは、なにかを使う場合には、宣言をする。
private useFolder(string FolderName)
string[] mails = Directory.GetFiles(FolderName);
sh = new Shell();
みたいに。
ひとつめは、メソッド名での定義。
ふたつめは、変数(データ型)での定義。
最後は、コンストラクタを呼び出して新しいオブジェクトを作成するnew演算子による定義。

こんな理解でよさそうですか?
853デフォルトの名無しさん:2008/10/30(木) 16:31:14
>>851
なるほど。それでヒットしなかったんだ!
thanks.
ひょっとしてこれって、配列を使うとスマートだったりする?
854デフォルトの名無しさん:2008/10/30(木) 16:32:26
わからん!
object sender, EventArgs e
の意味を教えてくれ!
855デフォルトの名無しさん:2008/10/30(木) 16:40:56
>>854
たとえばボタンがクリックされたとき、ボタンクリックイベントが呼び出されるわけだが、
ただ「ボタンがクリックされたぞー」と呼ばれても不親切だ。
そこで、クリックされたボタン(sender)を教えてくれているわけ。

「EventArgs e」が必要になるのは、もうちょっと後だろう。今は知らなくて良い。
856デフォルトの名無しさん:2008/10/30(木) 16:42:26
>>853
if (Regex.Match(textBox1.Text, "北海道|青森県").Success)
とか
857デフォルトの名無しさん:2008/10/30(木) 16:54:00
つまりsenderは俺がオナニーしたことを告げ口するわけですね!
858デフォルトの名無しさん:2008/10/30(木) 17:15:33
>>854
ふむ。だれがだれに教えるの?
乏しい理解によれば、
メソッド(引数)
と書くと、その引数でそのメソッドを処理して、答えを外に返してくれる。
とすると、senderを押したってことは、外になんか返ってくるわけ?
たとえば、
private void button_Click(object sender, EventArgs e)
とあるとき、
button_Click(this, EventArgs.Empty);
と実行すると、なにか返ってくるの?

でも、返ってくるとしたら、returnになんか値を入れとかないとだめなんじゃなかったっけ?

あと、ぶっちゃけ()を空にしちゃだめ?
っていうか空にしても動いた気がするんだけど。
859デフォルトの名無しさん:2008/10/30(木) 17:42:51
voidなら空OK
860デフォルトの名無しさん:2008/10/30(木) 17:45:22
>>858
> ふむ。だれがだれに教えるの?
イベント起こしたものが、イベントを受け取るものに。
例えばボタンのクリックなら、Clickイベントを起こしたもの(== Button)が sender。
受け取るものってのは要するにbutton_Clickメソッド。総称イベントハンドラ。

> と書くと、その引数でそのメソッドを処理して、答えを外に返してくれる。
> とすると、senderを押したってことは、外になんか返ってくるわけ?
senderを押す? って何?
button_Clickメソッドは1つでbutton1.Clickとbutton2.Clickの両方のイベントハンドラとすることができる。
でもそのままだとどっちのボタンのClickによって呼び出されたのか区別がつかない。
なのでsenderで区別する。

> たとえば、
> private void button_Click(object sender, EventArgs e)
> とあるとき、
> button_Click(this, EventArgs.Empty);
> と実行すると、なにか返ってくるの?
イベントハンドラはイベントによって自動的に呼び出されるメソッド。
基本的に自分で呼び出すもんじゃない。
それに返値はvoidだろ。

> あと、ぶっちゃけ()を空にしちゃだめ?
> っていうか空にしても動いた気がするんだけど。
イベントハンドラとして使用できない。
ButtonのClickイベントはEventHandler型で、このデリゲートと引数が一致していないといけない。
861デフォルトの名無しさん:2008/10/30(木) 17:45:49
>>856
IsMatch使おうよ

>>858
イベントハンドラを呼び出すのはイベント発生元のオブジェクト
プログラマがイベントハンドラを呼び出すコードを書くことはまずない
862デフォルトの名無しさん:2008/10/30(木) 17:46:23
>>858
> と実行すると、なにか返ってくるの?

private void button_Click(object sender, EventArgs e)
     ̄ ̄ ̄
だからvoidが返ってくる。つまり、何も返ってこない。
863デフォルトの名無しさん:2008/10/30(木) 17:56:30
goto ok
864デフォルトの名無しさん:2008/10/30(木) 19:42:16
http://qb5.2ch.net/test/read.cgi/operate/1206636885/657
強制ID実装を駄目元で頼み込んでみた。
もし賛同してくれる人がいたら同意のレスつけてください。
865デフォルトの名無しさん:2008/10/30(木) 19:48:16
コピペ君って馬鹿だな、まで読んだ。
866デフォルトの名無しさん:2008/10/30(木) 19:53:05
senderは今でも何のためにあるのか分からないな
EventArgsに集約してe.Senderでアクセスできるようにすればいいのに
867デフォルトの名無しさん:2008/10/30(木) 19:54:46
イベント起こす人がEventArgsを用意するとは限らないからじゃないかな
868デフォルトの名無しさん:2008/10/30(木) 20:01:50
>>866
あえて言えば、
(1) 何も付加情報がないときはnullで済ませたい。
というイベントを発火する側の要求と、

(2) イベントの発火人の情報の受け渡しは強制したい
というリスナ側の要求の折衷じゃないのかな。
869デフォルトの名無しさん:2008/10/30(木) 21:21:27
>>860
メソッドとイベントハンドラの区別がつかない自分に気づいた。
カタカナ語に弱い。
あ、イベントによって自動的に呼び出されるメソッドのことをイベントハンドラというのか。
イベントってのは、ボタンを押したりとかの動作のことでしょ。
ってことは、手動で呼び出すメソッドのことはメソッドというのか?
あり? でもメインメソッドはメインメソッドじゃなかったっけ。

頭が煮え立ってきたので、今日はここまで。
理解が遅くてすまん。
ありがとう
870デフォルトの名無しさん:2008/10/30(木) 21:24:18
メソッドってのはメンバ関数のことだよ
871デフォルトの名無しさん:2008/10/30(木) 21:42:37
Main() もコールバックというかイベントハンドラっぽい気がしなくも無いね。
ただ定義だけして CLR? に呼んでもらう感じだし。
(Main() のように自分で直接呼び出したりはしない)
872デフォルトの名無しさん:2008/10/30(木) 21:53:28
>>869
メソッドのうち、イベント時に呼ばれる特殊なメソッドをイベントハンドラと呼ぶ。

「自動車」と「消防車」の関係に同じ。
火事の時に呼ばれる特殊な自動車を消防車と呼ぶが、火事以外の平時に消防車が走行しては
ならないということではない。
873デフォルトの名無しさん:2008/10/30(木) 22:00:22
>>872
そういう訳のわかんない説明は、オブジェクト指向を動物に喩える話と同じぐらい
ありがた迷惑なんじゃないかと思うよ。

つーか特殊なメソッドとか誤解を招くようなこと言うなよ。

イベントドリブンの考えなんて普通にプログラム書いてれば自然とわかるから
心配いらん。
874デフォルトの名無しさん:2008/10/30(木) 22:23:12
オブジェクト指向を動物に喩える話を批判する奴がよく居るがなんでなんだぜ
875デフォルトの名無しさん:2008/10/30(木) 22:25:54
そいつに理解できないから
876デフォルトの名無しさん:2008/10/30(木) 22:31:21
>>868
eにnull渡しちゃダメ
EventArgs.Emptyを渡すお約束

>>852
private useFolder(string FolderName) //メソッドの宣言
{
//string[]型の変数mailsを宣言(mail=右辺 と定義しているわけではなく,mailに右辺の値を代入している)
string[] mails = Directory.GetFiles(FolderName);
//コンストラクタの戻り値をshに代入。もちろんsh=new Shell()と定義しているのではない。
sh = new Shell();
}//{ }内はメソッドの定義
877デフォルトの名無しさん:2008/10/30(木) 22:33:37
コンストラクタの戻り値?
878デフォルトの名無しさん:2008/10/30(木) 22:47:50
コンパイル後の表現は全然違うけど,あくまでC#の形式的な話としては
コンストラクタは新しいインスタンスを返す関数のようなものだろ
879デフォルトの名無しさん:2008/10/30(木) 22:51:12
new演算子が、と言うほうがまだいい、個人的な意見だけど。
880デフォルトの名無しさん:2008/10/30(木) 22:51:55
また初心者スレで誤解を招くような事を書きやがって
881デフォルトの名無しさん:2008/10/30(木) 22:53:59
static Hoge operator new() {
 Hoge obj = まっさらなHogeのインスタンスを作成;
 obj.コンストラクタ();
 return obj;
}
イメージとしてはこんな感じでおk?
882デフォルトの名無しさん:2008/10/30(木) 22:57:32
質問です。
class{
Method01(){InitializeComponent();}
Method02(){
}
Method03(){
}
}
とあるとき、Method01〜03で共通に使う変数は、メンバ変数として、クラス直下で指定すると思います。
でも、
string inputText = TextBox.Text
は、Method02の内部でないと指定できなかったりします。
このinputTextをMethod03で使うにはどうしたらいいんですか?
ご指導ください。
883デフォルトの名無しさん:2008/10/30(木) 22:58:53
・inputTextをメンバ変数にする
・Method03に引数として渡す
884デフォルトの名無しさん:2008/10/30(木) 23:00:51
Method02がinputTextを返す
885デフォルトの名無しさん:2008/10/30(木) 23:03:21
>>882
string inputText; //フィールド

void Method2(){
inputText = textBox1.Text;
}

void Method3(){
string str = inputText + "これでつかえたね";
}
886デフォルトの名無しさん:2008/10/31(金) 00:20:09
>>873
イベントハンドラが特殊じゃないってんなら、privateなのに自クラス以外から参照できる理由を
説明してくれ。
887デフォルトの名無しさん:2008/10/31(金) 00:34:49
イベントハンドラ用に定義したのメソッドそのものはいたって普通のメソッドだぞ
そのメソッドをイベントハンドラ用のデリゲートにバインドすることで,
メソッドをあたかもオブジェクトのように扱えるようになる
javaなんかではprivateな内部クラスでインターフェイスを実装して,
そのインスタンスをイベントに登録したりするけど,デリゲートはそれを簡略化した仕組み
888デフォルトの名無しさん:2008/10/31(金) 00:35:14
> privateなのに自クラス以外から参照できる
ねーよwww
889デフォルトの名無しさん:2008/10/31(金) 00:38:29
>>886
>privateなのに自クラス以外から参照できる
コード例をたのむ
890デフォルトの名無しさん:2008/10/31(金) 00:38:49
>>885
なるほど。ありがとうございます。
class{
Method01(){InitializeComponent();}
Method02(){
if() {string inputText = TextBox.Text}
}
Method03(){string inputText = TextBox.Text}
}
の場合はどうなります?
Method02のifが成立しているときは03の定義を省略できますが、03の定義を省略して次のようにすると、
class{
string inputText;
Method01(){InitializeComponent();}
Method02(){if() {inputText = TextBox.Text;}}
Method03(){string str = inputText;}
}
ifが成立しないときは、Method03が成り立たなくなってしまう気がします。
891デフォルトの名無しさん:2008/10/31(金) 00:44:18
>>890
やりたいことの意味が分からん。
テキストボックスのテキストをフィールドとして使いたいクラスがあるのだとすれば、
単にテキストボックスのTextChangedイベントでinputTextに代入していればいいだけの
ことじゃないの?

コードの書き方と云々以前の問題で、設計自体が既に破綻しているようにしか見えない
892デフォルトの名無しさん:2008/10/31(金) 00:44:24
何が言いたいのかわからないけどそういうもん
インスタンス変数を使うなら「状態」を意識しないといけない
893デフォルトの名無しさん:2008/10/31(金) 00:48:18
あわせて、コンストラクタの
sh = new Shell();などを
Method01-03で共通で使うには、どのようにしたらよいでしょうか?
894デフォルトの名無しさん:2008/10/31(金) 00:51:10
shをフィールドにする
まったく同じこと
895デフォルトの名無しさん:2008/10/31(金) 00:51:16
>>893
インスタンスフィールド初期化子を使え
896デフォルトの名無しさん:2008/10/31(金) 02:20:26
初心者です
オススメのメットホッド教えてください
当方女子高生です
897デフォルトの名無しさん:2008/10/31(金) 02:35:35
メットホッド の検索結果 約 5 件中 1 - 6 件目 (0.23 秒)
少数派だな
898デフォルトの名無しさん:2008/10/31(金) 02:38:29
>>896
お前きもいから
899デフォルトの名無しさん:2008/10/31(金) 04:16:26
メットホッドって何??と思ってググッたら、methodの事なのか・・
900デフォルトの名無しさん:2008/10/31(金) 04:59:22
パラメータと(ローカル)変数の違いが分かりません
教えてください
901デフォルトの名無しさん:2008/10/31(金) 05:36:37
int Method ( int a ) // a・・・パラメータ(引数)
{
  int b = a; // b・・・ローカル変数
  return b; // 戻り値
}

パラメータ(引数)・・・関数の外部(呼び出し元)から受け取った変数
ローカル変数    ・・・関数の内部でのみ使われる変数
戻り値       ・・・関数の外部(呼び出し元)に返す変数

パラメータや戻り値が 呼び出し元 と関係する(受け取り、返す)のに対して
ローカル変数は関数の内部で完結し、呼び出し元から見られる事がない。
902デフォルトの名無しさん:2008/10/31(金) 06:37:41
パラメータ(仮引数)だって呼び出し側からその名前でアクセスできないぞ
903デフォルトの名無しさん:2008/10/31(金) 09:09:30
引数とグローバル(?)変数の違いって意味じゃない?
904デフォルトの名無しさん:2008/10/31(金) 09:30:56
パラメータもローカル変数だろ
905デフォルトの名無しさん:2008/10/31(金) 10:42:42
>>886
コード例マダー?
906デフォルトの名無しさん:2008/10/31(金) 11:26:58
特殊なのはイベントハンドラではなくてデリゲートだな。
デリゲートにして引き渡せばprivateなメソッドを外部から呼ぶことができる。
907デフォルトの名無しさん:2008/10/31(金) 11:30:05
C#でおk
908デフォルトの名無しさん:2008/10/31(金) 12:33:03
Settings.Default.Setting1ってのがグローバル変数なの?
初心者各位もとい諸君らが求めるそれに限りなく近い挙動だと思うんですけど
909デフォルトの名無しさん:2008/10/31(金) 12:47:52
グローバル変数のようにも使えるよ勿論
それをいうならシングルトンなんか全部実質グローバル
910デフォルトの名無しさん:2008/10/31(金) 12:48:23
>>908
シングルトンだね。
Settings がクラス名
Default がファクトリー
Setting1 がSettingsのプロパティ
911デフォルトの名無しさん:2008/10/31(金) 12:55:20
インスタンスの作成は制限されてないからシングルトンというよりデフォルトインスタンスでしょ
たいがいシングルトンは本来の目的とは違ってグローバル変数として使われるけど
912デフォルトの名無しさん:2008/10/31(金) 12:56:51
シングルトンが出てくるのは多分設計ミス
913デフォルトの名無しさん:2008/10/31(金) 13:03:59
Genericを使ったコードを書くと、「using System.Collections.Generic;」の行で

error CS0234: 型、または名前空間名 'Generic'
は、クラスまたは名前空間 'System.Collections'
に存在しません。アセンブリ参照があるか確認してください。

とエラーが出てしまうんですが、何が原因なのでしょうか?
(Genericを利用しないコードは、問題なくコンパイルできます)
パスを通すために、sdkbars.batを実行してから再起動もしたんですが、何も変わりません。
914913:2008/10/31(金) 13:05:15
すいません、質問スレに書くはずが、誤爆してしまいました
915デフォルトの名無しさん:2008/10/31(金) 13:06:12
ここが質問スレじゃなかったら何なのw
ジェネリックが使えるのはVS2005以降だけどそれはわかってるよね?
916デフォルトの名無しさん:2008/10/31(金) 13:11:57
>>915
相談室スレに書こうと思ってたんですが、質問OKなら安心しました
誤爆とはいえ向こうにも書き込んでしまい、マルチのような状態になってしまって申し訳ない

言われてみれば、バージョンが古いのかも知れません。調べてみます。
917デフォルトの名無しさん:2008/10/31(金) 16:12:22
>>915
確かに、バージョンを3.5にしたら解決しました。ありがとうございました。
918デフォルトの名無しさん:2008/10/31(金) 18:14:37
>>894
サンクス。できたよん。
919デフォルトの名無しさん:2008/10/31(金) 19:57:15
Form1.Text = contentsTitle + " - " + Application.ProductName;
こんな感じのアプリケーションよくありますよね
それなのにApplicationにProductNameWithSeparatorが無いのはおかしいですよね
これがあれば前述の式は次のような式に様変わりします
Form1.Text = contentsTitle + Application.ProductNameWithSeparator;
まさにこれが必然であるべきと言わざるを得ない国際標準規格に相応しい式が今ここに出来ています
しかしながら誠に遺憾ではありますが、実はあなたがこの素晴らしい式を使うことは出来ないのです
920デフォルトの名無しさん:2008/10/31(金) 20:03:53
>>919
よくわからんけど、何か気の利いた面白いこと言ってるつもりだったりするのひょっとして
921デフォルトの名無しさん:2008/10/31(金) 21:02:01
>>886
コード例マダー?
922デフォルトの名無しさん:2008/10/31(金) 21:13:56
>>921
ふらっとスレなんだからもう許してやれよw
あんたも粘着質だな。

ちなみにVBなら適当なインターフェイスを被せれば普通にできるな。
923デフォルトの名無しさん:2008/10/31(金) 21:31:19
×許してやれよ
○許してくれよ
924デフォルトの名無しさん:2008/10/31(金) 21:44:13
アホか
925デフォルトの名無しさん:2008/10/31(金) 22:03:51
アホちゃいまんねん
926デフォルトの名無しさん:2008/10/31(金) 22:16:57
ペーでんねん
927デフォルトの名無しさん:2008/10/31(金) 22:20:22
>>917
SDK使ってるの?
VC#2008Express使おうよ
928デフォルトの名無しさん:2008/10/31(金) 22:30:59
>>927
> VC#2008Express使おうよ

無料版はいろいろ制限がきつくてね(´・ω・`)
929デフォルトの名無しさん:2008/10/31(金) 22:33:39
SDKと比較した制限なんて無いよ
あたりまえだけどSDKでできることは全部できる
930デフォルトの名無しさん:2008/10/31(金) 22:35:00
そういう事は制限が気になるほどの知識を付けてから言え
931デフォルトの名無しさん:2008/10/31(金) 22:36:09
徒労好きな奴なんだからほっとけば
932デフォルトの名無しさん:2008/10/31(金) 22:37:46
>>927
3.5は日本語化されたの?
933デフォルトの名無しさん:2008/10/31(金) 23:46:32
DataGridView使うときはSDK使った方がいいよ。理由は…
934デフォルトの名無しさん:2008/11/01(土) 00:11:31
意味わからん
デザイナ使わずにSDKと同じようにコードから使うこともできるだろ
935デフォルトの名無しさん:2008/11/01(土) 03:20:17
無料版はいろいろ制限がきつくてね(´・ω・`)
936デフォルトの名無しさん:2008/11/01(土) 03:30:49
いろいろとは?
937デフォルトの名無しさん:2008/11/01(土) 09:09:52
>>921
コントロールがイベントハンドラを呼び出す場合とか?
実装がどうなってるか知らんけど。
938デフォルトの名無しさん:2008/11/01(土) 11:50:04
>>937
デリゲートはオブジェクト参照+関数ポインタ
インスタンス化するときには対象のメソッドへのアクセス権が必要だからカプセル化は保たれる
939デフォルトの名無しさん:2008/11/01(土) 13:31:47
c++風に表現すると、
クラスfooのメンバに
クラスhogeのインスタンスへのポインタを
持たせる、ってことはC#でできるんでしょうか?

どうやって書いたらいいか教えてください。
940デフォルトの名無しさん:2008/11/01(土) 13:33:25
class foo { hoge hoge; }
クラスは参照型だからこれでおk
941デフォルトの名無しさん:2008/11/01(土) 14:26:20
全ソースで共通で使えるエイリアス作成はできるでしょうか?

やりたいことは、
using DWORD=System.UInt32
と同様。
これだと、全ソースファイルに書かなきゃならなくて。
942デフォルトの名無しさん:2008/11/01(土) 14:29:24
できませんというかできないようにしてあります
943デフォルトの名無しさん:2008/11/01(土) 15:17:19
クラスを別個の .cs ファイルに記述する際、先頭のnamespaceはどうしてる?
メインプログラムのnamespaceと同じ名前にしてる?
それとも今後他のプログラムでそのクラスを使用する際の汎用性を考えて
独立したnamespeceを付与して、メインプログラムの中で using 〜 を記述するか、
そのクラスを呼び出す際にnamespeceまで含めたフルパスで呼び出すようにしてる?
944デフォルトの名無しさん:2008/11/01(土) 15:19:42
>>943
何が言いたいのかよく読み取れないが、
恐らく単に君が名前空間の意義がわかってないだけなんじゃないのか?
945デフォルトの名無しさん:2008/11/01(土) 15:27:36
namespaceは同じにしてフルパスで呼び出さないようにしてるな
946デフォルトの名無しさん:2008/11/01(土) 15:31:18
同じプロジェクト内で全然関連のない名前空間の宣言が出てくるのは変だろ
使い回すならクラスライブラリにするし
947943:2008/11/01(土) 16:00:38
そ、そうなのか・・・
するとそのクラスを他のプロジェクトで使用する際は先頭のnamespaceのところを
そのプロジェクト共通のnamespaceに書き換えてから使えってことね?
948デフォルトの名無しさん:2008/11/01(土) 16:12:53
いや>>946の言ってることは変だから真に受けない方がいいと思うけど。。

だから名前空間の目的を理解してさえいれば、ネーミングや階層構造で迷うことはあっても
方針で迷うなんてありえないと思うんだが。。

なんで一番肝心なこと(名前空間の目的って何?)の理解を後回しにして
意味のない質問をするんだろう。
949デフォルトの名無しさん:2008/11/01(土) 16:25:46
別のプロジェクトにソースファイルをコピーして使うなら、
どうせその時点から別物なんだから名前空間なんてどうでもいいと思うんだよね
むしろそれぞれ変えた方が、あとでややこしくならないかも
950949:2008/11/01(土) 16:38:25
自分でも何言ってるのかわからないので

別のプロジェクトにクラスAのソースファイルをコピーすると、二つの別のバージョンのAができることになる
2つはそれぞれ個別に編集される可能性がある別物なんだから、完全に同じ名前を持つのは不適切じゃないか?
同じソースファイルを二つのプロジェクトで共有するのなら話は別だけどお勧めはしない
951デフォルトの名無しさん:2008/11/01(土) 16:53:49
DataSetオブジェクトを空にするというか、一度読んだら常駐してもらわなくていいので
データを読み込んだらメモリ空間から消すにはどうしたらいいの?
952951:2008/11/01(土) 16:57:08
スマソ。DataSet.Clear()があった。自己解決です><;
953デフォルトの名無しさん:2008/11/01(土) 20:27:33
下のように、 IList<IList<int>> という風にリストを二重にしてはいけないんでしょうか?
エラー CS1503: 引数 '3': 'System.Collections.Generic.List<System.Collections.Generic.List<int>>' から 'System.Collections.Generic.IList<System.Collections.Generic.IList<int>>' に変換できません。
というエラーが出ますが、どうしてでしょうか?
一つ目の引数にはエラーが出ません。

public class neko
{
IList<int> ageValue;
IList<IList<int>> sageValue;

public neko(IList<int> age, IList<IList<int> sage)
{
ageValue = age;
sageValue= sage;
}
}

public class inu
{
neko process()
{
List<int> ageTmp = new List<int>();
List<List<int>> sageTmp = new List<List<int>>();
〜略
return new neko(ageTmp, sageTmp); ←ここでエラー
}
}
954デフォルトの名無しさん:2008/11/01(土) 20:34:52
List<List<int>>はIList<List<int>>としては扱えるけどIList<IList<int>>としては扱えない
sageTmpの型をList<List<int>>ではなくList<IList<int>>にすればいい
C#4.0ではIEnumerable<List<int>>がIEnumerable<IList<int>>として扱えたりするらしいけど
その例ではC#4.0になってもたぶん無理
955953:2008/11/01(土) 21:15:00
>>954
ありがとうございました。教えていただいたとおりにしたらコンパイルは通りました。

ただどうしてなのか理由がわからないので>>1に従い勇気を持って再度質問します。

・どうしてList<IList<int>>にするとコンパイルを通るのか?できるだけ噛み砕いて教えてほしいです。

・IListとListの違いはなにか?
 >>953はとあるサンプルコードを引用したものですが、どうしてnekoのメンバをIListでもっているのか?
 Listではダメなのか?
 そもそもIListはインターフェースではないのか?(インターフェースのクラスに値を保存できるのか?)

以上、よろしくお願いします。
956デフォルトの名無しさん:2008/11/01(土) 21:30:20
List<T>はIList<T>を継承してるからIList<T>型として扱える。
だからList<List<T>>が継承しているのはIList<List<T>>で、IList<List<T>>型として扱える。
C#ではジェネリックの型パラメータ(<>内に指定するやつ)が異なるとそれぞれ別の型とみなされる。
そのため、IList<List<T>>とIList<IList<T>>は別の型だから互換性がない。

IList<T>で持ってるとList<T>だけじゃなくてIList<T>を実装してる型のオブジェクトならなんでも
持てる(Tの配列とか)
957デフォルトの名無しさん:2008/11/01(土) 21:35:46
言語がバージョンアップするってのが受け入れられない
それは広辞苑にチョベリグという語句が列記されてしまうのと同じことのように思える
それは世間ではチョベリバな出来事では無いだろうか
958デフォルトの名無しさん:2008/11/01(土) 21:49:41
>>956
超わかった! 

ような気がする!

ありがとうございました。
959デフォルトの名無しさん:2008/11/01(土) 22:15:27
>>956
配列みたいに共変性がないという理解でいいのかな
960デフォルトの名無しさん:2008/11/01(土) 22:34:59
うん
C#4.0では制限付きで共変性と反変性が導入されるらしい
961デフォルトの名無しさん:2008/11/02(日) 00:04:22
>>960
まだそんな細かいところで改良が続くんだ。
しかし勉強嫌いな俺にはちょっとありがた迷惑気味だなw
2.0の機能だってまだ完全に使いこなせるわけじゃにのに。。
962デフォルトの名無しさん:2008/11/02(日) 00:32:00
細かいところどころか、動的型とか省略可能引数とかまた大改造だよ
将来的にはメタプログラミングを視野に入れてるとかw
963デフォルトの名無しさん:2008/11/02(日) 03:16:37
>.NET Framework Version 2.0 以降では、現在読み込まれているランタイムよりも
>バージョン番号が新しい .NET Framework のバージョンでコンパイルされたアセンブリを、
>ランタイムが読み込まないようになりました。
>これに該当するのは、バージョン番号のメジャー部分とマイナー部分を組み合わせた番号です。

これは2.0だけで正常に動作するプログラムを3.5でコンパイルすると
必要のないランタイムまで呼び出されてパフォーマンスの低下に繋がるということですか?
964デフォルトの名無しさん:2008/11/02(日) 03:25:48
>>963
1.1しかインストールされていない環境で2.0のアセンブリを実行すると、
そのまま実行されて転ける。
2.0までしかインストールされていない環境で3.5のアセンブリを実行すると
警告を出して終了する。
ランタイムよりも新しいバージョンで作られたアセンブリは、たとえマイナー
バージョンの差異であっても実行されない。

ってことじゃないの?
965デフォルトの名無しさん:2008/11/02(日) 04:29:25
つまりどちらにせよランタイムは全て起動されるわけですか
その上にモノがあるかないかの違いだけで
966デフォルトの名無しさん:2008/11/02(日) 05:34:14
.NET2.0が出たときの文書なので「.NET Framework のバージョン」は
「ランタイムのバージョン」に読み替える必要がある。
.NET3.5のランタイム(CLR)は.NET2.0の2.0.50727と同じもの。
.NET3.5のC#3.0でコンパイルしても追加されたアセンブリを参照していない限り.NET2.0の環境で動く。
967デフォルトの名無しさん:2008/11/02(日) 06:21:50
3.5のコンパイラの方が優れてるんですよね?
968デフォルトの名無しさん:2008/11/02(日) 09:29:11
> Application.SetCompatibleTextRenderingDefault メソッド
Program.csにあるな

> 型 : System.Boolean
> 新しいコントロールに適用する既定値。
> true の場合、UseCompatibleTextRendering をサポートする新しいコントロールは、テキスト表示用の GDI を使用し、
> false の場合は、GDI+ を使用します。
初めからApplication.SetCompatibleTextRenderingDefault(false);と書いてあったからGDI+を使ってるんだな
名前的にもGDI+はGDIより良さそうだし親切だな

> 解説
> 特定の Windows フォーム コントロールでは、GDI グラフィックス ライブラリまたはより新しい GDI+ ライブラリのいずれを使用してもテキストを描画できます。
> このように変更されたのは、GDI+ にパフォーマンスとローカライズに関する問題があるからです。
> 既定では、UseCompatibleTextRendering プロパティをサポートする既存のコントロールは、下位互換性を確保するために true に設定されますが、
> Windows フォーム 2.0 以降に含まれるすべてのコントロールでは、このプロパティは一様に false に設定されます。
> 新しいコントロールの既定のテキスト描画方法を切り替える場合は、SetCompatibleTextRenderingDefault を使用します。


       / ̄ ̄ ̄\
     / ─    ─ \
    /  <○>  <○>  \.
    |    (__人__)    |
    \    ` ⌒´    /
    /              \
969デフォルトの名無しさん:2008/11/02(日) 11:27:47
WPFを使えという事ですね
970デフォルトの名無しさん:2008/11/02(日) 12:11:39
 ジェネリクスで定義した二次元配列をバイナリファイルに書き込みたいのですが、どうしたらよいのかわかりません。
どなたか教えて下さい。
971デフォルトの名無しさん:2008/11/02(日) 21:56:03
>>968
GDI+は常にソフトウェア処理。
一方のGDIは、Vista DWM環境以前なら一部ハードウェアアクセラレーションがある。
972デフォルトの名無しさん:2008/11/03(月) 00:45:16
http://www12.plala.or.jp/dokugaku/main/1/2.html

この通りにインストールして、環境変数もいじったんですが
「'csc'は、内部コマンドまたは外部コマ……認識されていません。」
と表示されます。
どなたか解決法をお教えてください。
973デフォルトの名無しさん:2008/11/03(月) 00:48:31
環境変数を正しくいじってないから。
974デフォルトの名無しさん:2008/11/03(月) 00:49:49
コンソールが開いたままで環境変数の変更が反映されてないとか
975デフォルトの名無しさん:2008/11/03(月) 00:50:35
;C:\WINDOWS\Microsoft.NET\Framework\2.0.50727
これを追加したんですが、何かまずかったでしょうか。
976デフォルトの名無しさん:2008/11/03(月) 00:53:38
>>974
ドキッとしましたが、違いました。ちゃんとOK押しました。
977デフォルトの名無しさん:2008/11/03(月) 00:58:27
;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
うちのはこうだな
978デフォルトの名無しさん:2008/11/03(月) 00:59:50
コンソールを開きなおさないと反映されないってことかと。
979デフォルトの名無しさん:2008/11/03(月) 01:02:54
>>975
vが抜けてるね
980デフォルトの名無しさん:2008/11/03(月) 01:03:03
>>973-978
解決しました。ありがとうございました。
原因はコンソールの開きなおしてなかったからですorz
981デフォルトの名無しさん:2008/11/03(月) 01:07:33
>>974
大正解だったな
982デフォルトの名無しさん:2008/11/03(月) 01:30:20
とりあえずpathって打ってみればいいよ。
983デフォルトの名無しさん:2008/11/03(月) 02:21:20
テキストを読み込んで改行で配列にわけたあと、
空行を条件として書く場合、
if (Regex.Match(line,"^$").Success)
if(line.Contains("^$"))
if(line.Contains(""))
とかを試したのですが、うまくいきません。
空行ってどう書けばいいですか?

あと、空行以降の行をまとめてひとつのstringにしたいのですが、
if(空行があったら) {
wordFlag = true;
string lines = (String.Concat(lines));
lineNumber++;
}
でできますか?
984デフォルトの名無しさん:2008/11/03(月) 02:28:36

ぶっちゃけ俺は.NET2005からプログラムの勉強は一切しなくなったよ。
ぶっちゃけプログラム言語の機能が強化されたとしても実行スピードにそれ程大差が
あるとは思えない。

なのに言語が4.0とかに進化したからといってその辺を勉強する意味ってあるのかな?
985デフォルトの名無しさん:2008/11/03(月) 02:31:24
そうして人は老けて行くのですね
986デフォルトの名無しさん:2008/11/03(月) 02:41:34
>>983
lineがstring型なら
if ( line == String.Empty ) { }
987デフォルトの名無しさん:2008/11/03(月) 02:43:30
勉強やめたところでプログラマとしては終わり。
988デフォルトの名無しさん:2008/11/03(月) 02:53:24
いや、社会人として(ry
989デフォルトの名無しさん:2008/11/03(月) 02:56:47
そもそも社会人じゃない可能性大
990デフォルトの名無しさん:2008/11/03(月) 02:59:59
991デフォルトの名無しさん:2008/11/03(月) 03:02:49
スレ統合の話はどうなったw
992デフォルトの名無しさん:2008/11/03(月) 03:25:02
そういや、そんな話もあったなぁ・・。
993デフォルトの名無しさん:2008/11/03(月) 03:27:22
あっちは初心者に厳しいような気がするし、このままでいいんじゃね?
994デフォルトの名無しさん:2008/11/03(月) 03:32:18
やってることは一緒だし回答する奴も一緒だし
分ける必要なんてありゃしない
995デフォルトの名無しさん:2008/11/03(月) 06:39:02
>>990 乙
どちらもスレの消費は速いからこのままでいいと思う。
どこかで議論してそういう方向なのかと思ったら、毎回次スレが立つとごねる奴が出没してるだけだな。
996デフォルトの名無しさん:2008/11/03(月) 06:53:17
議論にならんよ、機械的に馬鹿がスレ立ててるだけ
中身が一緒のものを分ける必要性が無い
消費が速いとか関係無いし
997デフォルトの名無しさん:2008/11/03(月) 06:54:42
やれやれ、初心者スレでバカにされてそれを根に持ってるタイプだな
998デフォルトの名無しさん:2008/11/03(月) 07:01:44
そもそも本スレで馬鹿にされてヤケになって初心者スレを作ったのが始まりだからな
いつまで必死こいて初心者スレを保守してんだよ
999デフォルトの名無しさん:2008/11/03(月) 07:20:12
初心者スレと本スレじゃ倍近く勢いに差がある
実質的な違いがあると見たほうが適切じゃね
1000デフォルトの名無しさん:2008/11/03(月) 07:21:19
具体的に、どこが違うんだよドアホ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。