ふらっとC#,C♯,C#(初心者用) Part69
1 :
デフォルトの名無しさん :
2011/01/29(土) 11:39:22
.NETの知識が2.0あたりで停止してるんだけど 世間はどうなっちゃってますか
var list = new List<dynamic> { new { Name = "A, Age = 20 }, new { Name = "B", Age = 30 } }; var adultNames = from x in list where 20 <= x.Age select x.Name; foreach (var name in from x in adultNames) { Output(str: adultNames); } こんなことになってる
4 :
デフォルトの名無しさん :2011/01/29(土) 12:33:20
>>3 ”の片側が省略可能になっているとは・・・・
5 :
デフォルトの名無しさん :2011/01/29(土) 12:38:55
世間は知らんけど、俺の中ではSystem.Linq.Expressionsブームがずーっと続いてる
System.Linq.Expressionsは命名が失敗してるのが気持ち悪い 4.0でDLRのコード生成用ASTと統合されてLINQとあまり関係なくなってるので System.Expressionsにすべきだった
>>6 それはあるよね。
あと、式と呼べる範囲越えたけど今まで通り Expression Tree だったり。
そもそも統合する必要ないよね LINQ to SQLのようなものの実装が難しくなりすぎるからC#でExpression Tree V2の フルセットがサポートされることはどうせ永遠にないだろうし どこまでがクエリ用なのかはっきりさせたほうが良かったと思う Expession.Compileも要らん
9 :
デフォルトの名無しさん :2011/01/29(土) 14:32:15
>>8 Expression<<Func<T,bool>>を引数にしたQRMを実装する時に、
引数に依存していない部分をCompile().Invoke()で事前評価したいから必要
非接続型のデータ接続でDBのテーブルを参照して処理するプログラム書いてるんだが 処理に必要なテーブルをすべて結合するSQL命令文字列を SqlCmdに渡して実行して、SqlDataReaderからデータテーブルに必要な項目をすべて読みとってコネクションをクローズ 処理はデータテーブルに対して実行してる このやり方より効率よくて可読性に優れている書き方とかない?
すいません、 1行目:○ 接続型のデータ接続でDBのテーブルを参照して処理するプログラム書いてるんだが × 非接続型のデータ接続でDBのテーブルを参照して処理するプログラム書いてるんだが
12 :
デフォルトの名無しさん :2011/01/29(土) 15:54:56
すみません。プログラムとか何にもしらないのですが、初心者用と書いてあるので ここで聞いてみます。 僕は、この前の春に中学を卒業した16歳のものです。今、インターネットカフェというところから 書き込んでいます。 家計の事情で今は土木関係で働いているのですが、僕はもともと虚弱体質でパソコンとかの仕事の方が似合いそうです。 そこで、プログラマというのになりたいのですが、いまから勉強してもなれますか?やっぱ高校とかでないとなれませんか? 給料がたまったので、こんどパソコンを買いたいなとおもっています。それで、よければ、勉強してみたいと思います。 がんばれば、プログラマーになれますか?
ちょっとだけよ、アンタも好きね、まで読んだ。
>>12 プログラム板は技術に関する板
プログラマ板が仕事に関する板
一応答えるとパソコン使って文章が書けるんだったら、根気はいるが習得は可能
ただし、プログラマーになったとして・・・という感じ
string型の文字列"ABC123"の順番をひっくり返す簡単な方法はありませんか? char[]にして繋げるくらいしか思いつかなくて、 これで良いのか悩んでます
Reverse
>>15 それでOKでしょ。
むしろどこに悩む必用があるのか理解できない。
なんだと
public static string Reverse(string s) { Stack<string> stack = new Stack<string>(); for (int i = 0; i < s.Length; i++) stack.Push(s.Substring(i, 1)); string ns = string.Empty; for (int i = 0; i < s.Length; i++) ns += stack.Pop(); return ns; }
Math.Floor(Math.Log(long.MaxValue,10)) + 1じゃねーの?前スレ
21 :
デフォルトの名無しさん :2011/01/29(土) 19:40:41
52ビットのこと? アレはdoubleの仮数部の長さ あとMath.Ceiling(Math.Log10(long.MaxValue))にしとけ
そこでBigInteger
>>21 数が10のべきの時に桁数間違えるだろそれ
24 :
デフォルトの名無しさん :2011/01/29(土) 20:21:18
>>22 BigInteger.Logは内部でMath.Log使ってるのでMath.Logより精度が悪い
Math.Log10使うと10^15で誤差が出るけど、BigInteger使った場合は10^9で話にならんレベル
>>23 long.MaxValueだから大丈夫
25 :
デフォルトの名無しさん :2011/01/29(土) 21:36:32
つうかToString().Lenghがスマートじゃないと考える感覚がわからん
それ、発想がVB厨っぽいから実世界では言わない方がいいよ 煽りじゃなくて真面目な話。
27 :
デフォルトの名無しさん :2011/01/29(土) 21:43:05
数字を文字で判断するなって正規表現の完全否定じゃないか
数字と数値は違います
目的が達成されれば手段は問わん
サロゲートペアとか考え出すと嫌になる
31 :
デフォルトの名無しさん :2011/01/29(土) 21:52:27
10は2進数だと1100の4桁、桁なんて言い出した時点で文字データだろ
Math.Atan2()って何項目までテイラー展開してるの?
パターンを文字の並びで表現するのは必然性がある(でなけりゃ他にどういう選択肢がありうるのだ)が、 整数の桁数を数えるのに一旦文字列に変換するのはどこにも必然性がない。 目的に対して手段が直截的でない。 それに内部の処理を考えたら無駄が多すぎ。 (1) バイナリをpacked BCDに変換 (2) packed BCDをアンパック (3) アンパックバイト列を1バイト毎に文字コードに変換 (4) 0サプレス
文字列にして数える、実に直観的でわかりやすい 内部がどうとかまったく気にする必要はない
ToString().Lengthでいいじゃんもう。読みやすいし
36 :
デフォルトの名無しさん :2011/01/29(土) 22:09:50
桁を数える必要がある時って、大概文字列にして表示する時だと思うが・・・
37 :
デフォルトの名無しさん :2011/01/29(土) 22:25:22
ToString()を2進→10進変換ととらえれば何の問題もない ただConvert.ToInt64(string).ToString().LengthとかだとかなりVB臭
38 :
デフォルトの名無しさん :2011/01/29(土) 22:28:01
こいつVB臭って言いたいだけじゃないの?
とりあえずVB馬鹿にしときゃ一端のプログラマに見られるからとかアフォな理由だろう 現場にもこういう奴はたまにいるけど、周りは大抵呆れている
40 :
デフォルトの名無しさん :2011/01/29(土) 22:45:20
美しい実装ってシンプルであるのが第一だと思うけど、奴は感覚がちょっと違うよね
真のVBerはコレクションを特定メンバについてソートするのにデータセットを使う
VBを馬鹿にしてる奴はいないと思うけどね。 よく分からん被害妄想だな。 とりあえず本気でToString().Lengthで誰に見せても恥ずかしくないコードだと思ってるのなら、 率直にいってそれはかなりおかしい
前スレ
>>966 いろいろ探してMatch.Groupがなかったんで
もしかしてMatch.Groupsですか?
VB厨だのVB臭だのどう見ても揶揄してるだろ
ちょっと予断だけど、Int64.ToString()ってスレッドのNumberFormatInfoが何でも アラビア数字で桁区切りなし、0パディングなしの文字列が返ってくるって考えてよかったっけ?
>>44 例えばアニヲタを馬鹿にするのとアニメを馬鹿にするのは別問題。
47 :
デフォルトの名無しさん :2011/01/29(土) 23:02:06
桁を数えるのは、大体その数値を表示する為 対数で桁数えてから文字にして表示していたらバカにしか見えないな
むしろMS-DOSの時代じゃあるまいし、数値を表示するのに桁数が必用になる場面なんてあるのか。
>>45 > 値が負の場合はマイナス記号を伴い、先行ゼロを含まない 0 から 9 の一連の数字から
> 構成される、このインスタンスの値の文字列形式。
> 戻り値は、一般数値書式指定子 ("G") および現在のカルチャの NumberFormatInfo を使用して書式設定されます。
それって明示的にInvariantCulture指定しないとカルチャ依存ってことじゃね?
>>46 つまり今回の例だとVB使っている奴は馬鹿だけどVBは馬鹿にしていないってことでおk?
"D"でいいんじゃない?
こんな話いつまで続けるの?
数値の桁数を返すメソッドを文字数で実装したら死ぬべきだけど その場で適当に使う分にはどうでもいい
58 :
デフォルトの名無しさん :2011/01/29(土) 23:55:23
桁数を返すメソッドの用途って学校の宿題だけじゃね?
除算後の有効数字を決めたい、なんて用途は考えられるけどね例えば。 まあ何かしら必用な場面はあるとは思う
結局はその場で考えろ、と
string[] temp = GetFileName(); // エラーではない場合、この行を実行 if (temp[0] != "") { // 検索するパターン string pat = @"\[(?<circle>[^\]]*)\]\s*(?<title>.*)"; Regex r = new Regex(pat); // フォルダ名を分ける処理 // 変数iは全体の回数、変数pは名前分けが実行された回数 int i = 0,p = 0; foreach (string n in temp) { Match m = r.Match(temp[i]); if (m.Success) { // この行でエラー circle[p] = m.Groups["circle"].Value; title[p] = m.Groups["title"].Value; p++; } i++; } ここまでは来たのですが、"// この行でエラー"と言うところで例外エラー("オブジェクト参照がオブジェクトインスタンスに設定されていません") なぜエラーが出るのか教えてください・・・
circleやtitleはどう確保してるの?
63 :
デフォルトの名無しさん :2011/01/30(日) 00:34:28
circl[]を初期化しているの?次の行も怪しいが
>>61 そういう処理は
GetFileName()
.Select(name => r.Match(name))
.Where(m => m.Success)
.Select(m => new
{
Circle = m.Group["circle"].Value,
Title = m.Group["title"].Value
});
65 :
61 :2011/01/30(日) 00:55:29
>>62 circleとtitleはクラスの上の方ににpublic string[] 変数名で確保しています
>>63 初期化しないといけないんですか?
>>64 やってることがさっぱりわかりません
たまに出てくる => ってどういう意味なんですか?
66 :
デフォルトの名無しさん :2011/01/30(日) 01:01:06
=>はラムダ式 左辺が受け取るパラメータで右辺がそれを行う式 LINQ、ラムダ式どころかデリゲートとかも分からんのか?
>>66 今やってみたんですが、初期化の時点でエラー出てしまいました・・・
>>67 デリゲードもわからないです・・・
69 :
デフォルトの名無しさん :2011/01/30(日) 01:21:36
初期化っつーか、ちゃんとnew stringしてんの?
foreachのnはどこへ行った? もうちょっと基礎を勉強してから出直した方が早いんじゃないかなあ
72 :
61 :2011/01/30(日) 01:44:51
基礎からやり直したほうがいいですか・・・ やっぱりネットだけでC#マスターしようとすると難しいですか? 書籍とか購入したほうがいいですか?
とりあえず不明な点はmsdnを調べる習慣をつけることだな
>>73 ありがとうございます
ちょっとここで勉強してみます
>>74 MSDN見るようにします・・・
>>76 LINQは覚えたほうが便利なのは確かだが、いきなりは無理だろ
デリゲート、ジェネリック、ラムダ式と順を追って覚えてからじゃないと意味が無い
LINQがどうやって構成されているか理解していない奴に使われちゃ
徒にバグを生み出されるだけ
78 :
デフォルトの名無しさん :2011/01/30(日) 03:06:25
そんなの後回し後回し
79 :
デフォルトの名無しさん :2011/01/30(日) 03:15:24
彼、foreachマスターしていないのに・・・
腹減ってる奴に魚渡したってその場限りだろ 釣りの仕方を教えりゃ次にも繋がるぞ
foreach の前に collection をだな・・・
82 :
デフォルトの名無しさん :2011/01/30(日) 10:12:36
ヒドイ
コンポーネントクラスを作成すると デフォルトでIContainerを引数にとるコンストラクタが作成されますが、 これはどういう場合に必要なんですか? Controlsプロパティを持つコントロールを継承する場合?
最後の行は無視で!
インターフェースに定義されてるメソッドを見ればなんとなく分かると思うけど 親に自分で追加したり削除したり、兄弟を見たりできる
Int32型の+や-なんかの組み込み演算って、 内部ではどういう処理してるんですね
組み込み型の演算子は普通に対応する IL 命令にコンパイルされてる。
>>85 それはDispose対象を管理していると考えて良い?
結局IContainer引数のコンストラクタが必要なのはUserControlぐらい?
子Controlは別管理してる
原点x,y から x1,y1 へ伸びているベクトルvの長さを変えて 新しくできる x2,y2 を求める場合はC#でどのように書けばいいでしょうか? 角度は変えません。ベクトルの長さだけを変更します。 0.8倍とか1.5倍とかそんな感じです
>>87 そうすると組み込み演算子で同等の処理が出来る、
bigIntとかbigDecimalみたいなのは作れないって事ですか?
>>90 ピタゴラスの定理。
中学校で習う数学ですよ。
C#の話じゃなさそうだけど
90はピタゴラス関係なくね 単位ベクトルv=(x1-x,y1-y)だろ 原点+nv
>>94 確かにそうだねw
中一で習う相似の考え方でいける
>>91 なんか聞いてるとJavaの話臭いんだけど
Javaは演算子オーバーロードできないからできないよ
>>95 いや、92が一番アホってことだろ
言わせんな
まあ
>>95 と
>>92 は同一人物なんですけどねw
ただ、矢印の内部表現を支点の座標、単位ベクトル、長さでの3つの値で表現するのなら、
いずれにせよ三平方の定理は必用になる。
ああそうだね、えらいね
長さが絶対値で書かれてないんで、ベクトルの長さを知る必要はない
>単位ベクトルv=(x1-x,y1-y)だろ >原点+nv x + vx * n , y + vy * n これであってますか?
間違ってる
この程度も分からないのならC#より数学ドリルやるべき
lx = x1 - x ly = y1 - y lx と ly は1.0倍なんだから、1.8倍ならそれぞれ1.8倍すればいい 原点が(x,y)として(x + lx * 1.8, y + ly * 1.8)
たまにはVector構造体のことも思い出してあげてください
>>91 内部挙動まで含めて、というのであれば、組み込み型の演算子は特別処理されてるので、
ユーザー定義演算子では同じ結果にはならない。
(string以外の)組み込み演算子 → IL 命令に変換
ユーザー定義演算子 → 静的メソッド呼び出しにコンパイルされる
すいません、VSTSの単体テストコードのかきかたで質問です 戻り値がDataTabel型のメソッドをテストしたいんですが、 (テストコード内のテストメソッド内) DataTabel expected = new DataTabel(); (expectedデータテーブルに想定のデータを仕込む(DataRowを作成して 1行ずつekpected.Rows.Add()していく)処理) DataTable actual = (テスト対象クラスのインスタンス).(テスト対象メソッド()); ここまでで想定のデータテーブルと実際にメソッドから得られるデータテーブルが 出来ると思いますが、ここから○×を評価するのに CollectionAssert.AreEqual(expected.Rows[],actual.Rows[]); の式ですみますか? それともexpectedとactualの要素をひとつずつ取り出して Assert.AreEqual(expected.Rows[0][0],expected.Rows[0][0]); Assert.AreEqual(expected.Rows[0][1],expected.Rows[0][1]); Assert.AreEqual(expected.Rows[0][2],expected.Rows[0][2]); Assert.AreEqual(expected.Rows[1][0],expected.Rows[1][0]); ・ ・ ・ ・ のように要素ひとつずつ評価しなければなりませんか? 知っている人いたら、お願いしますm(__)m
CollectionAssertでDataRow.ItemArrayの比較とか
あ、CollectionAssertは書いてあったか 試してないけど、DataRowのEqualsは同一値の行でもfalseだから、Rowsの比較は無理じゃないか?
winformプログラム内部でbitmapオブジェクトを作って絵を描いて 画像ファイルとして保存したりできるけどあれと同じようなことを silverlightでできますかね? ファイルの保存を直接ホストマシンのどこかにってのは無理でしょうから(OOB除く) ブラウザでファイルを保存(ダウンロード)するときのようにダイアログを出して ユーザーに指定させる感じでもいいのですが・・・
・WriteableBitmap ・Silverlight PNG encoderでググる ・SaveFileDialog Silverlightは専用スレがあるからそっち行けば?
それ、やってることは
>>111 と全く同じなんだけどな
int型の整数が正の数か負の数か調べる最も速い方法って、 0との大小比較ですか?
試せば分かることを人に聞くなよ。 他人を何だと思ってるんだ?
屯田兵
117 :
デフォルトの名無しさん :2011/01/31(月) 20:53:09
>>114 あとは0x80000000でbitチェックするか
まあ普通に大小チェックした方がいいw
>>114 そんなの気にするならアセンブラを使いなさい
OpCodesの解説見ると不等号が一番速そうには見える が、自分でILを出力して最適化するのが一番じゃねーの?
120 :
デフォルトの名無しさん :2011/01/31(月) 21:12:59
ニーモニックで1ステップになるようなコードを、どうやって最適化するんだよ
一般に、比較そのものよりもその後の分岐が実行速度を下げる 気にするなら細かいことよりもまず分岐自体を無くせないか考える
ILは結構無意味にスタック操作してたりするよ JITしたら全部消えるのかもしれんが
>>121 大昔のインタープリターのBASICじゃないんだから
分岐をなくすってどういう事やるの?
125 :
デフォルトの名無しさん :2011/01/31(月) 22:55:17
3項演算子使うか比較を演算としてそのままbool値の変数にぶち込むとかくらい?
同じようなswitchが何度も出てくる場合はクラス分けしてポリモーフィズムにしたりするけど、速度目的ではないな
Math.Ceiling((double)(3/4))が1にならないのはどうしてですか?
intの3/4が0だから 3.0か3Dにしとけ
Math.Ceiling((double)3/(double)4)) Math.Ceiling(3.0/4.0)) 3や4という書き方をするとintと扱われる 3.0や4.0と書くとdoubleと扱われる 3.0fや4.0fと書くとfloatと扱われる というかマウスを乗せると型を表示するはずだが・・・
例えば、 if (x < 0) x -= 0.5; else x += 0.5; の代わりに、 x += 0.5 * Math.Sign(x); みたいな話かね。 C#はboolをintに暗黙的に変換できたりはしなかったはずだから、 x += 0.5 * (x >= 0); みたいなことは出来ないよね。 いずれにしろ個人的にはこういうの嫌い。VB厨って言うとまた誰か怒るかもしれんが、 昔N88BASICとか触っててVB厨になったような人が好みそう。
あぁ・・・Math.Ceiling()メソッドが実行される以前にカッコの中身が0なのか ありがとん
>>131 予定した結果になってないときはどこかで型が思った物になってなくて
計算誤差が起きてると思った方がいいよ
そんな局所的な話じゃなくて、アルゴリズムを工夫するんだよ 数値計算とかの話だけど
134 :
デフォルトの名無しさん :2011/01/31(月) 23:32:24
>>133 アルゴリズム以前の問題だろw
IDE(というかCSコンパイラ?)が扱う数値の型を理解してないことによる誤差なんだし
135 :
133 :2011/01/31(月) 23:35:43
136 :
デフォルトの名無しさん :2011/01/31(月) 23:38:13
>>135 例えばコントロールのイネーブルにする時、条件式をそのままフラグにぶち込んだりとかね
a.IsEnabled = (a>b && !c);
みたいな
こんな事やっても最終的には同じコードになったりするモンだけどね
所詮自己満足の世界
数日かかるようなガチな計算になるとそうは言ってられない まあスレ違いだけど
そんなもんC#でやるな
140 :
デフォルトの名無しさん :2011/02/01(火) 02:31:22
テキストボックスの上に選択領域のような形で半透明な四角を描画する方法はありませんか? ピクチャーボックスやフォームの中にフォームを表示するような形を試してみたのですが 背景色設定や、parentの設定をしても半透明になりません
WinFormでアプリ組む以上は無理だったような・・・ 選択領域ってのがイメージがよくわからないが 最悪やるとすればPaintイベントとかであれこれやるとかしかないのかもね・・・
オーナードロー関連もデフォルトではないのか・・・
LINQとかラムダ式とかどうでもいいから、こういうところ直してほしい 全コントロールデフォルトでドットごとのアルファに対応しとけよな
だからWPFで対応したんじゃないか
>>143 そんなことしようとしたら結局フルスクラッチで描画することになってWPFになっちゃうだろ
WinFormsは2.0で完成してる
>>139 型付けがちがちでコーディング中にも教えてくれるとか便利すぎるんだもん
ガチな計算ならそんなもん関係ないぞ 整数と実数と配列さえあればいい
Form1(親、FormBorderStyleはデフォルトのまま) Form2(子、FormBorderStyleをFixedToolWindow) という2枚のFormがあって Form1からForm2を開くときに form2.Show(this); //form1のインスタンスを渡す という感じにしてます。 Form1をアクティブにした際のForm2の挙動が理想だからです。 (Form2がForm1の後ろに回らない。thisを渡さない場合にForm1を アクティブにするとはForm2がForm1の後ろに回ってします) ここまでは良かったのですがForm2はあくまでサブなので Form2の右上のxマークで閉じた際には非表示になるだけ でいいのでForm2のFormClosingイベントでキャンセルを 行うようにしたのですがForm1のインスタンスを渡した場合は Form1のFormClosingイベントもForm2に渡ってくるようで Form1(およびForm2)を閉じることができません どちらのFormのFormClosingイベントか判断する方法はありますでしょうか?
イベント引数確認すれ
>>149 ありがとうございます
こんな感じで取れるんですね
            if (e.CloseReason != CloseReason.FormOwnerClosing)
            {
                e.Cancel = true;
                this.Visible = !this.Visible;
            }
