ふらっとC#,C♯,C#(初心者用) Part32
at TECH
1:ななしぃ#
08/10/12 15:07:41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
2:ななしぃ#
08/10/12 15:09:52
C#, C♯, C#相談室 Part48
スレリンク(tech板)
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
スレリンク(tech板)
Live3
スレリンク(tech板)
初心者のためのプログラミング言語ガイド Part11
スレリンク(tech板)
3:ななしぃ#
08/10/12 15:11:43
参考サイト。まずはここで検索してから。
URLリンク(www.google.co.jp)
URLリンク(msdn.microsoft.com)
URLリンク(homepage3.nifty.com)
URLリンク(www.atmarkit.co.jp)
URLリンク(dobon.net)
URLリンク(jeanne.wankuma.com)
URLリンク(www.labasp.net)
4:デフォルトの名無しさん
08/10/12 15:17:02
>>1
乙
5:デフォルトの名無しさん
08/10/12 15:22:45
>>1
糞スレ乱立すんな
6:デフォルトの名無しさん
08/10/12 15:23:40
>>1重複
↓↓以降こちらへ
スレリンク(tech板)
7:デフォルトの名無しさん
08/10/12 15:35:47
>>1乙
ぷらっととかいうスレを立ててる荒らしは死ね
8:デフォルトの名無しさん
08/10/12 15:42:15
楽しいか?
しかし幼稚な奴らばっかりだな本当。
9:デフォルトの名無しさん
08/10/12 15:46:29
さて、こちらをお気に入りに追加して
ぷらっとを削除する作業に戻るとするか
10:デフォルトの名無しさん
08/10/12 15:51:49
>>1 おい、重複だぞ
スレリンク(tech板)
11:デフォルトの名無しさん
08/10/12 15:55:47
>>10
いい加減にしろ
死ね
12:デフォルトの名無しさん
08/10/12 15:59:11
>>1
乙
ぷらっととかという荒らしの立てたスレは放置で。
質問のある方どうぞ
↓
13:デフォルトの名無しさん
08/10/12 16:00:14
>>10
死にません。
以降、こちらのすれをご利用ください。
スレリンク(tech板)
14:デフォルトの名無しさん
08/10/12 16:02:14
>>13
いいえ使いません
15:デフォルトの名無しさん
08/10/12 16:30:14
質問です、以前のWindowsではプロセス間通信をDDEやOLEで行っていたかと
思いますが、.NETではそれに代わるものが出来たのでしょうか?
よろしくお願いします。
16:デフォルトの名無しさん
08/10/12 16:33:57
リモーティングとかWCFとか
17:デフォルトの名無しさん
08/10/12 17:48:21
アセンブリ情報のタイトルと製品の違いが分かりません
どのように表記すべきか
ご教授ください
18:デフォルトの名無しさん
08/10/12 18:01:28
他のEXEのプロパティとか見てみては
19:デフォルトの名無しさん
08/10/12 18:19:49
例えば
タイトルがVisual C# 2008
製品がVisual C# 2008 Express Edition
みたいな感じとかで考えたらどうだろう
ちなみにAssemblyTitle属性はXP以降でタスクバーボタンのグループ化したときにも表示されたりしたはず
20:デフォルトの名無しさん
08/10/12 19:19:01
つまりタイトルはタイトルバーに表示されるべき範囲の名称に留め、製品はそれを個と見なした場合の製品名ということですね!わかります!!
21:デフォルトの名無しさん
08/10/12 19:57:04
タイトルに2バイト文字列使うってプログラマとしてどうなの?
22:デフォルトの名無しさん
08/10/12 20:02:21
突っ込む奴が馬鹿だと笑えない。
「2バイト文字列」っていつの時代の概念だよ。
23:デフォルトの名無しさん
08/10/12 20:51:02
Windowsの人たちはUTF-16LEBOMありのことを
昔からの慣習を引きずってUnicodeとか言うので
2バイト文字列って言ってくれたほうが正直ありがたい
サロゲートペア?シラネ
24:デフォルトの名無しさん
08/10/12 22:00:12
今時2バイトだの3バイトだの言ってる奴プログラマ(の重鎮だと思ってる)人としてどうなの?
25:デフォルトの名無しさん
08/10/12 22:20:36
文鎮としてはどうでもいい
26:デフォルトの名無しさん
08/10/12 23:15:59
System.Stringは2バイト/文字だから(例えASCIIの範囲内でも)タイトルに使ってはいけないということですね
27:デフォルトの名無しさん
08/10/13 01:05:49
サロゲートペアと組み合わせ文字わすれんなカス
28:デフォルトの名無しさん
08/10/13 08:54:45
byte配列からデータを抜き出して使用する場合って、みんなどうしてるの?
CやC++だと構造体のポインタにキャストしてアクセスすれば、
間にデータが追加になっても変更が楽なんだけども
調べたらC#でもunsafe fixed使えばキャストできるけど、これが常套手段だとは思えないし、
インデックス値を直に指定してアクセスなんてしたら、データの追加削除が発生したら
変更が大変すぎる
そもそもキャストなんてしないように思えるんだけど、良い方法が思い浮かばない
29:デフォルトの名無しさん
08/10/13 09:28:58
日本語でおk
30:デフォルトの名無しさん
08/10/13 09:46:21
>>28
Marshalクラス使うんじゃね
Marshal.Copyでbyte[]からIntPtr取って、Marshal.PtrToStructureで帰ってきた
のを構造体にキャストするんじゃないかとおもうが……
外してたらごめんね
31:デフォルトの名無しさん
08/10/13 09:52:48
>>28
BinaryReader, MemoryStream 使う。
32:デフォルトの名無しさん
08/10/13 18:03:39
>>28
配列の長さにもよるけど、簡単ならBitConverter、少し複雑ならBinaryReaderかな
33:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/13 20:11:57
それで動くと思うよ。エスパーを待ってもいいけど
どう「止まる」かを具体的に書くといいかもしれない
エラーが出るならそのメッセージとか
35:デフォルトの名無しさん
08/10/13 22:00:47
>>33
要はそのコードなら止まらないが、st = "Hoge,野田,め組,578954"とかだと
int.Parse(stArray[0])の呼び出しで例外が発生する。
それを回避するために
int.TryParse(stArray[0],out value)
こっちを使うといい。
36:デフォルトの名無しさん
08/10/13 22:34:16
>>33
教師やっててそんなこともわからないのかよ
37:デフォルトの名無しさん
08/10/13 22:41:48
のだめ知らんのか
38:デフォルトの名無しさん
08/10/13 22:42:45
みんなsprintfを自作して使っていると思う。俺は、へたれだから、Formatでいやいや逃げてきている。
ここらで、便利なsprintf もってる椰子がいたら公開してはくれんだろうか。
39:デフォルトの名無しさん
08/10/13 22:49:54
普通にstring.Formatのほうが便利
40:デフォルトの名無しさん
08/10/13 22:51:16
まじですか。c++が長すぎて、なんか直感的じゃないんだよな。
41:デフォルトの名無しさん
08/10/13 23:01:23
Stringってかかなきゃいかんのがめんどいよなあ
42:デフォルトの名無しさん
08/10/13 23:03:21
俺も、MSDNの文字列化の書式指定辺りが訳わかめだし。
正規表現も思ったように指定するのがめんどいんで、
sprintf,sscanf互換の関数が欲しい。
43:デフォルトの名無しさん
08/10/13 23:10:20
string.Sprintf()でもいいから、欲しいくらいだよ。
それか、perl, ruby風の文字列表記。
44:デフォルトの名無しさん
08/10/13 23:11:50
なんかねえ
慣れろとしか言えん
45:デフォルトの名無しさん
08/10/13 23:19:45
わからないから戻せっていうんならずっとCやってれば
46:デフォルトの名無しさん
08/10/13 23:21:11
C#のほうが高尚だとおもってる奴がまたでたな。
47:デフォルトの名無しさん
08/10/13 23:28:51
URLリンク(d.hatena.ne.jp)
俺は、このまんま、ちょい必要なの足して使ってるな。
48:デフォルトの名無しさん
08/10/13 23:29:55
ほとんどは型指定なしの{0}ですむんだから、難しく思えるのはどのあたりだろ?
整数とか実数のことをいってるのかな。前詰め後ろ詰めのこと?
49:デフォルトの名無しさん
08/10/13 23:35:50
使い方なんて、わかんないとこないとおもうし、わからなかったら調べるだけ。
問題なのは、 直感的に最終的な文字列がわかり難い ことだとおもう。
無駄に長い記述になるし。
50:デフォルトの名無しさん
08/10/13 23:45:43
俺は、%02X 相当のことするのにだいぶヘルプを探しまくった。
結局、精度指定子とやらが文章中に埋まってるのをようやく発見したが、
あんな仕様書は俺が上司だったら却下だな。
同じヘルプのsprintfとかの方が全然読みやすいのに。なんだあれは。
51:デフォルトの名無しさん
08/10/13 23:53:34
そういう話なら慣れの問題としかいえないね。
あとはマニュアル(MSDN)の記述がよくなくて探しにくいというのが大きいかも。
{ 位置情報 [[ , 総桁数] : 型[[0]サイズ]] }
「カンマ総桁数」のあたりの書き方がどわすれすることが多いよね。
52:デフォルトの名無しさん
08/10/14 00:48:54
私はfontDialog1で選択されたフォントをtextBox1に適用しようとしています
private void fontDialog1_Ok(object sender, EventArgs e)
{
textBox1.Font = fontDialog1.Font;
}
これで何も変化がありません
エスパー助けてください
53:デフォルトの名無しさん
08/10/14 01:31:28
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Font = fontDialog1.Font;
}
じゃだめなのか?
54:デフォルトの名無しさん
08/10/14 01:36:10
適用ボタンでもいけた。呼ばれてないんじゃない?
55:52
08/10/14 01:40:37
>>53
思い通りの動作になりました有難うございます
56:デフォルトの名無しさん
08/10/14 01:47:35
Okというイベントが無いみたいで呼ばれてなかったです
小生Applyでは簡単に反映は出来ていたんですが、適用ボタン表示したくなかったのでOKボタンで反映させる方法が知りたかったのであります
57:デフォルトの名無しさん
08/10/14 01:57:43
なるほど、自前で無理やり用意したのかw
58:デフォルトの名無しさん
08/10/14 12:19:36
Media Player Classicのような再生プレイヤーを作るのって難しいでしょうか?
デコードはxdivなりffdshowなり各自インストールしてもらってそちらに任せるとして、
あとは映像を指定の領域に再生させたり、一時停止させたり、シークバーで任意の
場所に移動できたり、音量を変えられれば満足なんですが・・・
もしこれらの機能を実装するとしたらどんなことを勉強する必要がありますか?
59:デフォルトの名無しさん
08/10/14 12:21:19
過去の遺産だが俺ならDirectShow
60:デフォルトの名無しさん
08/10/14 13:57:35
いろいろと問題も多いけど、AudioVideoPlaybackを触ってみるのもいいかも。
61:58
08/10/14 14:16:19
どうもです。
目指すのは本当にシンプルで再生負荷が極めて軽いプレイヤーです。
8年前のPCでH.264といった動画も再生できるような軽さを追求したいと思っています。
プログラムの工夫いかんで軽くすることは可能でしょうか?
62:デフォルトの名無しさん
08/10/14 14:20:41
それはH264デコーダの革命が必要だろう
プレイヤー関係ないと思うけど
63:デフォルトの名無しさん
08/10/14 14:30:31
こんな質問してる奴が作れるのかね
64:デフォルトの名無しさん
08/10/14 14:41:37
C#の開発手順?というか定石みたいなのが書いてあるWebサイトってありますか?
Program.csに書いたらいいのか、新しいクラス作って書いていけばいいのか、、、など。
65:デフォルトの名無しさん
08/10/14 14:45:58
取りあえずProgram.cs(Main)は殆ど触らん
66:デフォルトの名無しさん
08/10/14 14:59:14
>>65
ありがとうございます。
そうなんですか。。。今とりあえずprogram.csの中にメソッド追加してるんですが、良い方法ではないんですね。
プロジェクト->クラスの追加
でクラスを追加して、そこにコーディングしていくのが良いんでしょうか。
もしそうなら、そのクラスをnewするのはどこが一番いいですか?
67:デフォルトの名無しさん
08/10/14 15:08:11
>>63
誰もが一度は通る道だろ。
お前さんだって、俺だって・・・
68:デフォルトの名無しさん
08/10/14 15:15:00
>>66
おまいさんに必要なのは、まず何を作りたいのかはっきりさせることだ。
次にそれを作るのに必要なクラスを考えることだ。
69:デフォルトの名無しさん
08/10/14 15:20:28
>>68
それをmain()の中でnewすればいいですか?
70:デフォルトの名無しさん
08/10/14 15:42:59
7年前のノートPC使ってるけどWMPでH.264再生してますよ
この1年で何があったんだよ・・
71:デフォルトの名無しさん
08/10/14 16:26:24
ベストプラクティス的なものは本を買わないと無いんでしょうか?
ググりまくっても、なかなかいい資料に出会えません。
初心者の道しるべがほしい・・・。
72:デフォルトの名無しさん
08/10/14 17:44:33
そういうのは先人のコードから学ぶのが一番だと思う。
SourceForge や CodePlex 等から適当なやつを拾ってきて読むと、いい勉強になるんじゃないかな。
73:デフォルトの名無しさん
08/10/14 18:33:20
メニョーストリップで一個一個のアイテムのハンドラで処理するんじゃなくて、
一箇所で受け取って、このアイテムが押されてたからこの処理。的な事はできないの?
74:デフォルトの名無しさん
08/10/14 18:37:40
座標しかわからないよ
75:デフォルトの名無しさん
08/10/14 18:40:03
できるよ
76:デフォルトの名無しさん
08/10/14 18:44:08
むりよ
77:デフォルトの名無しさん
08/10/14 18:45:54
ハンドラ一ヶ所にしたい、ということならできる。
78:デフォルトの名無しさん
08/10/14 18:47:43
イベントハンドラ使い廻すか。
ストリップ本体のClick拾って項目突き止めるか。
79:デフォルトの名無しさん
08/10/14 22:04:59
「メニョー」では無理
80:デフォルトの名無しさん
08/10/14 22:08:06
「メニェー」とか発音が困難になるよかマシ
81:デフォルトの名無しさん
08/10/14 22:50:59
3.5SP1は何時になったら完全日本語になんねん!
82:デフォルトの名無しさん
08/10/15 02:37:55
for文とかのループ中ではプロパティは使わない方がベター?
83:デフォルトの名無しさん
08/10/15 03:29:49
>>82
単純なGet/Setならインライン化されるので問題なし
84:デフォルトの名無しさん
08/10/15 03:31:47
インライン化されるプロパティとされないプロパティはどう区別するの?
85:デフォルトの名無しさん
08/10/15 04:33:42
CLRの気持ちになって考える
86:デフォルトの名無しさん
08/10/15 16:18:04
コントロールには処理自体に時間のかかるプロパティが多いので場合によってはキャッシュ
System.Drawingも注意
87:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/15 17:57:35
二次元配列なんて捨ててDateTimeとFruitの二つのプロパティ持ったクラスの配列にしたほうがいいと思うけどなー
とりあえずReadAllLinesで読み込んで
その後二次元配列を生成
読み込んだのをループで回してSplitで分割して挿入していく
89:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/15 19:01:46
どこからも参照されていないメソッドの列挙とかって出来ますか?
91:デフォルトの名無しさん
08/10/15 19:07:42
FxCop使ってみるとか
92:デフォルトの名無しさん
08/10/15 19:13:14
普通に考えて無理。
まあソリューション内で直参照だけでいいなら、全ての参照を検索だったかで出来る。
93:デフォルトの名無しさん
08/10/15 19:14:38
あごめん、それじゃ駄目なんだなきっと。
FxCopってできたっけかな?
94:デフォルトの名無しさん
08/10/15 19:16:26
FxCopでできるよ
95:デフォルトの名無しさん
08/10/15 19:20:40
あやうくgrepとか答えて赤面するところだった
96:デフォルトの名無しさん
08/10/15 19:23:00
>>88
二つのプロパティ持ったクラスの配列を作った場合に例えば
DateTimeだけの配列やFruitだけの配列を取り出したい場合は
for文などで新たな配列を作るしか思いつかないのですが
他に良い方法はないでしょうか。
97:デフォルトの名無しさん
08/10/15 19:24:58
fruits.Select(x=>x.Fruit).ToArray()
98:デフォルトの名無しさん
08/10/15 19:26:48
そんなのは別に二次元配列だろうがジャグ配列だろうが変わらんが
まあC#3.0ならlist.Select(x => x.Fruit).ToArray()とかできるけどな
99:デフォルトの名無しさん
08/10/15 19:29:50
>>88
アドバイスありがとうございます。
二次元配列を生成、というところができていないので、
具体的なソースもいただけるとうれしいです。
>>89
配列の配列。そういう考え方があるのですね。
このコード、{}の対応がとれていないみたいなのですが、
Split(new[] {' ');
のところって、
Split(new[] {' '});
Split(new[] ' ');
Split(' ');
とかやってみたのですが、うまくいかず。
ところで、二次元配列にはしないものなのですか?
100:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/15 19:49:49
まあ使ってるうちにわかるよ
そのうち気がついたら2次元配列は全く使わなくなってるから
102:デフォルトの名無しさん
08/10/15 19:58:38
>>88、100
ありがとうございます。
>>96、97、98
fruits.Select(x=>x.Fruit).ToArray()
って全文書くとどうなるんですか!?
ひょっとしてこれ、すごくスマート!?
>>101
うっ。そうなんですか。
103:デフォルトの名無しさん
08/10/15 20:04:37
//class Fruit { public DateTime Date { get; set; } public string Fruit { get; set; } }
Fruit[] fruits = 読み込み…;
string[] fruitNameArray = fruits.Select(x => x.Fruit).ToArray();//Fruitだけの配列を作成
104:103
08/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:デフォルトの名無しさん
08/10/15 20:19:46
どうしてプログラムのサンプルって動物とかフルーツなの?
106:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/15 20:58:00
PointとPoint、SizeとSize、同士では足したり引いたりできないの
書いたらこんな風に
ポリフォニカは普通かった面白いだろ。
特に姉妹がかわいいし。
108:デフォルトの名無しさん
08/10/15 20:59:03
>>104、106
これで
バナナ
りんご
みかん
梨
のみを一括して出力するには、
Console.Write(Fruit[]); //104
Console.Write(Fruit); //106
でいいと思うのですが、
問題はこの行をどこに書くかです。
どこに書きゃいいんでしょ?
109:96
08/10/15 21:21:02
C#2.0環境なので、LINQ使わずに実現したいのですが方法は無いでしょうか。
110:デフォルトの名無しさん
08/10/15 21:26:47
>>107
意味的におかしいからできない
WPFのPointは引き算できるんだけど、位置ベクトル扱いで戻り値はVector型だったりする
111:デフォルトの名無しさん
08/10/15 22:56:30
byteとByteみたいに同じような型がいっぱいあるのはなんでなの?
112:デフォルトの名無しさん
08/10/15 22:59:29
byteとByteは同じですよ?
113:デフォルトの名無しさん
08/10/15 23:04:04
回答になってない
なんでおなじのがあるんだよ
114:デフォルトの名無しさん
08/10/15 23:06:58
System.Int32 i;
とかやるのが面倒だから?
115:デフォルトの名無しさん
08/10/15 23:07:45
まあ、よく使う型は短くないと使いにくいからな。
位置づけとしては、
byte の方は C# の組み込みキーワード。
System.Byte の方は .NET Framework の正式名称。
116:デフォルトの名無しさん
08/10/15 23:07:55
基本型だってのを強調するためじゃないの
117:デフォルトの名無しさん
08/10/15 23:27:10
プログラマとしてはどう使い分ければいいの?
118:デフォルトの名無しさん
08/10/15 23:30:48
変数宣言ならキーワード使ってればいい
ただしメソッド名とかの場合はInt32とか使う Convert.ToInt32みたいなの
119:デフォルトの名無しさん
08/10/15 23:30:52
予約語の方一択。
120:デフォルトの名無しさん
08/10/15 23:32:14
自分は定義されてるstaticメソッドを呼び出すときはエイリアスじゃない方をつかうな
Int32.Parse()
Char.IsDigit()
とか
なんでかはわからんが
121:デフォルトの名無しさん
08/10/15 23:33:58
using System が使われていないときに
Byte[] byteStream;
とかやるとByte何それってコンパイラに怒られるから
なるべくbyteを使うようにすればいいんじゃないかと思ったり
122:デフォルトの名無しさん
08/10/15 23:39:36
byteはmscorlib参照しなくても使える
123:デフォルトの名無しさん
08/10/15 23:43:17
予約語一択が無難なんですね
ありやとやんした!
124:デフォルトの名無しさん
08/10/15 23:54:19
理念的にはC#と.NET Frameworkは独立している(例えばintがSystem.int32じゃない
C#の実装もありうる)っていうような「アリバイ作り」以上の意味はないという
認識だったんだが、違うのか?
125:デフォルトの名無しさん
08/10/15 23:56:54
intはSystem.Int32のエイリアスだと言語仕様できまってる
126:デフォルトの名無しさん
08/10/16 01:10:00
それはMSのC#コンパイラの仕様じゃないの?
127:デフォルトの名無しさん
08/10/16 01:17:11
たしかに
128:デフォルトの名無しさん
08/10/16 01:30:09
EcmaのC#言語仕様で 予約語 int は System.Int32 のエイリアスだって決まってる
(Ecma 334 C# Language Specification の 11.1.4 Simple types)
だからMSのコンパイラが、ってわけじゃないと思う。勘違いしてたらごめんね
129:デフォルトの名無しさん
08/10/16 09:28:24
たしかに
130:デフォルトの名無しさん
08/10/16 14:05:50
ListBoxにDisplayMemberとValueMemberを設定してKeyValuePairを
放り込んで操作しているんですが、こういうやり方と、DataSourceを
設定してそっちを操作するのでは、どちらが軽いんでしょうか。
131:デフォルトの名無しさん
08/10/16 14:12:16
普通は問題にならんよそんなのの差
132:デフォルトの名無しさん
08/10/16 14:14:40
知らないならレスしなくていいよ
133:デフォルトの名無しさん
08/10/16 16:43:05
すいません小数点→文字列変換時の丸めについて質問です。
double i = 1999.999999;
Console.WriteLine(i.ToString("F2"));
の結果が 2000.00 になってしまいます。
1999.99 にしたいのですが、勝手に丸められてしまいます。
丸められない方法はないですか?
134:デフォルトの名無しさん
08/10/16 17:17:11
>>133
#.##
135:デフォルトの名無しさん
08/10/16 17:22:03
>>134
丸められてしまいます。
136:デフォルトの名無しさん
08/10/16 17:25:31
数値を切り捨てるか、文字列にしてから切り出す、かなあ。
数値で切り捨てるのは、小数点以下2ケタなら100倍してMath.Floorとか。
137:デフォルトの名無しさん
08/10/16 17:33:26
>>136
グーですグー!
result = Math.Floor(result * 100) / 100;
result.ToString();
でいけました。どもです!
138:デフォルトの名無しさん
08/10/16 19:32:41
decimal 使うたれや
139:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/16 21:02:45
自己解決。
ConvertToに与える加工済みのbmpは既にpng形式になってたので引数2個のほうで問題ありませんでした。
141:デフォルトの名無しさん
08/10/16 21:21:48
普通はMemoryStreamに対してSaveする。
142:デフォルトの名無しさん
08/10/16 22:10:29
>ガベージ コレクションにより、メモリ開放の煩雑さが不必要
Disposeしなくていいってことですか?
143:デフォルトの名無しさん
08/10/16 22:19:33
どこの文章かは分からんがIDisposable.Disposeと.NET管理下のメモリとは何の関係も無い
って何回繰り返したことだろう
144:デフォルトの名無しさん
08/10/16 22:23:19
大事なことなので繰り返しました
145:デフォルトの名無しさん
08/10/16 22:27:23
>>143
それは不正確だと思うが。。
Disposeの個別の実装次第だろう。
146:デフォルトの名無しさん
08/10/16 22:36:59
>>145
じゃあ具体的にマネージドメモリをDisposeの実装でどうにかしてくれ
147:デフォルトの名無しさん
08/10/16 22:42:02
>>146
言ってる意味理解して反論してる?
148:デフォルトの名無しさん
08/10/16 22:45:04
うん
でDisposeの個別の実装をどうマネージドメモリに関係させるの?
149:デフォルトの名無しさん
08/10/16 22:58:25
例えば(Disposeに期待される役割から言って意味がないから普通はやらないけど)
巨大配列への参照をnullにする実装だってありうる。
「それはメモリを開放したことにならん」って言いたいかもしれんが、
その時は落ち着いて>>143を読もう。
150:デフォルトの名無しさん
08/10/16 23:16:06
でもやっぱり関係ないよね
参照を消しただけだもの
151:デフォルトの名無しさん
08/10/17 00:10:34
良く分からんが、Disposeの実装でGC.Collect()を実行するような話か?
152:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/17 00:32:02
普通にはできない。
foreachしたいだけなら、IEnumerable<T>を引数にしたほうがいい。
154:デフォルトの名無しさん
08/10/17 02:34:02
C♯ってくらいだからC言語の内容を包括してますか?
あとC♯を勉強してたらJAVAやD言語についての理解も深まって
いざってときにそれらにシフトしていくことも可能ですか?
C♯に一番興味あるんですけど、JAVAやC言語、D言語ってのも
いいってきくのでその3つにつなげることができるのか疑問です。
155:デフォルトの名無しさん
08/10/17 03:00:47
お前には無理
156:デフォルトの名無しさん
08/10/17 03:41:55
s.Close;ってなんなの
何でいちいちこんなことする必要あるの?
157:デフォルトの名無しさん
08/10/17 04:33:25
>>156
書いておく癖をつけとかないと、なんか色々漏れるんだよ。
理由が想像すらつかない程度の知識しかないんなら、とりあえず面倒でも従っとけ。
158:デフォルトの名無しさん
08/10/17 04:44:09
>>154
言語の知識だけで一人前になれるほどプログラムは単純じゃありません。
興味を持っただけの段階で知識の応用範囲を気にするなんて小賢しい真似をする暇があるなら
さっさと勉強した方がなんぼか有意義です。
でないと自分に必要な分野すら見えてきません。
159:デフォルトの名無しさん
08/10/17 05:22:12
>>153
なんで嘘つくの?
160:デフォルトの名無しさん
08/10/17 06:11:34
>なんなの、するの?
こういう言い回しする奴はとことん頭悪そうだな
161:デフォルトの名無しさん
08/10/17 06:54:25
>>152
リフレクション
162:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/17 08:52:18
>>162
両方同じインターフェース継承させちゃダメなのか?
それがダメなら、リフレクションでやれ。
165:デフォルトの名無しさん
08/10/17 09:17:07
>>162
CodeDomやEmitでコード生成
166:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/17 12:46:33
それが面倒だって言ってるんだろ
168:デフォルトの名無しさん
08/10/17 13:59:56
配列
int[] a = a[10];
があるとします。
この配列の範囲外にアクセスしようとしたら、たとえばa[-1]やa[10]にアクセスしようとしたとき、
特定の数字(たとえば-1)を返すようにすることは可能でしょうか?
169:デフォルトの名無しさん
08/10/17 14:01:16
無理
インデクサを実装した型を自作してそれっぽく振る舞わせることは可能
意味がわからなかったら勉強しろとしか言えない
170:デフォルトの名無しさん
08/10/17 14:07:39
インデクサですか、ちょっと勉強してきます。
あるいは簡単にメソッドで実現するという方法は一般的でしょうか?
int a(int x)
とし、0 <= x <= 9 以外の範囲を指定したら-1をreturnするようなメソッドの中に
int a[];
を宣言するという方法もあるかと思いますが・・・
171:デフォルトの名無しさん
08/10/17 14:20:08
ま別にそれでもいいんじゃね
今なら拡張メソッドでGetValueOrDefault<T>(this IList<T> list, int index, T default)とかか
やらんけど
172:デフォルトの名無しさん
08/10/17 14:57:16
ここ初心者用なのに初心者叩かれるよね
173:デフォルトの名無しさん
08/10/17 15:08:31
全然
174:デフォルトの名無しさん
08/10/17 15:10:08
ディスプレイ(もしくは特定のウインド)を(動画で)キャプチャし
その動画をLAN内の別のPCのメディアプレイヤーで見れるようにする(WMEのような)ソフトを作りたいのですが
非常に大雑把な作成の流れですが下のような流れで作ろうとすれば作れるでしょうか?
ココをこうすればいい、この部分に注意するようになどのご意見を賜りたいので書き込みました
Graphics.CopyFromScreenメソッドを使用して
連続でディスプレイをキャプチャ
↓
画像ファイルを繋げて動画へ変換しつつ
httpとUDPで通信できるサーバを立てる
↓
メディアプレイヤーから接続があった場合
そこへ動画を配信する
175:デフォルトの名無しさん
08/10/17 15:28:02
エンコードはしないの?
176:デフォルトの名無しさん
08/10/17 15:33:40
エンコードしないとサイズやらなんやら大きくなってしまいますね・・
メモしておきます
177:デフォルトの名無しさん
08/10/17 16:26:30
WindowsMediaServiceで出来るだろん
178:デフォルトの名無しさん
08/10/17 18:36:23
C#の正規表現で、「スペース(半角、空白)か改行しかない」という
条件はどう表現するのでしょうか。
179:デフォルトの名無しさん
08/10/17 18:51:25
>>169
インデクサに関してちょこっと調べてきました。
setやgetで要素を設定・取得するわけですが、要素数が100個とか1000個になると
swich〜case文で設定していくのは大変な作業になってしまう気がするのですが・・・
180:デフォルトの名無しさん
08/10/17 18:58:13
意味が分からん
普通そんなのはDictionary使うだろ
181:デフォルトの名無しさん
08/10/17 18:59:07
私の辞書にその発想は無かったわ。
182:178
08/10/17 20:13:57
^\s+\n と ^\s*$ を組み合わせる事で表現出来たような気がする
んですが、間違ってないでしょうか。
183:デフォルトの名無しさん
08/10/17 20:20:22
>>179
なんでswitch? その発想はなかったわw
class MyArray<T> {
private T[] array;
public T this[int index] { get { 0 <= index && index < array.Length ? array[index] : -1 } }
}
184:178
08/10/17 20:21:18
すいません。正規表現スレ行きます。
185:183
08/10/17 20:22:17
return忘れてた
setはarray[index] = value;ね
186:デフォルトの名無しさん
08/10/17 20:56:23
>>183
>>185
どうもです(^-^)ノ
そのsetを実装すればあとはfor文なりで配列に値を普通に格納していけるわけですね。
187:デフォルトの名無しさん
08/10/17 21:34:02
すみません。
配列で複数作ったクラスに継承使ったら複数の基底クラスが生成されて負担が大きくなる
という事はありますか?
188:デフォルトの名無しさん
08/10/17 21:36:06
うぜえよお前!
189:デフォルトの名無しさん
08/10/17 21:36:14
C#か日本語でおk
190:デフォルトの名無しさん
08/10/17 22:13:47
クラスを入れる変数はポインタだからクラスの大きさとは関係ない
配列は変数がたくさん並んだものだからクラスの大きさとは関係ない
191:デフォルトの名無しさん
08/10/17 22:31:55
>>190
分かりました。ありがとうございます。
192:デフォルトの名無しさん
08/10/18 00:21:21
コマンドライン引数に関する質問です。
class MyApp { static void Main(string[] args) { foreach(string s in args) System.Console.WriteLine(s); } }
こんな感じの引数を表示するだけの物を動かしてて気付いたんですが、
argsにはワイルドカードが展開されない状態のコマンドライン引数が入るみたいですけど、
展開済みの引数配列を得るにはどうすればよいんでしょう?
193:デフォルトの名無しさん
08/10/18 00:25:14
そもそも引数にそんな概念はないだろ
自分で好きなように処理するだけ
194:デフォルトの名無しさん
08/10/18 00:35:22
Unixのシェルには存在するらしいよ
シェルだからプログラムに渡される前に展開される
195:デフォルトの名無しさん
08/10/18 00:39:34
ワイルドカードを「展開」するとかされるって言い回しは一般的なんだろうか
196:デフォルトの名無しさん
08/10/18 01:10:11
>>195
Unixシェルがやってくれるのは展開すると言われることが多いと思う。
197:デフォルトの名無しさん
08/10/18 01:23:21
VC++のsetargv.objみたいなのは.NETにはないのかな
自前で展開すればいいんだろうけど
いかにも車輪の再発明になりそうで躊躇してしまうね
198:デフォルトの名無しさん
08/10/18 05:08:21
Directory.GetFiles()でダメな理由は?
URLリンク(msdn.microsoft.com)
199:デフォルトの名無しさん
08/10/18 05:14:46
別にダメでもないが
200:デフォルトの名無しさん
08/10/18 06:58:55
>>198
Directory.GetFiles() がダメっていうよりシェルが展開しないとダメな理由は
ワイルドカード展開処理が各プログラムごとに異なって実装される可能性があるから。
201:デフォルトの名無しさん
08/10/18 10:10:01
>>200
例えばdir *\*.txtは文句言われるけど、
ruby -e"p ARGV" *\*.txtは1階層下の.txtのリストを表示してくれる、
みたいに実際に処理できるパターンが違うものがあります。
結局の所、展開処理は標準ライブラリでは用意されてないから
Directory.GetFiles, Directory.GetDirectoriesを使って自前で処理を書かないと駄目ってことでしょうか。
202:デフォルトの名無しさん
08/10/18 11:24:32
URLリンク(www.google.co.jp)
Cのリンカオプションには存在するみたいだな。
203:デフォルトの名無しさん
08/10/18 12:35:43
pythonにはパターンからそのパターンにマッチする
ファイルのリストを返すglobとかいうモジュールが標準でついてた気がする
そういうのがほしいのか
204:デフォルトの名無しさん
08/10/18 13:30:35
結局自前で書いてみた。
URLリンク(www.uploda.org)
205:デフォルトの名無しさん
08/10/18 17:28:30
2つの文字列が一致しているかどうか判定するプログラムを書きたいと思っています。
string A="(文字列)";
string B="(文字列)";
とし、
if (A == B)
で判定はできるかとは思いますが、たとえば比較する文字列が長い場合(2ちゃんに投稿
される平均的な1レスくらい)でもこの方法を使うべきでしょうか?
それとも長い文字列の比較のためには別に推奨された方法がありますか?
206:デフォルトの名無しさん
08/10/18 17:39:07
>>205
予め等しいか等しくないかが分かっているのでなければ、
少なくとも一度は線形時間かかる方法で比較しないといけない。
でも、一度等しいかどうかを判断すれば、その結果を変数に保存しておくとか、
System.Xml.NameTableのような仕組みを使ったりすることで、
二度目以降は定数時間の比較で済む。
207:デフォルトの名無しさん
08/10/18 17:44:36
>>206
不用意な回答だと思うなあ。
まあ質問者の質問の仕方が悪いんだが。
例えばDBとか検索エンジンのようにハッシュを使う方法もありうるし、
目的を明確にせずに一概に言えないとしかいいようがないと思うんだが。
208:デフォルトの名無しさん
08/10/18 17:48:30
比較対象の傾向にもよるけど、例えばまず文字列長を比較するとか
基本的に数文字で一致しなくなる掲示板レスみたいなのなら普通に比較するだけでも十分だろうし
そもそも比較回数が少ないなら気にすることもないだろうし
209:205
08/10/18 18:07:32
>>206-208
ハッシュという方法がありましたか( ´・ω・)!
文字列をハッシュを使っていったんハッシュ値に変換してから比較するのと、
C#に標準で用意された文字列比較(==)とではどちらが短時間で済むでしょうか?
あとC#にはハッシュ関数は用意されていましたっけ?
それとも自前で構築する必要がありますか?
210:デフォルトの名無しさん
08/10/18 18:09:24
初心者がハッシュね
うん
211:デフォルトの名無しさん
08/10/18 18:14:22
ちなみに==よりもString.Equalsの方が早いよ。
212:デフォルトの名無しさん
08/10/18 18:14:55
どういうシステムなのか次第で最適な方法なんていくらでも変わってくるんだから、
その辺を明らかにせずに聞いても仕方ないんじゃないか?
たった2つの文字列を1回きり比較するだけとか、
数百万件の文字列データを高速に比較したいとかで
全然やり方なんて違うだろ。
213:デフォルトの名無しさん
08/10/18 18:24:54
object.GetHashCode()でハッシュは取れるが
そんなこと考えず==で普通に比較すりゃいい
214:205
08/10/18 18:36:28
>>211-213
プログラムは2ちゃんに投稿される1レス相当の文字列を数千回程度比較する規模です。
このくらいでしたら==やString.Equalsを使った方が速いでしょうか?
215:デフォルトの名無しさん
08/10/18 18:39:28
>>214
数千回と一口に言っても
一つの文字列と複数の文字列を比較する場合とか、
複数と複数を比較する場合とかで違ってくるわけだが。
やりたいことを全部書けよ。
216:205
08/10/18 19:19:53
>>215
はい(´・ω・`)
比較する文字列はすべて違います。
webにアップロードされてる文字列に変更が加えられている物が無いかを
チェックするため、手元にコピーしておいた過去の文字列と、たった今web上
から落としてきた文字列を1つ1つ照らし合わせながら比較していきます。
その数が一回の処理でだいたい数千回に上るという仕様です。
217:デフォルトの名無しさん
08/10/18 19:27:12
それなら普通に==で比較するのでいいんじゃね。
「異なっていること」を判断するのにハッシュはあまり役に立たない。
218:デフォルトの名無しさん
08/10/18 19:33:16
初心者ほど何故か小出しにするから、中級者以上の回答者が混乱して無駄に議論を始める
219:205
08/10/18 19:34:46
>>218
す、すいません(´;ω;`)ブワッ
>>217
そうなんですか(´・ω・`)・・・
逆にハッシュを使った文字列比較が活躍する場所は何でしょうか( ´・ω・)?
220:デフォルトの名無しさん
08/10/18 19:35:36
>>216
== or String.Equalsで良いと思う。
221:デフォルトの名無しさん
08/10/18 19:36:51
>>219
ハッシュは文字列の場合はパスワードの認証とかに使われるし、それ以外ならほとんどバイナリの整合性を取るために使われる。
222:デフォルトの名無しさん
08/10/18 19:40:49
>>219
保存されてる数千の文字列を総当たりで比較する場合とか。
ハッシュ作るのに相当なコストかかるから、比較の一方が1回しか
比較の対象にならないならば、効率が悪すぎる。
223:デフォルトの名無しさん
08/10/18 19:52:59
==とString.Equalsに違った部分があるかのような言説はなんなんだよ
224:205
08/10/18 19:53:08
同じ文字列を何度も比較に使うときはハッシュにすると効率がよくなるということですね?
225:デフォルトの名無しさん
08/10/18 19:58:26
ちゃんとキャッシュすればね
226:デフォルトの名無しさん
08/10/18 20:01:20
と言うよりも、比較の際にハッシュ作成の時間をカウントしないで済むかどうかが肝なんだろうね。
つまりハッシュ値を事前に用意できるかどうか。
>>216の場合はハッシュによるふるいわけが適用可能な例に思える。
227:デフォルトの名無しさん
08/10/18 20:39:44
どう考えてもハッシュを使う意味がない。
こういう場合にハッシュを使う意味がある可能性があるのは、かなりサイズが大きい場合。
つまり全文をディスクから読む負荷がかなり大きい場合。
2ちゃんレスレベルなど、ハッシュ計算の自体の方がはるかに負荷が大きい。
ディスクからの全文読み込み負荷と、ハッシュのみ読み込み負荷の差が、
ハッシュ計算自体の負荷よりもずっと大きいなら効率化できるかもしれない。
ハッシュ計算結果を全部メモリにキャッシュしとけば別だが、
2ちゃんレスレベルならいっそ文字列全部キャッシュしてもいいくらい(件数によるが数千件レベルなら)。
そこまで性能にシビアでないなら何も考えず全文比較でいい。
228:デフォルトの名無しさん
08/10/18 20:49:05
初心者がいきなりそんなどっちが早いとか考えなくていいです
希望する動作を実現するのに最も簡単な方法を教えてあげてください
229:205
08/10/18 20:56:10
>>227
> 2ちゃんレスレベルならいっそ文字列全部キャッシュしてもいいくらい(件数によるが数千件レベルなら)。
どうもです。
スタックに
string[] A = {"文字列", "文字列", "文字列", "文字列",・・・,"文字列"};
みたいな感じで格納して計算してもいいと思いますか?
230:デフォルトの名無しさん
08/10/18 20:56:30
>>227
分かってるような感じでいい加減なことを言わんように
231:デフォルトの名無しさん
08/10/18 21:06:03
>>211
あちこちで言われてる事ではあるけど
String.Equalsの方が早いと言っても微々たる差でしかないし
とくに初心者はString.Equals(String)ではなく、誤ってString.Equals(Object)を使ってしまう危険性が高い。
その場合、stringとintの比較のように型が異なっていてもエラーが出ずコンパイルが通ってしまい、バグの発見が遅れる可能性が出てくる。(実行時に例外発生)
問題点を教えずに使わせるのは良くないと思うんだ。
232:デフォルトの名無しさん
08/10/18 21:06:28
このスレにはC#の未来が掛っています
初心者潰しをするか初心者を受けれるかはあなた次第
233:デフォルトの名無しさん
08/10/18 21:12:20
どの部分がいい加減なのかをきっちり指摘すればいいと思うんだよね。
234:デフォルトの名無しさん
08/10/18 21:13:29
おっと
>どの部分がいい加減なのかをきっちり指摘すればいいと思うんだよね。
は>>230宛てね。
235:デフォルトの名無しさん
08/10/18 21:14:03
a.Equals(b)って対称じゃなくて嫌い
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5375日前に更新/145 KB
担当:undef