WPFのユーザーコントロールはコードビハインドを使ってUIの制御をコードからでも行えるけど、 カスタムコントロールだとそのへんどうやるの? 例えばコード側で定義した文字列プロパティをバインドしたTextBoxに、 フォーカスを取得したら全選択状態にする機能をつけたいとき、XAMLだけでは難しい。 Name属性を使ってコントロールを定義してるコード側で要素をいじくることもできるけど、 テンプレートの差し替えが可能なカスタムコントロールにおいて バインドする相手をTextBox限定にしてしまうようなことは避けたい。 できれば表示とロジックにおける「表示」にXAMLとコード(そのXAML専用)をまとめて、 テンプレートの差し替えでまとめて替えられるような形にできればと思うんだけど、 ResourceDictionaryにはコードビハインド付けられないし、このへんどうやってるのかな、と。
諦めてTemplatePartでTextBox決め打ち SilverlightのNumericUpDownもそうなってる TextBoxが嫌ならTextBoxのテンプレート入れ替えりゃいいんだから何も問題ない
>>152 やっぱそうなのかなあ。
ちょっとTextBoxのControlTemplate見たけど、肝心のコードが絡む部分は
TemplatePart使ってるね。
http://msdn.microsoft.com/ja-jp/library/ms752068.aspx じゃあとりあえずTextBoxに絡む機能を盛り込みたいとき用にTemplatePart用意して、
コントロールの利用者がテンプレートの定義でTextBox使うなら、バインドではなくNameで指定させる。
その他例えばBorderのコンテンツとして表示するだけ、とかはそのままプロパティをバインドさせる。
コントロールのコード部分に、表示に関するロジックがゴチャゴチャ増えるけど
そこはもう気にすんなということか。
○年■月31日4時□分◇秒5 のような虫食いの時間と二つのDateTime 1・2がある。 datetime1<虫食いだった時間 かつ 虫食いだった時間<datetime2 を満たすような虫食いを埋める数字があるかどうかを判定したいんですがどうやったらいいですか 虫食いの数と場所と二つのDateTimeの間隔は不定です
学校の課題臭がするし、本質的にはC#関係ないと思うが 年→月→日→…の順にdt1>dt2、dt1=dt2、dt1+1=dt2、dt1+1<dt2ぐらいに場合分けして考えてみれば? まあ待ってれば誰かがLINQで書いてくれると思うよ
既存の別言語のdll関数をDllImportで参照してるstaticクラスのスタティックメソッドがあるんだけど いま、このスタティックメソッドを別クラスから使おうとしてるけどうまくいかない なぜだか心当たりある人いますか? ちなみにデバッグしてみると、スタティックメソッドを実行してる行で「dll関数のdllが見つかりませんでした」って内容の例外が発生してる
まず別言語とは何か書け
extern "C"は指定した? 正しく関数がエクスポートされてることはdumpbinで確認した?
Stopwatch.Start(); Stopwatch.Stop(); とやるだけで15ticksは進んでるんですが、 どういう事なんでしょうか、 この行間で15clockの処理が行われているという事ですか? それともメソッドそのものが15clockで実行されてるのでしょうか
>>157 DLLファイルが見つからないのかDLL内に指定された関数が見つからないのかどっちよ>例外
>>161 前者じゃないの?
Frequencyの値はCPUのクロック(の半分?)だと思えば、まあそんなもんでしょ。
165 :
デフォルトの名無しさん :2011/02/01(火) 22:49:35
てす
166 :
デフォルトの名無しさん :2011/02/01(火) 22:57:29
GeckoFX 1.9.1.0 を使ってるんだけど、 geckoWebBrowser1.Document.DocumentElement を取得しようとすると、必ず、InvalidCastException が出るんだが、 解決策しってる人いたら助けて欲しい。 ちなみに VS2010&Win7(32bit)&WinForms&.Net Framwork 4 で開発してます。
List<T>のインスタンス生成時に大きさを指定することってできますか?
コンストラクターにint渡せば
oh shit
omfg
1つのクラスを複数のソースファイルに分割して記述するにはどうしたらよいでしょうか?
partial class
partial
複数のファイルに分割して書かないといけないような巨大クラス作るなよ… あれはWinFormsのデザイナみたいにコード生成するやつで使うためにある。
好きに使えばいいよ
>>172-173 ありがとうございます
>>174 いえ、どー考えてもこのクラスこれっきゃねーよ
みたいな場合に無理やり意味付けしてクラスを作るのってなんか違う気がするんですよ
そんなときにC/C++だとヘッダ1つにしてソース複数にして書いていたもので・・・
分割したくなるレベルのスパゲティコード・・・
嫌な予感しかしないけど人に見せないなら好きにやるといい
C++使っててクラスが肥大化しがちなのはクラス作ったりインスタンス管理したりするのが面倒だからだろ C#は気軽にクラス増やせるから自然にクラスが小さくなると思う
クラスは小さければ小さい方が見通しがいいに決まってるけど、 *ちゃんと設計すれば*常に小さなクラスに機能分割できるはずだ、とは俺は思わない。
クラスの大きさそのものに注目することはあまりないな
具体的にいうとゲームのステージなんですけどね プレイヤ、敵A、B、C、壁、地面、扉、弾、敵弾、爆発A、B、C的なものが 仕様によって相互に影響しあうんですけど これってやっぱりステージはステージ以外なにものでもないじゃないですか? (それぞれ意味わかんねーよって人は無視してください、説明するのが面倒ですw)
好きに使えばいいよw
オブジェクトというより名前空間みたいなもんだよねそれ 別にそれが悪いとも思わないし自分で作ってもそんな感じになりそうだけど
俺もゲームだと無駄に複雑になりがちだったけど デリゲートやイテレータブロックを使うようになってからはましになったな
186 :
デフォルトの名無しさん :2011/02/02(水) 02:16:14
C#は#regionのおかげで、でかいクラスという現実から逃避できるのは有り難い
regionを律儀に付けるのも面倒くさくなってきたんだが
オブジェクトブラウザがあるじゃあないか。
189 :
デフォルトの名無しさん :2011/02/02(水) 02:44:24
メソッドが長くなった時、分けるのめんどくさくなってregionで誤魔化すことがある・・・いいのか?
>>182 それぞれのステージオブジェクトごとにクラスにしていけば普通に分割できそうな気もしつつ、
多重ディスパッチする場合は、確かに1クラス大きくなることはあるなぁ。
ビジターパターンみたいなのもあるけど、あれが書きやすいとも思えず。
string s="aewta"のような文字列を "aaetw"になるようアルファベット順でソートしたいんですが、どうすればいいですか?
charの配列と考えて好きなソート使えば
文字列の中の一カ所だけをreplaceしたい時はどうすればいいですか? str.Replace('a','1') だと文字列中のaが全て1になってしまいます。
>>193 条件が決まってるなら簡単じゃね?
最初にでてきた'a'をリプレースとかさ
そういう条件は無いの?
特定の箇所(str[x])を置換したいんですけど、単純に str[x]='1'; だと読み取り専用だからアカンって言われます。
昔のVBだとMid(str, x, 1) = "1"とか意味不明な構文があって便利だったんだがな って調べてみたらVB.NETでも使えるのかw Substring駆使するかToCharArrayでcharの配列にしてうんたらかんたらだな
>>193 IndexOf()で探してSubstring()で置き換えれば
198 :
デフォルトの名無しさん :2011/02/02(水) 14:48:31
そんなあなたにStringBuilder
199 :
195 :2011/02/02(水) 14:51:35
一旦removeしてinsertする事にしました。
C# 4.0 でファイルを保存する部分を作成しているのですが少し教えてください。 現在5秒に1つの画像データ(1つ1MByte)を作成し、それを24時間365日動作させようとしています。 この時、保存される場所はネットワークディスク(LANDISK)上に作成されます。 通常ネットワーク的に問題なければ保存処理は成功すると思いますが、 何らかの原因でネットワークが切断された時に一旦ローカルへ保存するようにしたいと考えています。 上記前提条件の上で保存処理をFileStreamのBeginWriteを使用し非同期的に処理したいと考えています。 保存順序が処理順序にならなくても構わないのですが、存在しなくなったネットワークに書き込みを行うと 呼び出し元スレッドが固まるのでそのようにしたいと考えています。 例えば30秒固まったとしてその間にもどんどんファイルを保存しようとBeginWriteが呼び出されるようになると思うのですが、実際はこういう運用は問題ありそうでしょうか? もし、なにかスマートな方法があればいいのですが・・・ (例えばキューに入れてそっちで処理させるとか) スレッドプールを使用しようとも考えたのですが、ほかの場所でちょこちょことBerginInvokeで表示等を行っている為スレッドプールでスレッドを止める処理が多発した時にUIが固まりそうでちょっとやめてみました。 色々検証して試してみるのがいいんですが、ひとまず動かし始めるまでに時間があまりないので運用だけ開始してあとで変更する方向です。 ぶっちゃけた話、少々バグってても個人的な用途なので問題はないのですが・・・ 安定稼働を目指したいのです。 ファイルのサイズ・削除処理等は今の段階では放置しておいてください。
ファイルはローカルに保存する。 コピーは別プロセスで。
常に最初にローカルに保存しておいて NASへの保存が成功した時点でローカルを消す
長いことC嫌いで通してきたけどブルーバックスの見てわかるC言語入門(CD−ROM同梱 を買ってきた。 なんでも聞いてくれ。
困ったときのTask
ありがとうございます。
>>201-202 一旦それも考えましたが出来るだけローカルPCのHDDやSSDの寿命を削りたくないので
可能な限りローカル保存は避けておきたいのです・・・
もし、他の方法でダメならこの方法が確実に残せるかな・・・と
>>204 折角4.0使うのだからそれがよさそうな気がしてきました。
MSDN見た感じも小さな処理を回数こなす場合はこれがよさそうなことも書いてありましたし
アドバイスありがとうございました。
207 :
デフォルトの名無しさん :2011/02/02(水) 18:28:12
>>205 初心者だからだヨ 有名なライブラリやそれでサポートされる関数なんてひとつも知らないヨ←そうゆうものだとは知っている
>>192 それを簡単にできる方法を聞いているんですが。
要するに1行で
Sort(s.begin(),s.end())みたいに書きたいのです
>>208 短くしたいと思う最新の候補コードを晒してみるとか
switchの分岐はポリモーフィズムに書き換えられるっていうけど、 こういうコードの時はどう表せるの? public Unko GetUnko(string key) { switch (key){ case Normal: return new NormalUnko(); case Liquid: return new LiquidUnko(); case Lumpy: return new LumpyUnko(); ... } } ただたんにオブジェクトを返すようなのならswitchでもいいのかな
factories: Dictionary<string, IUnkoFactory>にUnkoの派生クラスのファクトリを登録しておいて factories[key].CreateUnko() かな。ファクトリはFunc<Unko>でも構わない。 それかDI使う。実質同じようなもんだけど。
>>206 5秒ごとにたった1MBのファイルを作るのになんで非同期でやる必要があるのかよく分からない。
それに、FileStreamって一旦オープンしたら、実体のディスクが切断されても
例外も吐かなければ固まるなんてこともなかった気がしたけど....
普通は利用側の話だと思うけど一応こんな感じに書ける public Unko GetUnko<T>() where T:Unko,new(){ return new T(); }
利用側が具体的な型に依存してどうする
はあ?
>>200 書き込み用にワーカースレッドを一つ作成。
書き込みファイル情報はキューに貯める。
まあ劣化Producer-Consumerパターンみたいな感じで行ける。
Write処理自体を非同期でやるのは今回に関してはあまり意味ないからやめとけ。
確かスレッドセーフなBlockingQueueみたいのも.NET4じゃできてたと思うから簡単だろ。
ああ、まあもちろんTaskでやってもいいけど。
>>214 が要件を満たすには、
(Unko)GetMethod("GetUnko").MakeGenericMethod(types[key]).Invoke(this);って動的に型指定して使わないといかんね
そんなことするんだったらActivatorに渡すだろ
まさにUnko
>>211 はこの手の例として始めから合ってないからw
インターフェースを守る努力とか無意味だし
>>211 は別におかしくない
Unkoを利用する側がUnkoの具体的な実装クラスを知らなくて済むようにするためのパターン
さらに、GetUnkoを提供するクラスも具体的な実装クラスを知らなくて済むようにしたいならDIになる
>switchの分岐はポリモーフィズムに書き換えられる こういう目的には合ってないと思うけどなぁ もしこの例でうまく説明できるなら、頑張って教えてあげなよ
それは
>>212 で答え出てるだろ
abstract factoryでFA
VC#Express落として2時間の若輩ですが、質問です。 ポインタ操作する際に、unsafeでビルドする必要があるみたいなのですが、unsafeでビルドした際にデメリットのような物はあるのでしょうか? BitmapData.Scan0で得たポインタに対して操作したいので、unsafeは現状避けられなさそうですが。 それと、MouseEventArgs型のボタン取得で「左ボタンだけ押されている」は簡単に処理できるのですが、「左ボタンは押されているが、他のボタンも押されている」 はどう取得すればいいのでしょうか if ((e.Button & MouseButtons.Left) == true) では型エラーになってしまいます。
こうかな if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
BitmapData.Scan0はunsafeでなくても配列にコピーしたりして使えたと思う ググれば出てくるはず
ちなみにやってることはマスクってやつね MouseButtons.Leftの具体的な値はしらんが
unsafeはセキュリティの制限がかけられた環境では動かなかったりする ASP.NETとかClickOnceとかSilverlightとか(設定による)
設定によるね
Silverlightは問答無用でunsafe動かないけどな
Unkoについて必死に議論するのやめw HogeとかHageとか他のにしろやw
IUnkoとコンクリートUnko
232 :
223 :2011/02/02(水) 22:17:32
ありがとうございます。 マウスの方は問題ありませんでした。 unsafeのほうはMarshal.Copy()でbyte[]へコピー、いじった後に再度Marshal.Copy()でいけそうです。 通常のWindowsアプリなのでunsafeでポインタ操作と比較して考えてみます。
うんこw ファクトリーメソッドとファクトリーパターンの違いが分かってない奴多そうだな
ポインタ操作にunsafeなんか使わなくても大抵マネージドでなんとかできるよ
>>211 のメソッド自体はFactory Methodで
>>211 のswitchをポリモーフィズムで置き換えるとしたらAbstract Factoryってことだろ
デザインパターンは間違って覚えるためにある
別にGoFの信者やってるわけでもないし
パターンの目的を忘れて不必要に複雑にしちゃうんだよな
テンプレートパターンでなくても
>>211 みたいなのをUnkoのファクトリメソッドと呼ぶことはあるよ
XmlReader.Createはfactory methodとMSDNに書かれてる
一番いいデザインパターンを頼む
[Export(typeof(Unko), "Normal")] class NormalUnko : Unko { } [Export(typeof(Unko), "Lumpy")] class LumpyUnko : Unko { } class Anus { private CompositionContainer container; public Unko GetUnko(string key) { return container.GetExport<Unko>(key); } } こうだな
Unkoはもう禁止ね
FooとかBarとかにだな
でも何でもいい言葉としてはFooやBarより優れてるな バリエーションも作りやすいしanus.GetUnkoとか超わかりやすく意図を表現できるじゃん
くだらねぇ
俺はhogeとかの代わりにunkoをよく使ってるが、普通じゃなかったのか。
意味のない言葉であるという共通認識は十分すぎるほどだな
絶対に名前を修正しなければならない と迫るにはいい・・・・・・のか?
newするだけのクラスにAbstract Factoryを使うというのに衝撃を受けたわw
俺もデザパタ覚えたての頃は何にでも適用しまくってたものさ
IWebRequestCreateなんかそんな感じじゃね
>>242 みたいなことやりだすとfactoryだらけのマジキチコードになるが
Javaワールドではやたらと有難がられるスタイルだ
そろそろデザインパターンが理解されてもいい頃
IEnumerable<T>.MoveNext()するのと foreachで回すのって速度に差が出ますか?
出ない 特に配列や文字列に対するforeachは最適化されるのでforeachの方が圧倒的に速い
むしろforeachの方が速いんですか、なるほど 助かりました
List型をintを超える大きさで初期化したい場合、 Add()しまくるしかないんですか?
>>257 初期化ってよくわからんがClear()でだめなの・・ってこれはListに何も無い状態になるけど
あとLongなんとかってint以上なかったけ?
初期化の意味がわからん
コンストラクタから配列の大きさを渡して、 インスタンスを作りたいんですが、 オーバーロードにはint型までしか用意されてないので、 longや、もっと大きい配列にしたい場合どうすべきなのかと
Capacityを変更するって事でしょ
そ・・・そんなに大きいの一気に入れちゃうの? あふれてきちゃわない? メモリが
List<List<T>>で実データを保持してインデックスや要素数をlongで指定するクラスを作れば
Array.Copyにlong版もあるからそんな苦労せず自作できるが、正直どうかと思う
仮にint詰め込んだとすると、Int32.MAX:2147483647*int:4byte=8191MiB=約8G 今時のPCなら入るな。8Gの連続領域が確保出来るのかは分からない。 そういうのはメモリマップドファイル使うのが一番いいと思うが…
言語仕様上はサポートされてることになってるけど 実際にはuintを越える長さの配列はCLRにサポートされてなかったはず 実行時エラーで死亡
そのための多次元配列か・・・
List<List<List<int>>> こんな感じでwwwww
>>268 そんなことしなくてもいいだろw
List<int>[]
か
List<List<int>>
これだけで理論的には相当取れるだろ
ところで Dictionary<long, int> だとlong分確保できるの?
271 :
デフォルトの名無しさん :2011/02/03(木) 19:19:58
実験するにはメモリが足りない
273 :
デフォルトの名無しさん :2011/02/03(木) 19:37:34
あまりにも巨大になるならDB使えとか思うけどなw DB側でオンメモリにするかどうかを調整してもらってw
接続型でSQLサーバー既定のインスタンスに接続して(sa認証)、既定のインスタンスにデータベースUnkoがあったらUnkoに接続してSQL命令分ストリングで データを取得してSqlDataReaderのReadメソッドでDataTableにデータを取り出すメソッド作ってるんだけどさ Unkoの存在有無を確認するにはどういうコードを書けばいい? アットマークit調べても「データベースに指定したテーブルがないか調べる」ってコード例はあったけど データベースが存在するか調べるコードはありませんでした 現状は↓のようなコードです private DataTable GetUnkoTable() { DataTabel unkoTabel = new DataTable(); string connStr = "Data Source = .\;Initial Catalog = Unko;(ユーザー名パスワードは略)"; using(SqlConnection cSqlConnection = new SqlConnection(connStr) using(SqlCmd cm = new SqlCmd("select * from T_UnkoMaster",cSqlConnection)) { // データベース接続を開く cSqlConnection.Open(); (処理) } return unkoTable; }
275 :
デフォルトの名無しさん :2011/02/03(木) 20:28:53
つうかList自体は一次元のポインタの配列だから 何で定義してあろうが大きさ同じじゃないの? 強いて言えば要素数×IntPtr幅+α(その他データ)
違うよ 値型なら sizeof(型)×要素数 (バイト)
ま た U n k o か
>>274 SELECT * FROM sys.databases
*が肛門に見えるな
えっ
*.* 'A'
>>278 dです こんな感じで行けそうですね
private int UnkoCheckInt()
{int num = 0;
string connStr = "Data Source = .\;Initial Catalog = Master;(ユーザー名パスワードは略)";
using(SqlConnection cSqlConnection = new SqlConnection(connStr)
using(SqlCmd cm = new SqlCmd("select count(name) from sys.databases where EXISTS (select name from sys.databases where name = 'Unko')",cSqlConnection))
{cSqlConnection.Open();
num = (int)cm.ExecuteScalar();
}
return num;;
}
private DataTable GetUnkoTable()
{DataTabel unkoTabel = new DataTable();
string connStr = "Data Source = .\;Initial Catalog = Unko;(ユーザー名パスワードは略)";
if(UnkoCheckInt() != 0)
{using(SqlConnection cSqlConnection = new SqlConnection(connStr)
using(SqlCmd cm = new SqlCmd("select * from T_UnkoMaster",cSqlConnection))
{cSqlConnection.Open();
(処理)
}
return unkoTable;
}
else
{return (項目名だけのデータテーブルとか)
}
}
>>275 Javaだったら値型は強制的にオートボクシングされてしまうけど
C#のジェネリクスは値型(ユーザ定義の構造体を含む)をそのまま扱える。
EXISTSいらんだろ
あー select count(*) from sys.databases where name = 'Unko' これで十分っすね
教えてください uintの配列の要素[i]が空かどうか調べるのは、if([i]==null)じゃないんですか?
>>286 配列を作成した段階で全部0が"入っている"状態になる
値型の変数や配列の要素はnullには出来ないんですよ。 だからNullableなんてものの出番があったりする
配列を引数で渡して、要素を反転させた配列を戻り値で返してくれるメソッドってありませんか? Array.Reverseだと元の配列がひっくり返ってしまうようで
コピった配列を渡せばいいだけじゃないのか
arr.Reverse().ToArray()
いやいやあかんだろw
(0u & 0x80000000) == 0と 0 == 0 ってどっちが速いんですかぬ
どっちも最適化で消えてコスト0
>>294 何が?
ストップウォッチで10回計ってみたら、3万てぃっくくらい下が遅かった
コンパイル時にあらかじめ計算されるからどっちも単にtrueと書くのと同じ
っていうかJIT後の速度なんて建前としては環境依存じゃねーの? ILレベルの最適化ならともかく
いやJITじゃなくてcscの段階で消える if ((0u & 0x80000000) == 0) A(); else if (0 == 0) { B(); }と書いたら コンパイル結果は単にA();だ
いや、組込演算の実行速度なんか勝手に実測してろって言いたかっただけだ
304 :
デフォルトの名無しさん :2011/02/05(土) 03:09:46
多分 if((a & 0x80000000) == 0) と if(a>0) の速度比較しようとして大間違いしたんじゃないかな?
Arrayクラスの静的メソッドのArray.Reverse(Array)
LINQの拡張メソッドのEnumerable.Reverse<T>()
>>294 は前者と勘違いして、破壊的な並び変えしてからToListでコピー作ってると思ったのだろう。
まあLINQ使わずにCloneしてからArray.Reverseした方が早いんじゃねえの?
なるほど
308 :
デフォルトの名無しさん :2011/02/05(土) 11:36:52
テキストエディタのファイルを開くダイアログあります。 複数のファイルを削除すると「ファイルの場所」の右のセレクトメニューにフォーカスが移ります。 移したくないので自分でファイルダイアログを作って移さないように制御するのはC#で可能ですか? Cとかアセンブラとかじゃないと出来ないレベルですか?
普通に作れるけど
アセンブラとか言い出す時点で何も分かってないのが丸分かりだな
むしろアセンブリ言語でやろうとする方がありえねー…w
おまえら初心者スレなんだからいじわるしないで答えてやれよ ちなみに俺は質問の意味がわからん
もしかして既存のテキストエディタのファイルを開くダイアログの挙動が気に入らないから 勝手に自分で作ったものに差し替えたいってことか? DLLのロードをフックして自作のDLLに置き換えてAPI呼び出しを差し替えてやればいいんだったか C#では無理だけどC/C++でも非常に難しくて大変
>>312 俺も知りたい
サクラエディタとnotepad開いてみたけど、どうやったらファイルを複数選択できるんだ?
・ファイルを開くダイアログ→Vista仕様の奴は対象外(そもそもファイルの場所って表記が無い) ・複数の→1ファイルでも発生 ・セレクトメニュー→ドロップダウンリスト が正しいのか? フックでコンテキストメニューの削除を拾って、直後のフォーカス移動を抑制するのはできなくはない気もするけど C#では低レベルフックしか使えないから諦めた方がいい
多用するならC#諦めた方が良いけど、少しならP/Invokeで十分対応出来ない?
まあポーリングベースでそれっぽく出来るのは分かるけど、そんな下らない目的のために1プロセス常時稼働させるのはなあ…
どっちにしろ常時監視するプロセスは必要じゃないの? バイナリハックするのでなければ。
フックとポーリングじゃコストが
一番確実で真っ当なのはAPIフックだろ 面倒だけど
まぁそんなどうでもいい挙動のためにフックしてもねえ
323 :
308 :2011/02/05(土) 16:09:10
すいません秀丸エディタ使ってます 秀丸エディタでは設定で複数ファイル選択できます 複数のファイルを削除するとセレクトメニューにフォーカスがうつるのでカレントディレクトリがへんなところ開くのでいやなんです なので秀丸のファイルを開く使わないでマクロで自作したファイルダイアログを呼び出して利用したいと思ってます やっぱりC#では難しそうですね
ファイルを開くダイアログを表示するだけのexeをC#で作ってマクロから起動する マクロとの情報のやりとりは標準入出力を使う マクロじゃなくてプラグインとして作って、C++/CLIでC#を呼ぶ手もあるけどそこまでするほどのことでは
別にC#関係ないし、秀丸スレ行って聞いてこいよ
そもそも、なんでOpenFileDialogでファイルの削除なんかするんだろう。
無駄な切り替えとかしたくないのでファイラー使うのいやなんです C#でファイルダイアログを細かく実装できるかの聞きたかったので秀丸とは関係ありません
最後に秀丸から呼べるか聞くんだろ 悪いこたあいわねえから止めとけ
呼べるだろ 外部のプロセスとして起動して標準出力を受け取ればいいだけ ごく一般的な普通のマクロだ
>>329 秀丸マクロから外部プログラムの起動は出来るので問題ないですよ
>>328 安心してください無意味にはなってないです
秀丸を使ってるだけですので今回の質問は秀丸と関係ない範囲になります
ダイアログ作るんじゃなかったのかよ 全部自作 C#で変にフックとかに手を出して悩むよりその方が早いわ
いえダイアログが作りたいんです
ダイアログというのは私は勘違いしてますでしょうか?
こういうのです↓
http://dobon.net/vb/dotnet/form/openfiledialog.html ダイアログ自体は上記のサイトの通りにして作れるのですが
削除後にセレクトメニューにフォーカスが移るので
このファイルを開く操作を外部プログラム化して秀丸からマクロで呼び出して作りたいと思います
ここでは私が秀丸を使っているだけなのでサクラエディタやTerapadなど外部プログラムを起動できるようにC#でdialog.exeを作ってダイアログを表示するプログラムを作成したいと考えて質問させていただきました
>>334 メソッドだMethod。
メソットじゃねー!
338 :
デフォルトの名無しさん :2011/02/05(土) 17:21:39
オープンダイアログは編集するファイルを開く為の物だから、いきなり「削除後」と言われても 何処で何を削除した後なのかイメージできないんですよ そこから説明できますか?
C#で作成したダイアログを開きそのダイアログないでファイルを削除した後を指します ダイアログでファイルを選択してテキストエディタで開く処理はまでは実装できました
ColorDialogとかSaveDialogみたいな、 戻り値を返してくれるフォームを作るにはどういうコード書いたら良いんでしょうか
>>340 Form.DialogResult プロパティ
あぁ・・・publicなフィールドを用意すれば普通に使えるのか・・・ ありがとん
何の話だよ....
344 :
308 :2011/02/05(土) 18:48:16
方法が分からないのでファイルダイアログではない方法で実装しましたので〆ます
イイハナシダナー
例えば 01A,tokyo,1.1 02B,osaka,2.2 03C,fukuoka,3.3 のようなcsvファイルがあって、それを構造体に読み込んで表示させるためには どうしたらよいのでしょうか?
行ごとに読み込んで,で分割して構造体にセットする作業を書きます めんどくさいならFile.ReadAllLinesで読んだれよ
>>347 >>348 か
Microsoft.VisualBasic.dllの
Microsoft.VisualBasic.FileIO.TextFieldParser
Microsoft.VisualBasic参照してTextFieldParser使えば
>>347 なら一行ごとに正規表現キャプチャしたほうがよさそう
えっ
意外な名前が出たな
遥かに強力で柔軟なsscanfって感じ
>>354 すいません初心者でして…
良かったら1行目を読み込むプログラムお願いできませんか??
プログラム書いてくれませんかまで言われると 知るかボケって言いたくなるな
正規表現は (\d+)([A-Z]),(\w+),(\d+(.\d)?) かな
エスケープもあるよと一応指摘
</b>ニックン(チベット自治区)<b><><>2011/02/05(土) 19:54:36.99 ID:1mYU+IvKP<>
<a href="../test/read.cgi/news/1296903204/1" target="_blank">
>>1 </a>
<br> これゾン偽装●焼きsaku <>
これを名前、メールアドレス、日付、ID、BeID、本文に分けたいんですが、
どういうパーサー書けばいいのか見当が付きません、
ヒントを教えていただけませんか?
原文は改行されていません
解釈が合っているか確認させて下さい ・クラスは参照型 ・構造体は値型 ・Nullable<T>は構造体(値型) ・メソッドの引数には、参照型を渡した方がオーバヘッドが少ない ・メソッドの戻値では、参照型を返した方がオーバヘッドが少ない ・インスタンスの生成は、値型の方が参照型よりも高速
>>363 2chのdatをいじるならDTタグとDLタグだったかあたりを一旦分けた方がいいかもね
そうすればそれほど難しくはないと思う
>>364 おおむねそんな感じだけど、
メンバーが少なくて必要なメモリ領域が小さい場合、
構造体の方のコピーコストも大したことない。
あと、コピーのコスト以外に間接参照のコストもあって、
それは、値型なら0、参照側にだけかかるコスト。
2chのdatは<>でSplitした後、日付欄を空白でSplitすればほとんど取れると思うけど
どこかのブログで切り出しの仕方書いてなかったっけ?
つ正規表現
文字列データの解析にStringのSplitを使っちゃう人種とは絶対に仲良くなれないと思う
>>370 ケースによるでしょ
2chのDatって中途半端にタグ残してるしなあ・・・
板とかで少し差があるようだし
>>370 csvとかtsvデータにSplit使わんのか?
TSVなら使うが、CSVは使わない
splitの何がいかんの
ふふふ。ExcelデータをCSV出力してみ。
CSVは表現にバリエーションが多すぎてSplit程度じゃどうにもならない場合が多いしね。 DelphiでもJavaでもC#でも、どっかからライブラリ持ってきてた。
データにセパレータ文字が入る仕様はsplitでは無理。
エセCSVしかつかわないから問題ない
誰も言わないならいうけど、FileHelpersをどうぞ。
380 :
364 :2011/02/06(日) 00:12:43
staticなクラスの中にあるenumにprotected付けたら「インスタンス含めんなやゴルァ」 って怒られたんだけどなんでインスタンス扱いになるの?
そもそも
>>381 のようなエラーメッセージなんか出ない。
何でそのままコピペしないのか。
2chだからって無理して馬鹿みたいな言い回ししなくてもいいし、
言い回しだけじゃなくて意味そのものを変えてどうするの。
>>383 すまん、うっかりインスタンスメンバ含めてて勘違いしたわ。
継承できないのにprotectedなんて付けても意味ねーよってことで理解した。
enumのわかりやすいサンプルコードをください 検索かけて出てきたものを使うとどれもエラーが出ます
386 :
デフォルトの名無しさん :2011/02/06(日) 11:06:57
enum { ValueA,ValueB }
そのエラーを貼れ 勝手に翻訳せずにコピペでな
あとenumを記述する位置の問題でエラーになってるとか言うオチはないよね?
C言語のenumをコピってるとかじゃね?
はい
enum EnumTypeName { ValueA,ValueB } だな
C#でMIDIでドレミソ(C3 D3 E3 G3)を鳴らしたいのですが鳴らし方さえ分かれば後は応用できるのでどなたかサンプルを頂けませんか?
C#だと無理だけどF#だとenumをジェネリック制約に含められるみたい なんでやねん
>>397 見てもどう書いていいのか分からないので出来ればすぐ動くコードをくださいおねがいします
コードいただけたらねこの画像みせますおねがいしあmす
>>386 ,388
enum st
{
Not = 0,
FIn = 1,
Sel = 2,
FOut = 3
}
mSt = st.Not;
エラー CS0266: 型 'Test.st' を 'int' に暗黙的に変換できません。
>>400 すいませんこれも見つけたんですがVC#2010エクスプレスを使ってるのでprogram.csのどこに張れば良いのかわからず・・・(−−;)
>>401 おいおい、メッセージ通りじゃないか。
mSt を st 型にするか、代入のところに明示的キャスト付けるか。
それはC#ではエラーになって当然なんだが。
やっぱC言語のコードをコピったとかじゃないよな?
>>403 えー継承元の中でmStが定義されてていじれないよー
そういう場合は
const int Not = 0;
const int FIn = 1;
const int Sel = 2;
const int FOut = 3;
ってやらないと駄目すか?
intにキャストしろ
そういう問題じゃねえよ 列挙型は別の型に暗黙キャストできません これはenum : intって入れても同じ
int mSt = (int)st.Not or st mSt = st.Not かな
つまり、C#のenumは使えないということでおk?
Cのenumの方が危ない。
ホント、ただの定数でいいのに 言語側で勝手に用途を固定してるとかウザイことこの上ないな
きちんと設計されてればそうそうキャストが必要になることなんてないはず… んでも使い勝手悪いよねえ
intにキャストして比較演算とかしてるの見ると頭痛くなる flags使えflags
昔Windowsのエラーコードを列挙型に詰め込もうとして、 最終的にconst intかreadonly intにすべきだなこれはと思って止めた。
世の中にはenumはタイプセーフでなければならないと信じる人達がいてな C#のenumは実質ただの定数でタイプセーフではないが一応最低限の制限がある Javaのenumとか酷いよ
>>414 スレチだけど、Javaだとどんな感じなの?
よく面倒くさいなあと思うのはHttpStatusCodeなー 比較しないわけにいかない しかたないから拡張メソッドでIsSucceeded(IsSuccessの方がよかったかも)とか書いたけど
>>415 Javaの列挙型は「宣言で命名したstaticインスタンス以外を作成できない」クラス
>>415 Javaのenumは全てクラスになる
enum Hoge { A, B } から
class Hoge {
private Hoge() { }
public static readonly Hoge A = new Hoge();
public static readonly Hoge B = new Hoge();
}
みたいな感じのコードが生成される
これが導入されたのは比較的最近のことでほとんど使われていない。それまでは列挙体が無かったので
列挙引数は全てint、列挙値はクラスに定数として宣言するのが普通だった
作成できないじゃなく利用できないの方が正しいかな、この場合。 あとEffective Javaに「C#のより強力です」と書いてある。 flagsの扱いはまた別でEnumSetというのがある。
メソッド定義してポリモーフィズムしたりできるんだよw C#より優れていると言いたかっただけなんじゃないかと思うようなやり過ぎ仕様 もちろん使いにくい
実用的かどうかっつーより、思想家が作ったみたいな出来な訳ね
Pure OOPL だからね。。。
正直シングルトン作成のため以外に使ってるケースは見たことない ------------ここまでスレチ
C#ってアセンブラ書けるっけ? Cの_asmみたいな感じで
無理
426 :
デフォルトの名無しさん :2011/02/06(日) 17:54:22
正直ハイパースレッディングなんか登場しちゃうと、コンパイラより速いニーモニックなど難易度上がりすぎだよな Cですら今時asmなんて無駄でしょ
>ハイパースレッディング 突っ込み待ち? 登場したのもう10年近く前になるけど... っていうか、もうとっくに終わってる技術じゃないのか
428 :
デフォルトの名無しさん :2011/02/06(日) 18:05:24
>>427 それが最近復活したんですよ・・・俺はアレ見た時にasm終了だと思ったわ
HTはまだ死んじゃいないよ 最近だとCore i7でも使われてる
あれ、そうなんだ.... もうとっくに時代はマルチコアだかメニーコアだかだと思い込んでた
昔のPen4のハイパースレッドは不完全で、動かなくなる古いアプリがあったからな。 CoreでHTがなくなってまた古いアプリが動くようになったけど、 最近のハイパースレッドはどうなの?
デュアルと比べるとHTはスケジューリングが難しくて、 シングルCPUで動かすよりパフォーマンスが悪化するケースがある。 完全に動かなくなるようなアプリならデュアルコアでも問題が起きるよ。 近くにあるPCにHT対応のがあるけど、デュアルコア+HTでCPUが4つに見えてる。
なんか色々ゴテゴテついててもみんなのオススメはAMDだよね
enumがタイプセーフでなくていい理由と C#のenumがタイプセーフでないというのを詳しく説明していただけないでしょうか。
俺のPCはi7 870ってのだけどタスクマネージャ見ると 8個あるよ
>>430 ハイパースレッディングって、内部的に余りがちな演算器をフル稼働させるための技術であって、
それはメニーコアであっても、コアごとの最適化として有効。
メニーコアの時代が来れば消えるってものではない。
俺はC#でMIDIを鳴らすコードをZIPで欲しいと言っておるのだ
zipじゃzipを貼らねば朝敵じゃ
MIDIメッセージが理解できないに1メセタ
Thread.Suspendメソッド使うと使用しないでくださいって言われるんですが、 代替手段は何を使ったらいいんですか
>>436 そんなこのコアは整数演算しか使ってないから、
浮動小数点の処理分けてもらいましょうとか上手くいくのかね
全くのAll or nothingなんてそうそうないし、オーバヘッド生じる分マイナスじゃないのか
>>442 整数に限っても、加算器と乗算器は別ハードウェアよ。
>>434 決まった値しかとらないenumをタイプセーフenumと呼ぶ。
C#では任意の数値をenumの型にキャストできてしまうので、タイプセーフじゃない。
何が問題かというと、想定されてない値が入る可能性があるのが問題なんだけど
enumを使う場合って結局switchで分岐するのがほとんどなので、defaultで例外投げれば済む。
Javaのenumはポリモーフィズムが使えるのでやろうと思えばswitchやifなしで分岐させられるんだが、
Javaの開発者もswitchの有用性はよく理解していて、enumはクラスなのにswitchが使えるようにしてある。
enumを定数として実装することのもう一つの問題点として、enumの値を参照しているバイナリに
値が埋め込まれてしまうので、enumの値が変更されると再コンパイルが必要になるというのがあって、
Javaのenumはその問題をそのまま受け継いでしまっている。その理由の一つはswitchの実装のため。
何がいいたいかというと、高尚な機能があっても結局みんなswitch使うのでどうでもいいってこと。
>>441 外部が直接スレッド止めるような構成にしない
外部は中止要求を出しておくだけにして、スレッド側が定期的に確認して自分で中止とかする
447 :
444 :2011/02/06(日) 21:40:01
ちょっと訂正 >Javaのenumはその問題をそのまま受け継いでしまっている。 は記憶違いだった 少し複雑な処理をして回避してるみたい Javaもなんだかんだ言ってswitchを重視してるということが言いたかっただけです
.netのenumはタイプセーフでもあり整数型とも互換があるからFlagとして使える。 タイプセーフでないというよりハイブリッドと言うべきなのかなぁ。
一向にStringがswitchに使えないので許しません
>>445 なるほど
そういうフィールド用意するとかで対応してねって事か
if else if else if else if else の方がswitchより速いんですよね?
stringをswitchで使うのはタイプミス等のヒューマンエラーを考えると糞仕様だと思うが
普通defaultにAssert書くから問題ないよ
>>448 Javaでいうタイプセーフenumって
想定外の値が入らないことが保障されてることに主眼が置かれてるから
その意味じゃC#のenumはタイプセーフじゃないよ
でも別にそんなに大した問題では…
>>454 まあ気にすることじゃないのは同意。
想定外の値を入れようと思えば、整数からキャストするか、
Hoge xx = Hoge.X | Hoge.Y;
とかする必要があるわけで、安全性は保たれてると思うけどね。
>>451 ILを見るかがりじゃ、
整数として連続していればswitch用の専用命令があるから
switchのほうが早いと思う。
連続してなければif elseif と同じ。
switchをif elseに変換するのは簡単だけど逆は難しいから 一般にswitchの方が速くなる余地がある
>>456 そう、IL的にはswitch命令がある。
で、確か、CLRのJITの挙動的には、
分岐が少なければif-else同様の条件ジャンプ命令に、
多ければルックアップテーブル使ったジャンプにコンパイルされる
って言う話だったと思う。
むしろswitch文をあらゆるクラスに適用できるぐらい拡張して欲しい プリミティブ以外はif-elseの糖衣構文、EqualityComparer<T>.Defaultでの比較とかで
>>459 まあ、それは、実際、C#の「初期設計でこうしとけばよかった」後悔リストの最たるものの1つなんだけども。
なんでもswitchとか浮動小数点とかどうすればいいのかマジでわからないな
>>452 switchでstring使えるようにする是非はともかく、その理由はどうなの。
ちなみに、VB.NETの方はstringもOKだし、数値なら不等号も使えたりする
List<hoge>に登録してあるHogeのある位置の物を一つ上にとか一つ下にとか ってRemoveAtなどで一旦切り離してInsertで入れるしかないです?
C#のcaseもstringを使えるよ
>>463 IList<T>なら普通にSwapできるっしょ
[n]をテンポラリに確保して[n-1]を[n]にコピーして[n-1]にテンポラリからコピー
466 :
デフォルトの名無しさん :2011/02/06(日) 23:02:47
教えてーエロい人。 CのDLLで型定義してる場合ってどうやって呼び出すの? ヘッダーファイルincludeできるの? サンプルください(_。_)
>>466 includeはできない
同じ形になるようにC#側でも型定義する
DllImportでググれ
>>467 まじか。大した手間だな。。
ラッパーとかもないのか?
そのライブラリのラッパーがあるかないかなんか自分で調べることだろ。
ライブラリは自前。移植だ。
>>462 言語によってCASE構文の設計思想が違っていて大きく2つに分類できる。
ひとつはあくまでもif-elseifの代用と言う位置づけで、
構文的な自由度が高い。VBや古くはCOBOLのevaluateとかがそれ。
もうひとつがCやC#のそれで基本的にcaseに指定できるのはリテラルだけ。
この制限は最適化を期待しての制限となっている。
C#でstringをcaseに許可しているのは.NETのStringが変更不可クラスで、
リテラルとして扱うことが出来るため。
JNIよりは大分マシだよ
C++/CLIが混ざると後々邪魔になってるよ後悔することになるよ C++ではなくCのライブラリなら大した手前じゃないから C#だけでやることをお勧めする
enumで変な値入ってないか調べるのはEnum.IsDefined使うんだっけ。
Flagsの場合はそういうわけにもいかないけどな
switchやifで速度を気にするなら、条件に合致する確率が高いものを先に書けば良いんじゃないの?
ほんと。ボトルネックはそこなのかと
一体その速度を無視できないほどになにをやっているんだ・・・ 大方の場合ループさせる処理内部での条件分岐嫌ってるんだろうけど
Enum.IsDefinedってほとんど使ったことないわ 教条主義的にEnum.IsDefinedでチェックしたがる人がいるけどswitchのdefaultで十分 それどころかenumに新しいの値が追加されたときに正しく動作しなくなるから公式には非推奨ってことになってるし
>公式には非推奨 ま・じ・で? なんてこったい・・・・・
>>482 パフォーマンスはさておき
>バージョン間で異なる可能性がある列挙体のランタイム型に基づいているため
つうことは4.0固定で完全にそのPGだけで組み込まれてるとかだけならいけるのかな?
なんかオラ怖くなってきたぞ
列挙体に値を追加したけどその列挙体を使ってる既存のメソッドはそのまま変更しない というのは同じアセンブリ内だとしても普通にありうるケースじゃないか? Enum.IsDefinedを使うなら常に列挙体の定義とそれを利用する側が同期していないといけないってことでしょ
>>484 シナリオ的にはあるけど、いまん所は全て参照検索してきっちり修正してるかDefaultでExceptionはいたりしてるかな?
ん〜何となくEnum使いどころが判らなくなってきた
俺の質問に答えられる猛者はおらんのか!
答えてやっから早く言えよ
WPFの質問ってここに投げていいの?
WPFは専用スレあるよ。
WPF独立してたのね…thx
enumをFlagsで使う場合 特定のフラグがたってるかどうかのチェックってどうやってやる? 今は↓みたいに書いてるんだけど若干面倒 もっと簡単にかける方法あるなら教えて欲しい if ((flag & myenum.bar) != 0)
.NET4でEnum.HasFlag IsDefinedと同じくリフレクションで実装されててクソ遅いけど
>>492 それ間違ってるぞ
myenum.barが合成されたフラグの可能性があるから
一般には (flag & myenum.bar) == myenum.bar が正しい
拡張メソッドでも作れば?
キューみたいな感じで、メソッドを逐次に実行しつつ、新しいメソッドを追加したいんです もしかしてThreadpool使えば出来るんじゃないかと思ったんですがMSDNによると、 ThreadPool.SetMaxThreadsではワーカー スレッドの数または I/O 完了スレッドの数に、 コンピューターのプロセッサ数より小さい数を設定することはできません とのことで、そのままぶち込んだだけでは実現できそうになくて、困ってます キューの追加と実行するスレッドが別の場合、どのようかクラス使えばいいんでしょうか
キューにアクセスするときロックする
バックグラウンドスレッドでDispatcher起動してBeginInvoke
producer-consumer
教えてもらった単語でググったらサンプル見つかりました ありがとん
うん
こ
お前ら本当にUnko好きだな
うん
マジな話、ガキの頃に遊び相手がいなかったから、幼児性が卒業できてないんでしょたぶん。
Unkoにマジレスカッコ悪い
でも本人はたぶん、俺は2chだからふざけてるだけだ、とか思ってる。 馬鹿かって。 それを言うなら便所や商店に落書きするような卑劣漢だって、 俺はみんながやってるような場所だからやってるだけだと思ってるよ。 要するに環境のせいじゃないの。馬鹿みたいなことをするお前自身が幼稚なの。
うん
便利な変数名だよ。便だけに
うんこにけちつけんなよ
>>494 その可能性をすっかり忘れてた
ありがとう
>>496 ここまでやらないと一般化できないんか
ついでにフラグの設定、解除、トグルも作って
ライブラリにまとめとくかな
http://uproda.2ch-library.com/lib341249.txt.shtml csvファイルを読み込んで、構造体に入れ、表示させたいのですが、文字化けしてしまいます。
ミスがあったら訂正願います。
読み込むcsvファイル↓
01A,aさん,f,1.1,1.1,1111
02B,bさん,m,2.2,2.2,2222
03C,cさん,f,3.3,3.3,3333
04D,dさん,m,4.4,4.4,4444
05E,eさん,f,5.5,5.5,5555
06F,fさん,m,6.6,6.6,6666
自作クラスを昨日完成させてVSTSでビルドしたら警告が消えないのがでちゃった IDisposableをどうのこうのってやつ IDisposableを実装すれば消えるの?
>>513 ここはC#スレ
>>514 IDisposableを実装した型のオブジェクトかIntPtrをフィールドに持ってるんだろ
前者ならIDisposableを実装してDisposeの中でそのフィールドのDisposeを呼ぶようにする
後者ならIDisposableに加えてファイナライザも実装する
うん
519 :
デフォルトの名無しさん :2011/02/08(火) 12:36:58
ちょっとお聞きしたいのですが技術ブログをやる場合って匿名のほうが良いですか? それともリアルの実名とは書いたほうがいいですか? どっちがいいですか?
俺は ネットはネット て考え方
どっちにしても2chで叩かれる。
C#のスレで個人の技術ブログが叩かれてたのって BitArrayの人くらいしか見たことない
標準ライブラリの乱数生成速度を測ってるだけで 言語は全く関係ないな 1.5秒のものはrandを使ってないんだから比較するなら他のも同じ条件で比較しないと無意味
問題はそれが可読性や保守性を犠牲にしてまで達成する事なのかって事だ
やっぱり標準ライブラリではC#最強だね。
10倍速くなるならトレードオフが成立する場面も多かろう。
まぁそんな所より別のところ突き詰めるほうが大概早くなる つうか・・・すげぇな 堂々としてて逆にかっこいいわw
JavaのRandomやCのrandはスレッドセーフだけど .NETのRandomはスレッドセーフじゃないから速いのかな 言語全然関係ないね
スレッドセーフかどうかはどうみても言語の話です。
Javaはいくら最適化したところで速くなりませんよ。その証拠に Javaで速いアプリの例ってどれもJNI使ってほとんどC++で作られてるものばかり。
>>530 randはグローバル関数だからスレッドセーフにしないと仕方ないかもしれないが
JavaのRandomがスレッドセーフで.NETがそうじゃないのはライブラリを設計した人の考え方が違うだけ
今ではJavaも基本スレッドセーフにしないで必要なら利用者が勝手にロックしろという方針に変わってるけど
javaはServer VMを使うと最適化でだいぶ入るから速くなるぞ。 あとC#の時間測定にはStopwatchクラスを使えよ。
C#は最適化前提の言語だから最適化ありではかってやってくだされ。 >C:\TEMP\pi>csc pi_cs.cs csc /optimize pi_cs.cs
俺叩かれすぎワロタ
言語間のベンチ比較はちゃんと比較する言語の全てを把握してないと 突込みどころ満載になってしまうからな よほど詳しいやつでない限り話題にあげるのは地雷
うちのおんぼろPCではこんな感じだな。 Celeron 1.4GHz シングルコア 23sec java (1.6.0_17) 18sec java (1.6.0_17 server VM) 13sec C# (.net4.0) 17sec C++ (VC++2010) 確かに乱数関数の呼び出しコストの差が大半だね。
Server VMってSwing使えますか?
スレタイ読め
GUIのスレッドを複数作ることって可能ですか?
>>540 STAスレッドを起動してApplication.Runすればいくつでもできるよ。
>>541 メインフォームの孫スレッドからじゃやっぱ無理なんですかね
ビジーになって操作受け付けてくれなくて
こんな感じだけどダメ? var t1 = new Thread( () => Application.Run(new Form()) ); t1.SetApartmentState(ApartmentState.STA); t1.Start();
>>543 それで良さそうです
ありがとうございます
でも大幅に書き換えないとやりたいこと出来ない(´・ω・`)
座標が2点、3点、4点の重心(中心)の求めるコードってどうかけばいいですか?
>>545 座標の配列を引数に取ってその平均値を返す静的メソッドを適当なクラスに書いてください。
>>523 C#で2.70秒だった
さすがベンチ番長Core i7 975
>>516 ありがてえ!
IntPtrは使ってないので前者だと思います
そのクラスで使ってるフィールドはstringとDataTableです
ともあれ今後確かめてみます
>>547 クアッドコアすか?コレ試してもらえますか?
うちのだと35秒もかかってしまう(笑
乱数の取得が多重化できないのがネックだなぁ。
var sw = System.Diagnostics.Stopwatch.StartNew();
const int times = 100000000;
Random rnd = new Random();
var rs = Enumerable.Range(0, times).Select(i => new { X = rnd.NextDouble(), Y = rnd.NextDouble() });
int cin = rs.AsParallel().Select(r => {
double dist = Math.Sqrt(r.X * r.X + r.Y * r.Y);
return (dist < 1.0) ? 1 : 0;
}).Sum();
double pi = 4.0 * (double)cin / (double)times;
Console.WriteLine(sw.Elapsed);
>>549 10.94秒
一応8スレッド全部使ってはいる模様
だから局所性が重要とリンク先にも書いてあるだろう。
i7羨ましいなあ、と思いつつ
Core2Extremeの俺も
>>549 を5回程やってみた。
9.34秒、15.00秒、10.09秒、9.32秒、9.71秒
ちょっと意外。
i7 870だと11.02秒だった
局所性まで考慮して細かくコード書けるのはC++だけ。 C++はやっぱり最速ですな。Javaは哲学からしてその全くの逆だから激遅。
並列化や局所性以前にまずRandom使うのやめろよw 比較になってない
そうは言っても統計ではRandomは多様するもの。 それが遅いのは致命的。
>>550 ,552
パラレルは難しいですね。何コアも使っても非スレッド版が速いとはorz
>>554 >>523 の最速パターンをC#で書けばほとんど同じだね。
const uint RAND_MAX = 32767;
static void Main() {
var sw = System.Diagnostics.Stopwatch.StartNew();
int cin = 0;
int times = 100000000;
uint nRand = 1;
for (int i = 0; i < times; i++){
nRand = nRand * 214013 + 2531011; uint x = ((nRand >> 16) & 0x7fff);
nRand = nRand * 214013 + 2531011; uint y = ((nRand >> 16) & 0x7fff);
if (x * x + y * y < RAND_MAX * RAND_MAX) cin++;
}
double pi = 4.0 * (double)cin / (double)times;
困ったな。何も考えずにパラレルは使えなくなったぞ。
元から何も考えずに使うもんじゃねえだろ
もともとRandomがボトルネックなんだから他のところ並列化しても速くならないのは当たり前
>>557 でも1ループの粒度が細かすぎるから工夫して並列化しないと速くならないだろうな
頭使ってパラレル使うぐらいなら、自分でスレッド振り分けるほうが楽だろ。
スレッド毎に別の乱数オブジェクトを使っていいなら改善できるのだけどな。
うちCore2Duoノートでも
>>557 のコードは0.6秒
笑わしてくれるぜ。
C#やJavaはRandomがスレッドセーフじゃないとか言っても、
そもそもインスタンス作成して使う方式だからスレッドセーフである必要がない。
Cではグローバルな状態を保持する必要があるからそうせざるを得ないというだけのこと。
>>557 0.46s@i7-975
4or8分割すれば0.15s前後
回数を増やせば、8Tの方が3割ぐらい早い
var sw = System.Diagnostics.Stopwatch.StartNew();
const int times = 2000000000;
const int threads = 8;
var c = Enumerable.Range(1, threads).AsParallel().Sum(_ =>
{
int cin = 0;
uint nRand = 1;
for (int i = 0; i < times / threads; i++)
{
nRand = nRand * 214013 + 2531011; uint x = ((nRand >> 16) & 0x7fff);
nRand = nRand * 214013 + 2531011; uint y = ((nRand >> 16) & 0x7fff);
if (x * x + y * y < RAND_MAX * RAND_MAX) cin++;
}
return cin;
});
double pi = 4.0 * (double)c / (double)times;
sw.Stop();
Console.WriteLine(pi);
Console.WriteLine(sw.Elapsed);
Console.ReadKey();
いやさすがにそれは意味がない。 せめて初期シードを変えようぜ。
nRand = nRand * 214013 + 2531011; uint x = ((nRand >> 16) & 0x7fff); これってどういう仕組み?
どう見ても線形合同法
>>523 >Javaはきっと真面目に乱数を作っているし、真面目にオブジェクトを指向しているんだよ。C#は割といい加減なのではないかな?
わろた。
そもそもCのrandが一番質悪いんじゃねーか?
アイコンを設定したいんですが、PNGファイルを読み込もうとしてもVSに怒られます。 アイコンのファイルフォーマットって何が使えますか?
そりゃアイコンじゃねーの?
icoォicoォー
ICOFX使ったら簡単にできたよ ありがとん
>>569 ある意味間違って無い様な気もするがなw
MS系言語は何つーか、理想論は横にポイ捨てして
実用重視になっていく傾向が有る様な気がする。
C#は確かに一応OOPだけれども
OOP以外のパラダイムにも、色々手を伸ばして行ってるし。
Javaのライブラリが無駄にスレッドセーフなのはJavaの中の人も認める大失敗 コレクション類なんか後で軒並みスレッドセーフじゃないバージョンを追加してる
OOPも元々は生産性向上の為の方法に過ぎなかったけど いつの間にか宗教になっちゃったな
Javaが.NET2.0程度の水準のままずーと停滞しているせいだろ
Thread.SpinWaitとThread.Sleepの使い分けってどうしたらいいですか?
579 :
デフォルトの名無しさん :2011/02/09(水) 00:31:21
すみません質問させて下さい。 現在Form1のみが存在するプロジェクト中に子フォームを追加しようと思い、 プロジェクト右クリ→追加→Windowsフォームを選択し、Form2.csを生成しました。 そして、Form1.cs中で子フォームを表示するために、 Form2 f2 = new Form2(); とコードを書いたのですが、 エラー1:型または名前空間名 'Form2' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 というエラーが出てしまいます。 本来だとForm2と記述した時にVC#2008のデフォルト環境だと薄緑色にフォントカラーが変わるはずなのですがそれもなく。。。 Web上で何度も情報を確認してみましたが、やり方は間違っていないような気がしてならないのでここで質問するに至りました。 宜しくお願い致します。
SpinWait メソッドは、ロックを実装する場合に便利です。 Monitor や ReaderWriterLock などの .NET Framework のクラスは、 このメソッドを内部的に使用しています。SpinWait は、基本的には、 iterations パラメータで指定されるループ カウントを使用して、 プロセッサをほぼ専有するようなループ状態にします。 したがって、待機を継続する時間はプロセッサの速度によって異なります。 Sleep メソッドは、これとは対照的です。 スレッドで Sleep を呼び出した場合は、指定した間隔が 0 であっても、 そのスレッドのプロセッサ時間の現在のタイム スライスが中断されます。 Sleep に 0 以外の間隔を指定した場合は、その時間間隔が経過するまで、 スレッド スケジューラによってそのスレッドがスケジュール対象から外されます。
Form1の名前空間がForm2と違うんだろ
582 :
デフォルトの名無しさん :2011/02/09(水) 00:37:55
>>581 できました、ありがとうございます。
途中でプロジェクト名を変更してリファクタリングをきちんとしていなかったのが原因でした…
どういたしまして
>>580 つまりSleepではInterrupt()出来ないという事ですか?
doubleで管理してる座標データがあるんだけど 使うのは画面の座標なので小数点以下がいらないんだけど 丸める際は手っ取り早くdoubleをキャストして(int)キャストした(doubel)方が早い?
0.5足してintにキャスト
うん
オーバーフローすることはないの? って画面の座標か、なんでdoubleなんだよ…
>>588 例えばドローツールならdoubleで持つだろ
WPFなんかコントロールの座標やら何やら全てdoubleだぞ
>使うのは画面の座標なので小数点以下がいらないんだけど っていってんだからそういうのにはあたらんだろ。
>>588 WPFやSilverLightはdoubleなんですよ
画面に直接関わるときだけintの方が都合がよい
WinFormは.net関連はデフォルトがdoubleだけどGDIなどの関係する部分は
floatのままだったりするし・・・
593 :
デフォルトの名無しさん :2011/02/09(水) 01:20:30
つうか丸める必要が特別有るのか?
>>590 ドローツールならまずfloatで十分だと思う。
それならキャストいらんし。
doubleで座標管理する必要があるのはグラフぐらいしか思いつかないな
WPFやSL的な都合と今後のもしかして・・・のためにdoubleで管理するけど 作ってるソフト的にはintレベルでいいなあと思って ただそれだけ 3DCGやってるわけじゃないしね
>>594 floatで十分なんだけどWinFormでも小数点などの定数を書くとdoubleとして扱われるように
WPFやSLはdoubleかintなんですよ
floatは過去の物
コントロールの座標に整数足したりするときにdoubleのまま計算するのが気持ち悪いとか? 気持ちはわからんでもないがdoubleは十分な精度があるから気にする必要ない
>>595 なら、何も考えずにfloat(PointF)にキャストすればいいんじゃないのかな。
きっちりピクセル単位で幅や高さ、線の太さを指定して矩形を描く必用がある、
みたいな場合はこういう考え方だと破綻しちゃうけどね。
>>597 簡単なお絵かき用のツールなので小数点はいらないんだよね
使う人も線をつなげる際とか小数点以下があるより整数でやった方がいいだろうし
>>600 floatはfつければいいだけでしょ?
知ってるわよみょんみょん
では「WinFormでも小数点などの定数を書くとdoubleとして扱われる」というのは?
>>602 WinFormアプリで1.0って書いてみればいい
接尾語無しだとdoubleだから
そりゃそうだ で、WinFormを取り立てた理由は?
WinFormのグラフィック部分->昔のfloat依存のころの名残 WinFormのその他の部分->新しい価値観のdouble WPF+SL->完全にdoubleへ移行
接尾語無しがdoubleになるのと関係ないんだよ
デフォルトが何かって結構重用よ
こいつ本当にわかったのかな まいいや
わざわざfloatとかshortで変数作っても、 計算するときはdoubleとかintでやってるんですよね?
>>593 まあ、丸めないと原点の方向に0.5ピクセル分オフセットが生じる問題はある。
((0, 0)のピクセルだけ、実数の座標に写像した時に2X2の大きさになってしまう)
環境依存だろ
数学は環境に依存しませんよw
↑話が分かってない馬鹿
コンピューターグラフィックの場合内部でどんな管理してようが 最終的にディスプレイに表示するためにはintになるんだよ 数学どうのは関係ない
WPFなら表示にも小数だよ。
ひっでえ流れだなw
>>Direct3Dだったらプログラミングできる範囲では最後までfloat
Direct3Dは過去のもの
ManagedDirectX復活させてくれ… MS以外のフリーコンポーネントとかあんま使いたくない
ManagedDirectXは過去の物
だれか.Net並のライブラリをC++で作って
そういえばWPFやSLってPointF使えたっけ? Pointだけでこいつがdoubleだけだったような
XNAでええやん
XNAていいの?
いいよ
XNAにしていいんです! Aさん>XNAにしてちらつきが無くなりました。 Bさん>XNAにしてXBOXでもソフトが使えるようになりました。
でも結局、WinFormに戻るんだよな。
おっとWPFやXNAの悪口はそこまでだ
戻らね−よ
MSが公式にDXとかWin32とかをラップしたライブラリ出してなかったっけ?
Windows API Code Packか。あれどうなの?
>>614 言っちゃ悪いけど馬鹿丸出し。
ここまで補助線出して分からないかね普通。
小数点を切り捨てる関数f(x)があったとする。
この時f(x)が0となるxの範囲はどうなるのか考えてみろよ
↑話を理解してない馬鹿
>>634 幼稚なことしてねえで、どう馬鹿なのか説明してみな糞ガキが。
↑話を理解してない馬鹿
↑話を理解してない馬鹿
↑話を理解してない馬鹿
>>516 会社で、対象クラスにIDisposableの継承を追加して、
実装も追加して、フィールド変数(DataTable)のディスポーズを呼んでみたら警告消えたよ
今度設計者に相談してみらー
Webサービスを分かりやすく説明すると何ですか? Webサービスは業界標準でSOAPを使ってやり取りされ中身はWSDLです。 ってあってますか?
なに言ってるかわかんねーうえに ここで聞くことすら間違ってるよ
微妙にあってない
馬鹿ばっかだなw
スレ違いでしたかすいません。 どこで聞けばいいのやら…
↑スレを理解してない馬鹿
会社で、30プロジェクトファイルくらい入ってるソリューションで開発してるんですが データセットクラスのデザイナが重すぎて開きません コンポーネントクラスに作ったデータアクセスクラスのデザイナを開くにもやたら時間がっかかります ちなみにPCはXPpro、コア2デュオ2.2GHz、メモリ2GBです 同僚はVistaや7の人ばっかなのですが、みんな開けてるようです なにかいい方法はないですか?このままだとデータセットクラスを担当した時に死にます
当面使わないプロジェクトを閉じておけばいい
自分の担当以外のプロジェクトをアンロード
XSD覚えて直接編集
真っ先にやることはメモリを目一杯増設じゃないの VS結構メモリ使うよね
おれは目一杯だけどやっぱ遅い
昨日と違っていきなりレベル下がってると思ったら またWPF厨が来てんのか。
いつも低レベルだろw
まあね♪
655 :
デフォルトの名無しさん :2011/02/09(水) 23:14:14
>>652 wpfに恨みでもあるのか?普通に使える技術だと思うが
少し前にいろんなスレでWPF使えねーだのラムダ式がわかんね―だの喚き散らしてた勘違い初心者のことを指してるんじゃないか?
厨だのなんだのガキみたいなこと言ってる奴が 誰かのプラスになるような知識や智恵を持ってるわけないんだから、構うだけ有害。
自己紹介乙
すみません、初心者ですが、 ソケット通信で可変長データ扱うのに 良いサンプルないでしょうか?
そうだそうだ!
WPF厨まじウザイな。 隔離スレ用意してもこっちを荒らしやがる。
自演乙
VB.NETでいうSetやDimはC#ではどういう意味になるんですか?
はいはい自演自演
答えは”バカめ”だ!
自演でWPF叩きとは、よっぽど暇なんだな
みんな結構VS標準のデータセット使ってるの? 使い勝手が悪くてほとんど使ってないんだが
あ、ごめん 型付きデータセットのこと
VisualC#2010Express使っています。 pictureboxに表示した画像の上からDrawLineで線を引くことは出来ますか?
できます。
>>674 早い解答ありがとうございます。
がんばって調べてみます。
冷たいなw
>>673 WinFormだよね?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(640,480);
            pictureBox1.Image = bmp;
            this.MyDrawLine(bmp);
        }
        private void MyDrawLine(Bitmap bmp)
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.DrawLine(Pens.Black, 10, 10, 100, 100);
            }
        }
    }
}
ペンとかブラシとかってDisposeしなくていいの?
>>678 LinkLabel.Link.LinkData
SilverLightを仕事で触り始めたけど WPFと比べて出来ないことが多すぎて泣ける。
Process.Startで外部Exeをキックするコンソールを作成しました(.NET2.0)
起動はできるのですがプロセスを切る処理がどうもよくわかりません
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.close%28v=vs.80%29.aspx 上記のページを参考にして作ったのですが、キックした外部Exeのプロセスを切るのではなく
起動元のExeのプロセスを切るにはどうすればいいのでしょうか?
(キックした外部Exeだけが残るイメージです)
Process myProcess;
myProcess = Process.Start("Notepad.exe");
myProcess.CloseMainWindow();
myProcess.Close();
サンプルにあるこのコードだとキックした外部Exeのプロセスが落ちます。
3行目の「myProcess.CloseMainWindow();」をコメントアウトすると、起動元のExeのプロセスが落ちます。
ですが、Process型として宣言しているmyProcessは外部Exe(メモ帳)なので、どうして起動元が落ちるのかわかりません
やりたいことは満たしているのですが、自分の中で説明がつかない状況です
初歩的な質問かもしれませんが、どなたか教えて頂けないでしょうか?
685 :
デフォルトの名無しさん :2011/02/10(木) 20:50:24
>>683 Mainの処理が終わればコンソールは閉じるんだよ
>>687 そう思うんなら、その設定で現象を説明してあげたら?
>>680 UsingはGraphicsの解放を保証するだけじゃないんですか?
糞#はやらない方がえっな生産性がよくても糞真のスレ
J#がどうかしたって?
こら、J#の悪口いうなや!
693 :
デフォルトの名無しさん :2011/02/10(木) 22:45:38
>>689 Pens.Blackはstaticだから
自分で書いたクラスにDisposeを付ける必要があるのってどんなとき?
共有リソースを一時的に占有する必要があるクラス。
糞#ェ…
>>693 Penをnewしてたら解放する必要があるって事でいいですか?
>>694 IDisposableのインスタンスを保持している場合
アンマネージリソースを保持している場合
ですかね?
698 :
デフォルトの名無しさん :2011/02/10(木) 23:27:16
でもPensじゃなくてPenを作ってもスコープ抜ければ問題ないんじゃないの?
>>699 Pen(255,0,0,0);
これをstaticで持ってるだけでしょPens.Blackって
ん? じゃあDisposeされた時の対処はしてないのかね
PenにはColorとboolのinternalコンストラクターがあって、private bool immutableの値を設定できる PensのPenはtrueなのでデストラクター以外でDisposeすると例外が発生する
へー、勉強になったわ
一番いいのがMSが公開してるソースを見てみることなんだけどね
706 :
705 :2011/02/11(金) 00:44:35
new LinkLabel.LinkCollection(LinkLabelOwner)
で指定した親に
LinkCollection.Add(startIndex, linkLengh, linkstring)
でリンク突っ込んでるのに
foreach (LinkLabel.Link link in linkcollection){ linkLabel1.Links.Add(link); }
これで同じものをもう一回突っ込みなおしてるから
http://msdn.microsoft.com/ja-jp/library/1a22yh2z%28v=VS.100%29.aspx ※メモ
2 つのリンクで同じテキストを共有することはできません。 別のリンクで既に使用されているテキストに対して新しいリンクを作成すると、例外がスローされます。
に引っかかってるんだろう。
質問する前にスムーズに状況再現できるコードを貼れ。
今回の場合は適当なURL含んだ逐語的文字列リテラルを含めて貼れ。
例外のメッセージが出る場合は「例外の詳細をクリップボードにコピー」を選んで一緒に書き込め。
709 :
デフォルトの名無しさん :2011/02/11(金) 23:49:59
VisualStudioのチームファンデーションビルドっていうビルド用パッケージを使ってビルド用サーバ作って チームのビルドを一元化してるんだけどさ ビルド結果で吐き出されるログを編集してこねくり回すためのexeをC#で作ってるのよ このログ編集exe実行をビルドマシンのビルドと同時に自動起動するようにしたい で、このビルドはスクリプトファイルを頭から読んでいく形で行われるんだけどさ(xmlで.projファイル形式で記述されている) そのスクリプトを修正して、ビルドサーバの任意のディレクトリに置いたログ編集exeを呼び出す方法はわかったんだ しかし、そもそもログファイルの生成は、スクリプトが全行実行完了してからじゃないと吐き出されないOTL そこで、まずは待機exeを非同期に呼んで、5分間くらい待ってスクリプトが終わってログが吐き出されてから ログ編集exeを呼び出そうと思ってるんだけど 待機exeの実装はどうやってすべき?さっぱわかりません><
710 :
708 :2011/02/11(金) 23:55:29
まちがった @まずは待機exeをスクリプトから普通に呼び出して、 A待機exeからログ編集exeを非同期に5分後位に呼び出す Bで、待機exeは終了して制御をスクリプトに戻す Aの実装方法をご教示いただきたいです
そういうのは普通スクリプトじゃなくビルドバッチのケツにぶち込むだろ
普通にThread.Sleep(300000)じゃ駄目なのか。
そのログファイル名(パス)が固定なら、 VS とは無関係に常駐プログラムでファイルの更新を検知してやればいいんじゃまいか。
msdnのIEnumerable<T>関係にあるUMPって何?
4.0のドキュメントだとTSourceに直されてるな
716 :
デフォルトの名無しさん :2011/02/12(土) 16:05:04
ToolStripPanel で、内部のToolStripをつまんで移動しても 領域が自動的に広がらないようにしたいのですがどうすればよいでしょう。
そんな現象あったっけ?
718 :
716 :2011/02/12(土) 16:16:39
あとさらに、ToolStripをD&Dで別のToolStripPanel に移動できないように するためにToolStripPanel のAlowDropを使えるかと見たらAlowDropプロパティ がありません。ToolStripを別のToolStripPanel にD&Dで移動できないように する方法を知りたく(ただし一つのToolStripPanel 内では適当に移動できる ようにはしておきたいです)。
ならToolStripContainerを使わなきゃいいのに....
720 :
716 :2011/02/12(土) 16:21:38
>>717 ToolStripContainer だけでなくToolStripPanel でも、自動的に
幅が膨らんでそこにおけるようになりました。1行目内から
少し外に出た時点でパカッと幅が広がって2行目にそのToolStripが
置けるようになりました。1行だけに限定して移動できるようにしたい
のですが自動的に広がってしまうのでした。
>>720 なるほど確かに。
あまりかっこいい方法じゃないけど、ToolStripContainerをPanelに入れて
Dock.Fillにして、Panelを適当な高さにすれば回避できるみたい。
722 :
716 :2011/02/12(土) 19:04:21
>>721 ありがとうございます。用事があって離れていました、試してみます!!
質問です。 インスタンスの生成やメソッドの実行時に、デバッグログを出力する場合 出力メッセージは、何処に持たせるべきでしょうか。 ・メッセージの一覧を管理するクラスや列挙体を作る ・各クラスのメンバに、 string const として定義する ・リフレクションでクラス名やメソッド名を取得する ・上記以外
>>722 ごめん、
>>721 のToolStripContainerはToolStripPanelの間違いね。
言わなくても分かると思うけど一応
725 :
デフォルトの名無しさん :2011/02/12(土) 21:07:34
>>725 C# カメラでググれ
727 :
デフォルトの名無しさん :2011/02/12(土) 21:57:40
ログねえ…どうなんだろうね そもそも標準のログ使ったことねーな log4netばっかりで
じゃあOpenCV使えば?超絶簡単だよ。
デバッグ専用ならあんまり巨大なクラスとか大量の定数は作る必要を感じないなあ StackFrameとリテラル程度でいいんじゃない?
string constで大量に定義するよりは クラス内にenumを作るかな
732 :
デフォルトの名無しさん :2011/02/12(土) 23:06:16
>>729 OpenCVでをC#で使う場合、まずライブラリをDLしてきて・・・
どのようにすれば、いいのですか?
本当に初心者で申し訳ないです。
あと、お勧めのサンプルってありますか?
少しはがんばれよw
.NET 4で導入されたContractsについて聞きたいのですが 基本的に引数チェックはContracts.Requiresに置き換えて良いと考えても良いものですか?
ドキュメントに「〜でなければなりません」とか書くようなものは全部Contracts使っとけばOK。
そうなの?
737 :
デフォルトの名無しさん :2011/02/13(日) 08:25:33
>>733 そこをなんとか!!
どうか!どうか!卑しい私にOpenCvのサンプルを!!
自分なりに調査したのですが・・・英語のサイトが多く、僕の英語力(エキサイト翻訳)では
限界です。
あきらめて死ねばいいのに
こんだけ大量にサンプルがあるのに使えないって 基礎がなってなさすぎ。 初心者ならもう少し基礎をやってからにしろ。
740 :
デフォルトの名無しさん :2011/02/13(日) 11:52:13
>>738 すみません、カメラを使用して遊ぶおもちゃを思いついたので、いてもたってもいられず
書き込んでしまいました。
あきらめずがんばってみます。
>>739 ですよね、C#の存在を言ったのが2週間くらい前で
基礎はなってないですねw
もうちょっとネットで調べて見ます。
わからないことがあれば教えてください。
レスありがとうございます!!
引数を持たないデリゲートって作れますか?
なんで作れないと思ったのかすげー気になる
>>742 Delegateって大文字で書いてた・・・
ありがとん
Action, Func<T>, ThreadStart…
>>747 うちもMSから30MB程度の物をダウンロードするにもダメなときがある
対策としてはレジューム対応してるダウンローダーでダウンロードするしかない
>>746 SharperCVが地雷だと言うなら理由を書いておいてくれればいいのに。
調べたところ使える関数が少ないみたいだ。
なので
>>746 の言うとおりOpenCVSharpが良さそうだね。
Thread.start()したメソッドって、 処理が全部終わったらスレッドも勝手に破棄されますか? 常にAbort()を呼び出す必要ってありますか?
以下のような構造をしたXMLからIdタグの要素を全て取得するにはどうすればいい? 最終的に要素はリストに加えるか、IEnumerable<int>として扱えればいい 制限:.NetFramework 3.5、Linq使用可 <Hoge> <Piyo> <Ids> <Id>1111</Id> <Id>2222</Id> <Id>3333</Id> <Id>4444</Id> </Ids> </Piyo> </Hoge>
つDescendants
web語全般がなじめないのですが C#でCGIソフトを作る環境はありますか? ブラウザに表示されたボタンやコマンドを入力 → 鯖で処理 → クライアントに表示 という奴です
web語って何?HTML? まず一般的な用語を身につけてから来い
ASP.NET
代替のCollectionがGenericで用意されてる場合って、 基本的にそっちの方が高速って認識で間違いないですか?
フォームアプリでTabを押したとき、フォーカスが移動しますが、 その順番を変えたいのですが、どこを弄ればいいんでしょうか? VC#2010Expressです。
761 :
デフォルトの名無しさん :2011/02/14(月) 19:00:41
>>745 >>746 ありがとうございます!!
OpenCVSharですか、使ってみます!!
何事にもチャレンジですね!
>>751 調べていただいて申し訳ないです。
ありがとうございます。
がんばってみます。
>>756 > なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
ASPじゃなくてサーバーが何をやってるかを勉強したければC#で簡易サーバーを組んだ サンプルをどこがの情報サイトが公開してたな あれ動かしてみなよ サーバーにとってのURLが何かとかわかるよ
CodePlexにあったな。
byte列で加算したんだが良いやり方教えてー こんな感じにしたい↓ BCDって言うんかな? 0 :0x00 0x00 0x00 0x00 1 :0x00 0x00 0x00 0x01 10:0x00 0x00 0x01 0x00
766 :
デフォルトの名無しさん :2011/02/15(火) 00:00:47
decimal?
decimalではなく、ただのIDみたいな使い方をしたい。
769 :
デフォルトの名無しさん :2011/02/15(火) 00:09:46
Linqでコレクションから項目を30個ずつ取り出したい時はどういう風に書くのが簡単でしょうか?
>>768 仕様 書いたヤツに突っ込んでくれ
>>769 BCDではなさそう…
0000-> 0x0000 ←BCD
1234-> 0x1234 ←BCD
1234-> 0x01020304 ←こういうのが良いとさ。
>>765 下位8ビットの論理積をとって、右8ビットシフトするのを繰り返すとかかなぁ
>>771 意味が分からないんだけど、右の数字は16進数になってなくない?
単に一桁ずつ分けるなら数字を文字列に変換して一文字ずつ取り出せばいいと思うけど・・
>>771 めんどくせーな
桁数がどれくらいかしらんけど
USC-2も半角部分はアスキー互換だっけ?
アスキー互換だとすれば
intで計算byte配列に直すときはintをstring化して文字単位に分割して
0x30をマイナス
普通に整数で計算して、 その結果から"0000"や"0001"や"0010"みたいな文字列作ってから 各桁から0x30引く(0x0Fでマスクでもいい)
>>773 BCDは8bitで0〜9までしか扱わないんだよ
2進化10進だっけかな?
パックドとかアンパックドとか無かったっけ?
まあそんな機能があるのは昔のメインフレーム向けの言語とかの時代くらい?
どうせそういう名残のある物なんだろう
BCDとか初めて聞いた、勉強になるなぁ
ゲームの得点表示もこんな感じで数字を分解して インデックス化しないとテクスチャが扱えないんだよな
なんかZ80の10進数表示ルーチン書いてた頃を思い出した
10で割って、10の剰余とって…的な… 桁上げのシフト演算もなぁ… もっとスマートなの( ゚д゚)クレ
>>781 そこ使うならコンソールで書けよ
実行結果見れないじゃん
>>770 collection.Skip(30 * i).Take(30)
とかかな?
>>780 桁上げシフトが何を言ってるのか分からんけど、C#なら結局10進数の最上位桁の
1の値から順に割ってくのが一番早いと思うよ。
アセンブラだとBCD加算命令が使えると思うから、byteをパックドBCDに変換するルーチンと
パックドBCDを256倍するルーチンを書いて、その二つを組み合わせてunitをbyte配列に書けるけど、
BCD加算をC#で実装してたらかえって重くなるんじゃないか。
787 :
デフォルトの名無しさん :2011/02/15(火) 01:09:56
ところでC#のintを文字列とか変換って内部はどうやってるんだろう 単純に割り算かな? だとすると自分で組んだ方がいいかもなw
>>787 世界最高レベルのライブラリ作者が書いたコードより速くできる自信があるならどうぞ
カルチャとかフォーマットとかいろいろ考慮すると遅くなるんであって 特定の変換ルールに限定するなら自分で書いた方が速いだろ でも数値->文字列の変換が使われる状況ってその処理自体がネックになることはまず無くて IOとかGUI操作とかで吹き飛ぶ
作っているときのパフォーマンスチューニングって意味ないよな 速度が問題になってから改良すれば十分
後々パフォーマンスの為に改造したりしなきゃいけないような場合、メソッドとか分けときゃいいし
>>788 よく本とか記事にそういうこと書かれてることがあるけど、
実際、速くするだけなら簡単なんだよな。
その論理だとJava開発陣は世界最低レベルの開発者の集まりってことになるし。
linqの進捗状況をチェックするスマートな方法ある? 今のところIEnumerableに拡張メソッドを作ろうとしてるけど
>>792 >その論理だとJava開発陣は世界最低レベルの開発者の集まりってことになるし。
なにか問題でも?
>>792 制限の中で最速って意味だと思うけど・・・・
Javaなのにネイティブコード使って「はい最速ー^^って話ではないような
制限じゃなくて仕様な そりゃ12345を常に"12345"に変換するだけの仕様ならずっと速く書けるが 実際にはもっと複雑で高機能なので遅くなって当たり前
ふらっとは相変わらず香ばしいな
あんな型に厳密でない言語で書くとかwwww
少しはC#の話しろよ・・・
801 :
デフォルトの名無しさん :2011/02/15(火) 16:58:36
Form上のコントロールでSplitContainerなどのコンテナを多用してコントロールを 配置しています。TabIndexを設定していますが、最後まで行ったFocusが循環して またTabIndexの先頭に戻って来ません。正しく先頭に戻るようにするにはどうすれば よいでしょうか?教えてください。(VS2005使用)
leaveかなんかでfocus()すればいいんじゃ
>>783 これをループで回すとカナリア遅くね?
もうちっと早くやりたい場合になんかいい方法論ない?
804 :
デフォルトの名無しさん :2011/02/15(火) 17:31:24
>>803 ループで回すぐらいなら、全部取って30ずつ回せば良いだけでしょ
Linqは最適化するにも保守するにもテストするにも使いにくい。 やたらに使いたがる奴はただの馬鹿。C++のテンプレート厨と同じ。
>>803 Enumeratorを管理するクラスでも作れば?
特にテストしないといけないような粒度のものをLINQっていうかラムダ式で書くなよ
static IEnumerable<T[]> BufferWithCount30<T>(IEnumerable<T> enumerable) { var array = new T[30]; int count = 0; foreach (var i in enumerable) { if (count == 30) { yield return array; count = 0; } array[count++] = i; } //// 残りが欲しい時 //var leftValues = new T[count]; //for (int i = 0; i < count; i++) leftValues[i] = array[i]; //yield return leftValues; }
Linqを最適化って何するんだ?
商用、業務レベルでは、ブラックボックスのライブラリでも、当然にテストする。 それでバグ発見も普通にある。大手に何度かバグ報告したことあるし。 パッチに数ヶ月かかる糞大手もあった。 ただ自らLinqとか使って保守しずらくするのは馬鹿のすること。 短いのがスマートだと思ってる馬鹿がたまにいるから困る。 保守性や仕様変更耐性上げるために冗長に書くのが残業しないための知恵。
まあLinqは静的メソッドに過ぎないんだけどねw
Linqって速度的にも優れてるわけじゃないんでしょ? それならむしろ可能な限り避けるべきなんじゃないの
馬鹿か。それ保守性と関係ないし。
どちらかと言うと遅い。 統計使って最適化できないし。
独自実装でハッシュ結合やグループ化しているコードとか見たくもないんだけど
メモリ効率とレスポンスはLinqの方がいいだろ
現在 void foo() { _hoge = new HogeClass(); PiyoClass A = new PiyoClass(_hoge); PiyoClass B = new PiyoClass(_hoge); A.ThreadStart(); B.ThreadStart(); } としてフィールド変数_hogeを、 無限ループを持つスレッドA及びBで共有しているのですが、 この_hogeをHogeClass hoge = new HogeClass();のように、 ローカル変数として用意した場合どうなるのでしょうか fooメソッドが終わってもhogeの実体は残り続けて、AとBで共有されるのでしょうか
はい
まだLinq恐怖症の奴いたのかよw
そもそも3.0以降の案件にあたったことがあんまりないんだが、そろそろVB6〜1.1のリプレースで増えてきてるのか?
>>821 そうなんですか
じゃあフィールドで値持っておく必要ないんだ・・・
なんてこった
826 :
デフォルトの名無しさん :2011/02/16(水) 00:56:55
ベースフォームを新たに作り、それを継承してサブクラスのフォームを2つ作ろうとしてるんだけど サブクラスのフォーム2つでフォームのHeightが違うんだ これを実装するにはやっぱ 1.BaseではでかいほうのHeightに合わせる 2.小さいほうのサブクラスフォームのロードイベントで、Heightを設定する ってやり方になるかな?
Reflectorかけてコードに戻したときに、 メソッドの引数に決め打ちで入力されることがあるんですが、 これって無駄なパラメータ入れてるから最適化されてるよって事ですよね? 恥ずかしいコード書いてるって認識した方が良いですか?
可能なら(殆どの場合そうだと思うけど)フォームの継承ではなく、 ユーザーコントロールを使った方が人生シンプル
>>827 無駄かどうかなんてお前以外の誰が判断できるんだ。
>>827 可読性とか変更耐性とか色々有るので、必ずしも無駄とは限らんというか
「勝手に最適化してくれるんだから、コードをカリカリにチューニングしなくてもいいや」と思っとくが吉
831 :
デフォルトの名無しさん :2011/02/16(水) 02:07:11
ほほう
このスレではデザインパターンとLinqはタブーだなw
Javaを見ればすぐ失敗作だと分かることだ。
アホがついて来れないんだよな
Java厨も同じこと言ってた10年前。
10年前か・・・結構ベテランもいるんだねw
ゆとりかよ?w どおりでLinqの欠点が全く見えないわけだw
そういう突飛なこと言う場合は説明が必要だな
どうせLINQが理解できなかったんだろ。 Rxとか見せたら発狂しそうw
理解できないとかw Z80から何十年コード書いてると思ってんだよ?w
流石ベテランさんは違う
実はLinqってしっくりこないんです!
みながわさんはもう許してやれよw
ゆとりがふぁびょっててワロタw
みながわさん来てたのかw
>>813 linqを使わないほうが仕様変更に強いっての本当?
実例をあげてみて欲しい。
foreachで書き直すだけなら何も変わらないだろうな
Whereとか自力で作るってことか 不毛過ぎる・・・
linqを使うと仕様変更できる人が少なくなる
Whereとか使うだけで仕様変更できる人が少なくなるって…
LINQ to ObjectなんてIEnumerable<T>を順番に取り出して処理してるだけじゃん。 この程度の事すら理解できない・理解しようとしない奴が、俺の書いたコードを弄繰り回して仕様変更するなんて寒気がするな。
LinqってSQLの構文と微妙に違っていて使いづらいんだよな.
メソッドの方しか書かないな
最初は違和感あったけどインテリセンスのためだと思えば
処理の流れと同じ順になるからSQLに不慣れな人には分かり易いんじゃね
Linqは統計的結果を反映できないと何度言ったら ここは無職の初心者スレだから仕方がないか。
>>858 統計的結果ってなに?
ググってもそれらしいものがひっかからないんだが。
ソースくれ。
DBじゃ当たり前の技術。 OracleやSQLSeverで最適化したことないのか? 少しは勉強しろ。
とりあえず正しい用語使ってくれないと何を言ってるのか分からないよ
862 :
デフォルトの名無しさん :2011/02/16(水) 16:35:45
質問です。 ブラウザからWebサービスをGETで叩き(引数としてaaa.htmlのURL)、 サーバーサイドに置いてあるaaa.htmlをブラウザに表示せずに 印刷ダイアログを表示して印刷させることはできるでしょうか? ASPでもhtmlやajaxの処理でもC#での処理でも構いません。
ページとしてちゃんとレンダリングさせる必要があるなら webbrowserを裏で使ってレンダリングさせてレンダリングした結果を bitmapか何かで取得して印刷すればいいんでないの?
>>859 おいおい。
台形公式とか次元が増えると誤差や計算量増えるだろ。
モンテカルロ積分とか遺伝的アルゴリズムとか知らないのかよ。
事前統計結果が得られるなら普通に処理の重みづけができるだろうに。
将棋の思考アルゴリズムとか既に主流だろ。
つまりLinqに合わないことにLinqを使うとダメってことですね アホかっ!
>>865 違う。
>>859 みたいな無学、無知が何でもLinqにしようとするのが
困るって話をすると、馬鹿だからすぐ逆ギレして笑えるってことだよ。
ゆとりって煽りばかりで技術的なこと一言も言わないよな。 統計的結果なんてあらゆる分野で普通に使われる科学の基本手続きなのに、 まさか統計的結果でググって見つからないとか言うし、 自分が無知なだけなのに正しい用語使えとか言うし。 昔はクグレカスって言ったけど、ググっても自分で調べられないときてる。 基本、自分が馬鹿だと気づいてないんだよね。 しかも初心者スレで教わる立場なのになぜか偉そうにしてる。
お前はまだそれがLinqと関わってると思ってるの?
>>860 まさか、ソースだせないの?
・統計的結果がoracleでは当たり前
・linqでは統計的結果が反映できない
この2点のソース早く頂戴。
当たり前ならすぐだせるでしょう?
「勉強しろ」なんて逃げうたないでさぁ。
他所でやれ
872 :
デフォルトの名無しさん :2011/02/16(水) 17:30:26
ところで 統計的結果 ってなんだよ?統計は過去の産物を勝手に解釈したものに過ぎないだろう。
まあforeachで解決できないものはLinqにする意味がないんじゃね つかあんま突っつくなよ・・・
つまりこういう事でしょ ほんとはできないのに、「できる」とかっこつけちゃった手前、ひっこみが つかなくなってしまった。 「具体的な手順を」をいわれたけど、自分で試したわけでもないし、なにより ほんとにやってみてできないことがわかってしまったら、自分が間違っている ことが判明してしまうから、こわくてできない。 とりあえず、「自分で試せよ、簡単なんだからそのくらいできるだろ」と 言い続けることで、ごまかすことにしておく。
選挙で出口調査の結果「当選確実」になりました。 数十分後、他の人が当選確実です。 っていうのが「統計的結果」の一例でいいですか?
>>869 オプティマイザの使用する情報のことを「統計的結果」って呼ぶかなあ?
仮に呼ぶとして、linqだとそれが使えなくて、foreach だと使えるってことはないとおもうんだが・・・
878 :
デフォルトの名無しさん :2011/02/16(水) 17:57:46
他所でやってくれ Linqの使い方が蓄積されるわけでもないし C#の情報が残るわけでもない 専門板はスレたてが自由なんだし続けたい人は新しく建ててやってくれ
879 :
デフォルトの名無しさん :2011/02/16(水) 18:30:56
>>877 だよね、統計的結果なんてのは良いから、ADO.NET等ではオプティマイズが効いて、
LINQでは効かないのか?って情報が知りたいところですね
いや事実であるとしたら結構大変なことだよw
俺は初めから例外を握り潰すに絡んだ人だって気付づいてましたよ
ほとんど糖衣構文なのにね。
>>878 LINQとforeachの話だろ、立派なC#の話題じゃないか。
まじ無意味なレスだったなw
結局提起した問題自体が意味不明だったので何も結論づけられなかった。
突然ゆとりがどうとかレッテル貼りだしたから、たぶんそうだろうなとは思った。
まあLINQ to SQLに限って言えば自動生成で最適化しづらいから 例外さんの発言も意味通じるかもね 誰もLINQ to SQLなんか使ってねえし、誰もLINQ to SQLの話なんかしてねえけど
RowPostPaintとか見て自力で書く
WPFだとそういうのは得意なんだけどね
GraphicsもRowBoundsも渡してもらえるのにそんなにしんどいか?
893 :
デフォルトの名無しさん :2011/02/16(水) 19:52:19
>>892 やったこと無い人はわけわからんだろ
それにその辺のことを自力でやる人はすでにWPFやSLへ行ってるから
日本語の資料もそれほどないだろうし
894 :
デフォルトの名無しさん :2011/02/16(水) 19:59:58
まあある程度以上の修飾をするならwpfでやるべきだよね winformsは標準の物を組み合わせる程度なら強力なんだが winformsで簡単にできることがwpfで実装されていないこともあることだし
C#で左クリックを0.5秒間隔で打つのって無理ですか? CかC++じゃないと出来ませんよね
C++じゃないとできないよ(本当)
>>895 最終的にどういう結果にしたいかによるんじゃね?
決まった場所をクリックしたのを0.5秒待つのならクリックイベントひらって
待つ仕組みを入れるとかすればいいし
結局プログラムなんて見た目期待通り動けば内部の実装なんて・・・
>>893 初心者御用達のDOBON.NETにも載ってるよ
キー入力を別のプロセスに渡したいとかじゃなくて?
>>899 だからその最終的な目的がよくわからんのでなんともいえない
901 :
デフォルトの名無しさん :2011/02/16(水) 20:18:28
>>901 Silverlightで使えりゃなあ・・・
SQLite依存症だからないなあ
ダウンロード サイズ : 913 KB - 5.7 MB* こんな小さかったっけ 昔20MBくらいあった気がする
905 :
デフォルトの名無しさん :2011/02/16(水) 20:52:26
訂正 >SQL Server Compact 4.0 は再配布の使用許諾契約書の下で無償で再配布でき、SQL Server Compact 4.0 を再配布するアプリケーション開発者は、SQL Server Compact 再配布サイトに登録することもできます。 何処かに「完全無償」って情報見覚えがあったが、最終的には3.5と同じライセンスになったみたいですね。見間違いだったかも知れませんが
マウスの左クリックを0.5秒間隔で打つだけです
>>895 さんありがとうございます
uwscとかAHKなどのマウスで出来るようなものはC#では出来ないのですね
BOT作りご苦労様です。
>>907 そうか、DiredtInputには渡せないのか・・・ぐぬぬ
ドイラバ書くしかないのか
土井lover?
ふいんき(←なぜか変換できない) ドイラバ(←なぜか変換されてる)
>>907 ぼくへのレスでしたらBOT作成が目的ではないです
複数管理しているWEBサーバの手動CRONをブラウザでボタンを押すだけで動かせるのですが自動化したいのです。
セキュリティとかは気にせずただ左クリックを自動で押せればいいんですが・・・
C#で出来ないと知ったのであきらめます
それはWebBrowserかなんかでやれ
WebBrowserコンポーネントだとナビゲート後にDOMをみていけば表示してるHP上のボタンとか フォームの入力先とか全部いじれなかったっけ?
C#全然関係ないけど俺だったらgmスクリプトでも書くわ
というかあれかボタンを押した際にサーバーへ送るhttpリクエストを そのまま送ればいいだけか
それが最善だけどjs使ってるかもしれんし
Ruby>Python>C#
ちょっと失礼。てすと
抽象クラスがどこで実装されてるか、 あるいはされてないか調べるにはどうしたら良いのでしょうか
すべての参照を検索
フレームワーク4.0を使って開発されているソフトってほとんどないですよね みんな2.0ばっかりです 4.0には何か不具合があったりして避けているのでしょうか?
単に普及度の問題
4.0はグラフが標準でついたくらいしか、実感無いなぁ てかXPで使うことも考えたら2.0で十分だし
WPFなら4.0選ぶ価値あり
タスク並列ライブラリとかMEFとか MEFなんか目立たないけど一応標準のDIコンテナということで画期的
並列って言っても上での例でもほとんど高速化しなかったじゃん。 結局、昔と同じで高速化するには、CPUレベルの知識ないと無理というオチだったし。
Formの起動時の設定にあるStartPositionについて質問です それぞれためしてみても違いがよくわからないのですが Manualは自分が指定した位置に表示させ、CenterScreenは画面中央というのはわかるのですけど ユーザーが窓を移動し、プログラムを終了して次回起動後には前回起動時の位置を記憶する方法をやりたいのですがどうやればいいのでしょうか どうか教えてください、お願いいたします。
>>927 パフォーマンスとか気にするんだったら正しい知識を持ってきちんと測定して調整するのは当たり前。
MSDNにも並列関係のドキュメントにはしつこいくらいに速くなるとは限らない測定しろと書いてある。
実際上でも適切な粒度で並列化できてれば速くなってるだろ。
>>928 ウインドウ 位置 保存 C#
931 :
928 :2011/02/17(木) 17:08:43
大変申し訳ありませんでした イベントハンダラにFormClosingを追加し忘れていました 無事やろうとしていた事ができました、ありがとうございます!
System.Windows.Forms.WebBrowserで WebBrowser.Url = new Uri(file:///c:/test/test.htm#a001"); @ のように指定してスクロールを制御したいのですが、 test.htmが変更されたときに、改めて@を呼び出してもスクロールしません (初回読込時は意図したとおりにスクロールします) WebBrowser.Refresh(wb.Refresh(WebBrowserRefreshOption.Completely); を呼び出しても同じでした test.htmが変更されるたびにファイル名を変更して WebBrowser.Url = new Uri(file:///c:/test/test003.htm#a001"); 等にすれば意図したとおりの位置にスクロールするのですが、 もっとスマートなやり方はないでしょうか?
ツリービューでツリーノードのtagを検索したいのですが 高速に検索する方法はないでしょうか? 現在はノードを全部なめてtagを比較しています。 ノードのtagは重複していません。 treeview1.selectSingleNode(tag="hoge") とかできるといいのですが・・・
追加する時にハッシュテーブルに入れとけよ
単にフォームのデザインとして、グループボックスのように四角い枠で囲って表題を付けたいんだけど、 グループボックス使っても問題ないのかね?グループボックスの機能は全然必要ないんだけど。 それともピクチャボックスとラベルでやるべき?
>>932 たぶんキャッシュ機能の関連でそうなるんだと思うんだけど
WebBrowserの制御の問題なのか以前ここかもう一つで見たんだけど
httpヘッダーの話なのかよくわからないのでそっち方面では対策してあられないけど
今思いついた即興としては
1.変更したtest.htmlを常に動的に新しいWebBrowserコンポーネントを作成して
コンテナへ貼り付けてBringToFrontするとか。前のWebBrowserは入れ替えた後破棄
2.ナビゲート後のDOMを解析してジャンプしたい場所を調べて自分で移動する
サンプルはここ
http://cs2ch.blog123.fc2.com/blog-entry-83.html
OpenFileDialogで開かれたファイルはどのように扱われているのですか?
C#初めてネットワーク初めてでチャットアプリ作って見ようかと思ってるんだけど 参考になりそうな所ある?
>>936 ,938
ありがとうございます。御飯食べてから詳しく見てみます
質問です シングルトンパターンなんだけど、同じ実装のインスタンスが複数欲しい時って public sealed class Hoge { private static Hoge _foo = new Hoge(); public static Hoge Foo { get { return _foo; } } private static Hoge _bar = new Hoge(); public static Hoge Bar { get { return _bar; } } private static Hoge _baz = new Hoge(); public static Hoge Baz { get { return _baz; } } public void Piyo() { } } みたいにしちゃっても良いんでしょうか
パターンなんて方便だから好きなようにやればいいよ
ただのグローバル変数だな それが悪いとは言わないが
>>940 ありがとうございます
中身が"F0 F1 F2 F3 F4 F5 F6 F7"というファイルを開いたのですが
これをフォームアプリケーションの各ComboBoxに"240""241"などと
表示するにはどのようにすればすればよいのでしょうか?
947 :
デフォルトの名無しさん :2011/02/18(金) 01:42:56
最近文字を数字に・・・とかサンプルぽいの見たのにlinq論議のゴミログがうぜー
外部のCUIアプリを実行する時に、外部ウインドウを開かずに フォームのコントロール内にコンソール画面の内容を表示させる事はできますか?
>>950 あ、なんとなくできそうです。有り難うございます。
C# .NET Framework v3.5 の言語仕様がほしいんだけれど、見つけられない。 C# 言語仕様は、次の場所から Microsoft Word 形式で入手できます。 ●MSDN オンラインの Visual C# Developer Center なんていうところで引っかかってここから先がわからん。URLくれくれ。
1つのkeyに複数のvalueを収められるDictionaryクラスってありませんか? やっぱりDictionary<string, List<string>>とかにするのが妥当ですか?
妥当です
クラスを2次元配列で宣言し、全てコンストラクタで初期化したい場合、 どうやって書くのが一般的でしょうか? class Point{ ・・・ } main() { Point temp = new[2, 2]; // ←全部要素メモリ確保してコンストラクタで初期化したい }
取り敢えず初心者は二次元配列使うのやめろよ どうしても二次元配列使いたくなったら配列の配列使え あと配列の領域を確保するのとオブジェクトの領域を確保するのとは別の行為だから 普通に別々に書け
>>956 for (int x = 0; x < temp.GetLength(0); x++)
{
for (int y = 0; y < temp.GetLength(1); y++9
{
temp[x, y] = new Point();
}
}
こういうことと違うの?
1次元(要素3つ)だったらこう書けますよね。 POINT [] _temp = Enumerable.Range(0, 2).Select(_ => new POINT()).ToArray(); これを多次元にする場合どういう書き方になります?
>> 958
そう、それなんですけど、
>>959 を使ったような簡略した書き方は無いのかなぁと。
2次元の場合はまだいいんですが、次元数が増えるとどういう書き方が一般的なんでしょうか?
多次元配列は一切使わないのが一般的なんです 嫌味じゃなくてマジで
配列の配列(Point[][])なら Enumerable.Range(0, 2).Select(_=>Enumerable.Range(0, 2).Select(_=>new Point())) で作れる 多次元配列ははっきり言って見放されてる。使いたいならCだと思って割り切って使え。 LINQとかC#らしい機能が使いたいなら多次元配列は捨てろ。
>>962 なるほど、、、ご回答ありがとうございました。
多次元配列を捨てる理由っていうのは、LINQが使いにくくなるからとか
そういう理由からなんでしょうか?
> Enumerable.Range(0, 2).Select(_=>Enumerable.Range(0, 2).Select(_=>new Point())) アンダースコアで使わない変数を表現するの初めて見たんだけど流行ってるの?
どうしても多次元配列でなければっていう用途が殆ど無いからじゃね? 多次元配列のためにLinqの構文乱されても割りに合わない
>>964 正直C#を使い始めて日が浅いので、よく分かりません。
配列の初期化をするときに、ループで書いていたら、こういう方法があるって
教えてくれた人が使ってたのがアンダースコアだったのでそのまま使ってます。
>>965 なるほど、確かにLINQがすごく使いにくいなぁとは思ってました。
>>954 Lookup<TKey, TElement>
ただしEnumerable.ToLookupでしか作れず読み取り専用
>>964 流行ってるかは知らんけど
"x"よりも意味がないとコードで示すには"_"は適当じゃないか?
>>968 その変数名は perl 出身の奴が
使いそうだな。
意味がないことをしめしたいなら
foo,bar が順当じゃないかな。
まあ、なんでもいいじゃんと
いう意見もあるだろうが・・・
メタ構文変数っていうのは、名前には意味がないけどそこに何かが存在することには意味があることを示すもので この場合は変数の存在自体に意味がないわけだからfoo,barは不適切でしょ
>>948 ありがとうございます
テキストファイルでなくバイナリファイルなのですが
どうすればいいでしょうか
>>969 関数型言語界隈の習慣じゃなかったっけ?
973 :
969 :2011/02/18(金) 19:44:57
>>970 ソース読まずにレスしてたよ
すまんこ
読んでみたらそのとうりです
>>964 結構メジャーだよ。
F#が"_"が値を捨てるという意味になってるので、.NETファミリー的には良い感じ。
Scalaだと.Select(_.hoge)みたいに書ける(=>を省ける)ので、
_をxの代用にする、という流儀の人もいるけど、そちらのほうがマイナーっぽい。
Linqをループ代わりに使うのはどうかと思うけどな
またゆとりが暴れてんの?
まあWhereかSelect単独でforeachに突っ込むのはどうかと思う
初歩的な質問で申し訳ないのですが VS2010でコンパイルしたいのですが発行でやるとsetup.exeのインストーラーでしかコンパイルできません。 アプリ単体のみでコンパイルしたいのですがどうやればいいのでしょうか? ご教示お願いいたします。
>>978 特に設定弄らずにビルドしたらReleaseにできてないか?
>>980 Releaseにあるものでよかったんですね
ありがとうございます、スレ汚し申し訳ありませんでした。
>>977 リスト内包表記的なやり方で、別によくあることだと思うけど
>>856 初期化関数をジェネリックスでも使って適当な次元分作っておくのが簡単かもね
誰も例外さんをキャッチしないんだな・・・
>>959 おすすめはしないが、無理やりやりたいなら自前で拡張メソッドを作る(笑
static class ArrayUtilExtensions {
public static T[,] ToArray2<T>(this IEnumerable<T> src1, IEnumerable<T> src2) {
IList<T> lst1 = src1 as IList<T>;
IList<T> lst2 = src2 as IList<T>;
if (lst1 == null) lst1 = new List<T>(src1);
if (lst2 == null) lst2 = new List<T>(src2);
var ln = Math.Max(lst1.Count, lst2.Count);
var t = new T[ln, 2];
for (var i = 0; i < ln; i++) {
if (lst1.Count > i) t[i, 0] = lst1[i];
if (lst2.Count > i) t[i, 1] = lst2[i];
}
return t;
}
}
Point [,] _temp = Enumerable.Range(0, 2).Select(_ => new Point()).ToArray2(Enumerable.Range(0, 2).Select(_ => new Point()));
すっきりしました。ありがとうございます。
そこまでしてLinq使わなくてもいいのにw
temp.Init(2, 2)って感じで済むものがなんでそんな長くなってんだよw
linqは宗教
イベントに+=されたデリゲートを一発で全部消せる関数が欲しいのだが こういう事考えてる時点でなんか間違ってるような気もする お前らは考えたこと無いのか?
自分のクラスのイベントならnull代入するだけ 外から全部消したいなら、考え方が間違っている
Zip圧縮って.NETの標準ライブラリでサポートされてたっけ?
System.IO.Compression.GZipStream
System.IO.Packaging.ZipPackage
これらは複数ファイルの圧縮に対応していない
http://dotnetzip.codeplex.com/ マイクロソフト が公開している DotNetZip。
こっち使うといい。ライセンス的にも。
あれ、それはマイクロソフトの人だっけ?
C#言語仕様はexpressな人のには付いてこないのね。残念。
またlinq厨来てんの?
例外さんは呼んでないよ
キチガイ常駐してんね、ここ。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。