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

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

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

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

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

ふらっとC#,C♯,C#(初心者用) Part56
http://pc12.2ch.net/test/read.cgi/tech/1267348401/


関連スレ
C#, C♯, C#相談室 Part55(実質56)
http://pc12.2ch.net/test/read.cgi/tech/1260111240/1

VB.NET質問スレ(Part33)
http://pc12.2ch.net/test/read.cgi/tech/1263738929/1

C++/CLI part3
http://pc12.2ch.net/test/read.cgi/tech/1206447234/1
0153デフォルトの名無しさん2010/03/21(日) 13:27:50
>>151
なるほど
しかし、すげぇな・・・
4.0いろいろ贅沢な機能付きすぎだろ
0154デフォルトの名無しさん2010/03/21(日) 13:29:06
>>152
自己紹介乙
0155デフォルトの名無しさん2010/03/21(日) 13:32:13
並列ライブラリのforを本気で使おうと思ったらやたらと引数が多くなる。
1〜10までを足すだけ。
int sum = 0;
Parallel.For(1, 10+1, option, () => 0,
 (i, parallelLoopState, s) => s + i,
 s => Interlocked.Add(ref sum, s) );
Console.WriteLine("sum = {0}", sum);
0156デフォルトの名無しさん2010/03/21(日) 13:34:33
そんなの使わずマルチスレッドつかえよ
Parallel.Forなんて大して使えん
ループ内がそれそれ独立していなければ無理
0157デフォルトの名無しさん2010/03/21(日) 13:37:16
((;゚Д゚)) 決めつけ無理……………!!!
0158デフォルトの名無しさん2010/03/21(日) 13:37:34
結構使いにくそうだ…
でも・・・実装したからには何か目的が・・・・メリットがあるんだよな?
0159デフォルトの名無しさん2010/03/21(日) 13:38:35
Parallelライブラリはコア数に合わせて並列数を調整してくれるところにある。
自分でスレッド作って調整するのは大変だぞ?
0160デフォルトの名無しさん2010/03/21(日) 13:39:16
そうだね。
0161デフォルトの名無しさん2010/03/21(日) 13:42:37
うん
0162デフォルトの名無しさん2010/03/21(日) 13:50:06
>>155
そんな並列の意味が一切無い例出してどうすんのさ
0163デフォルトの名無しさん2010/03/21(日) 13:52:50
>>162
お前に言われる筋合いはないから
0164デフォルトの名無しさん2010/03/21(日) 13:53:04
もうちょっとMPIの様に透過的にだな・・
0165デフォルトの名無しさん2010/03/21(日) 14:12:13
【春祭り 】また割れ厨のスクショと個人情報が晒されてるぞ避難所5
http://jbbs.livedoor.jp/bbs/read.cgi/news/4988/1269124859/

ICO - 国際著作権機構
ttp://warezer.net/search/user/3201

割れてる人は気おつけて
0166デフォルトの名無しさん2010/03/21(日) 14:42:40
>>164
パラレルライブラリはOpenMP型で、MPI型のはAxum。
ttp://msdn.microsoft.com/en-us/devlabs/dd795202.aspx
まだ研究段階っぽい。最終的にはC#に成果を吸収という流れだろうか。
0167デフォルトの名無しさん2010/03/21(日) 15:21:20
>>147
ちゃんと Join する。
スレッドいっぱいたつけど、全部のタスクが終わるまで待ってくれる。

>>148
同時に C++ 向けにも並列処理ライブラリが追加されるけどね、VS 2010。
C++ の時代、分野次第だなぁ。
10年は前に終わってるとこもあるし、あと10年は使わなきゃいけないとこあるし。

>>155
そんな処理は Parallel LINQ の方がいいな。
あと、集計部分(+= するとこ)は並列化してもおいしくない。

>>164
pragma だらけってのは、標準化がどうこう言われてしまう C++ の苦肉の策だろ。
0168デフォルトの名無しさん2010/03/21(日) 16:08:18
>>167
ほほぅ
キッチリ便利にはやってくれそうだなぁ…
3つの画像を同時に処理して終わったらその結果を判定して処理
とかやってるから単純なマルチスレッドでやるよりイイかもしれねぇ。。。
ちょっと期待したい
0169デフォルトの名無しさん2010/03/21(日) 16:34:39
for文の前に属性書けたら楽そうだけど
[Parallel 4]
for(){
}
まぁ文法的に無理ぽ
0170デフォルトの名無しさん2010/03/21(日) 16:38:36
ParallelOptionsのMaxDegreeOfParallelismが必要だね。
1コアの環境でoptionなしで使うとスレッドは使わずにメインスレッドで処理してしまう。

ParallelOptions option = new ParallelOptions() { MaxDegreeOfParallelism = 4 };
Parallel.Invoke(option, () => Worker("aaa"), () => Worker("bbb"), () => Worker("ccc"), () => Worker("ddd"));
0171デフォルトの名無しさん2010/03/21(日) 16:48:43
並列処理とか……
ここは本当に初心者スレなのか?w
0172デフォルトの名無しさん2010/03/21(日) 16:50:44
いいんじゃね?
0173デフォルトの名無しさん2010/03/21(日) 16:56:30
まあ、Parallel.ForはちゃんとJoinしてくれるの?とか、結構初心者らしい質問な気もするが。
0174デフォルトの名無しさん2010/03/21(日) 20:11:36
並列処理といってもこのていどは初級レベルだろう
まあ普通は初心者は並列処理を勉強しないものだけど、
勉強してみれば、このくらいは理解できるレベルだと思う
0175デフォルトの名無しさん2010/03/21(日) 20:36:37
だね
0176デフォルトの名無しさん2010/03/21(日) 20:39:48
並列処理の使い方を理解できるというより、
並列処理の必要性を理解する、ことになるのでしょうね。

必要と思えれば頑張れる、そういうもんでしょ、言語習得ってさ。
0177デフォルトの名無しさん2010/03/21(日) 20:41:33
そして別スレッドからGUIコントロールにアクセスして怒られるんですね
0178デフォルトの名無しさん2010/03/21(日) 20:48:12
もう・・・ぷんぷんっ
0179デフォルトの名無しさん2010/03/21(日) 20:58:05
backgroundWorkerは自由度が低いから使いづらい
0180デフォルトの名無しさん2010/03/21(日) 21:05:14
いつまでそのネタ引っ張るつもりだ
0181デフォルトの名無しさん2010/03/21(日) 21:16:46
>>179
初心者ではなく低級者の発言ですね
0182デフォルトの名無しさん2010/03/21(日) 23:34:27
>>170
何の意味があるのそれ?
0183デフォルトの名無しさん2010/03/22(月) 00:34:37
質問します。
DataGridViewで特定のCellから値を参照したいんですけど
方法がわかりません。お願いします。
0184デフォルトの名無しさん2010/03/22(月) 00:36:04
DatagridView.Rows(0).Cells(カラム名).Value

だけじゃね?
さすがにそれはヘルプ見てみようぜ
それとも何か勘違いしてるかな?
0185デフォルトの名無しさん2010/03/22(月) 01:08:49
メソッドに戻り値つけないとどういう処理しているかわからなくなるね
とくにグローバル変数をどうにかしているときとか
0186デフォルトの名無しさん2010/03/22(月) 01:14:00
C#スレでグローバル変数とな!?
シングルトンのクラスに詰め込むの?
0187デフォルトの名無しさん2010/03/22(月) 01:15:17
フィールド変数だらう
0188デフォルトの名無しさん2010/03/22(月) 03:31:48
SlimDX/Direct3Dで描画してるウィンドウの中にWPFでコントロールを描画して使いたいんですが、
いいサンプルはありませんでしょうか。
0189デフォルトの名無しさん2010/03/22(月) 03:59:50
このスレレベル高すぎて何いってるのか全然わからないですがさらに初心者向けのスレってないんですか?
FF11でツールを作ろうと思ってます。
0190デフォルトの名無しさん2010/03/22(月) 04:12:21
今のFF11ってツールまで作れるんだな…。
0191デフォルトの名無しさん2010/03/22(月) 07:09:13
そういやFF11ってなんか言語っぽいもんな
0xFF11みたいな
0192デフォルトの名無しさん2010/03/22(月) 09:49:37
ボットでも作りたいのかね
0193デフォルトの名無しさん2010/03/22(月) 13:39:33
string型の配列aがnullでも空でもないことを判定するプログラムを考えています。

if ( a != null )
{
  if ( a.Length > 0 )
  {
    (処理)
  }
}

これ以上にスマートな記述方法は存在しますか?
0194デフォルトの名無しさん2010/03/22(月) 13:41:26
>>193
string.IsNullEmpty()
0195デフォルトの名無しさん2010/03/22(月) 13:43:39
それ、配列にも使えるのけ?
0196デフォルトの名無しさん2010/03/22(月) 13:45:57
無理だな
ネストが深くなるのが嫌だから&&でつなぐ
01971932010/03/22(月) 13:49:55
>>194-195
そうなんです。String.IsNullEmptyOrEmptyは文字列には使えますが文字列の配列には使えませんでして・・

>>196
たしかにネストが深くなるのはイヤなんですが、もし&&でつないでしまうとnullだった場合に
a.Legth のところで例外が発生してしまうんです。

だから泣く泣くネストを深くして対処しました。
0198デフォルトの名無しさん2010/03/22(月) 13:52:31
ショートサーキットを使うように、|| でつなげばいいだろ。
0199デフォルトの名無しさん2010/03/22(月) 13:55:07
& じゃなくて && だよ?
0200デフォルトの名無しさん2010/03/22(月) 13:58:02
&&で繋ぐと、結果が偽になった時点でそれ以降は評価されない
0201デフォルトの名無しさん2010/03/22(月) 14:03:15
>>200
じゃあ&&でいいじゃないか。変数aがnullなら、他のことをやっても仕方がない。
0202デフォルトの名無しさん2010/03/22(月) 14:07:00
try
{
  if ( a.Length > 0 )
  {
    (処理)
  }
}
catch(ぬるぽ)
{
}

・・・違うの?
0203デフォルトの名無しさん2010/03/22(月) 14:09:57
>>202
本気で言ってるの?
ぬるぽをキャッチしようとする奴始めて見た
02041932010/03/22(月) 14:10:15
>>200
> &&で繋ぐと、結果が偽になった時点でそれ以降は評価されない

判定式の順番は重要ですか?
たとえば a がnullのとき

if ( a.Length > 0 && a != null )
{
    (処理)
}

とやってしまうと最初の a.Length > 0 で例外が発生したりしませんか?
0205デフォルトの名無しさん2010/03/22(月) 14:10:21
フォルダパスからフォルダ名を取得するのってどうすればいいのでしょうか
GetDirectoryNameはファイルパスからフォルダパスを求めるもんですし・・・
0206デフォルトの名無しさん2010/03/22(月) 14:10:55
それはないわ。
0207デフォルトの名無しさん2010/03/22(月) 14:11:38
>>204
左から

>>205
DirectoryInfo.Name
0208デフォルトの名無しさん2010/03/22(月) 14:23:47
>>203
お前の経験が浅いのではw

>>204
&&の前後が逆
0209デフォルトの名無しさん2010/03/22(月) 14:25:22
>>207
ありがとうございます!
0210デフォルトの名無しさん2010/03/22(月) 14:26:17
null判定を例外で処理しようとするのは初心者
0211デフォルトの名無しさん2010/03/22(月) 14:28:27
try
{
}
catch(Exception e)
{
}
なんて書いてるソースはよく見るね
0212デフォルトの名無しさん2010/03/22(月) 14:29:34
初心者スレだから意見を聞きたいなら間違ってはいないが
回答としては無い
0213デフォルトの名無しさん2010/03/22(月) 14:30:50
>>211
テストソースとしてならいいんじゃない?
それで納品したら次回はないと思うけど
0214デフォルトの名無しさん2010/03/22(月) 14:31:09
いろいろ作り込んだり、ぐちゃぐちゃになったりして、
新規プロジェクト作成したくなる衝動に駆られるよね
この衝動に名前つけようぜ
0215デフォルトの名無しさん2010/03/22(月) 14:31:10
>>211
まぁそれ自体が間違ってるわけじゃないけど
わかってない臭はするな
0216デフォルトの名無しさん2010/03/22(月) 14:32:05
>>214
現実逃避
0217デフォルトの名無しさん2010/03/22(月) 14:42:19
別にExceptionで受けてもいいだろ
0218デフォルトの名無しさん2010/03/22(月) 14:44:43
>>217
どんなException出しても同じ対応するの?
0219デフォルトの名無しさん2010/03/22(月) 14:48:29
>>193
var notNullEmptyAry = ary.Where(s => !string.IsNullOrEmpty(s));
0220デフォルトの名無しさん2010/03/22(月) 14:49:49
>>218
後処理がいるのは別にきまってるだろw
0221デフォルトの名無しさん2010/03/22(月) 14:51:52
>>219
配列の各要素にnull/空文字列が含まれているかどうかなんて話、誰もしてないぞ
0222デフォルトの名無しさん2010/03/22(月) 14:52:22
そもそも>>193は、正常な処理をif文のブロック内に書いてる時点で
ソースが汚いと思う
0223デフォルトの名無しさん2010/03/22(月) 15:01:59
どっちが正常なのかは文脈次第じゃないか
0224デフォルトの名無しさん2010/03/22(月) 15:02:22
if(a==null && a.Length == 0) return;

処理
0225デフォルトの名無しさん2010/03/22(月) 15:05:44
|| が正解
0226デフォルトの名無しさん2010/03/22(月) 15:05:52
>>223
さすがに配列のオブジェクトがnullで正常処理とか・・・
そういうのが正常だと言える例あるの?
0227デフォルトの名無しさん2010/03/22(月) 15:07:58
>>220
致命的な例外もわざわざCatchするんですね
かっこいい!
0228デフォルトの名無しさん2010/03/22(月) 15:09:20
>>226
ローカル変数ならあると思うけど
0229デフォルトの名無しさん2010/03/22(月) 15:22:37
初心者からかって遊んでるやつしかいないのかここは
0230デフォルトの名無しさん2010/03/22(月) 15:24:22
外部からデータ貰って配列に入れるときとか、0件だと配列そのものができてない
つまりnullになることあるな。もちろん0件でも正常
0231デフォルトの名無しさん2010/03/22(月) 15:29:32
try-catch はコストが大きいから
>>193のような条件判別では普通>>202のようにはしない
0232デフォルトの名無しさん2010/03/22(月) 15:37:59
>>231
他の言語ならそうだがC#なら正解
エラー処理のために条件分岐やるのはVB6.0で止まっている奴

条件分岐は何かの処理をさせたいから使うわけでエラー処理のためにするべきではない
つまりこれだけでいい
try
{
//何かの処理
}
catch{}
0233デフォルトの名無しさん2010/03/22(月) 15:39:56
>>231
一般的にtry-catch構文はオーバーヘッドが大きいといわれているけど、
C#(clr)でも同じことが言えるの?
なにかこの辺について言及したいい記事はありませんかね。
02341932010/03/22(月) 15:41:49
>>207
>>208
どうもです(´・ω・`)ノ

&&で結ばれた判定式が左から順番に判定されて、条件に合致した時点で残りの判定式の判別は
破棄されるとは知りませんでした。

つまり>>193は

if ( a != null && a.Length > 0 )
{
    (処理)
}

と簡潔に記述できるわけですね。
02351932010/03/22(月) 15:42:32
>>222
> そもそも>>193は、正常な処理をif文のブロック内に書いてる時点で
> ソースが汚いと思う

:(;゙゚'ω゚'):!

その件に関しましては常々疑問に思っておりました。
メインとなる処理はif文の中で記述するべきか、外で記述するべきかに関してです。

メインとなる処理はif文の外に書くべきでしたら>>193は

if ( a == null || a.Length == 0 )
{
  return false;
}

(処理)

とするべきなんでしょうか?
0236デフォルトの名無しさん2010/03/22(月) 15:43:39
catchした時は重くなるけど通常は関係ないんじゃないの
0237デフォルトの名無しさん2010/03/22(月) 15:43:53
>>234
そういうことはC#ではやらない
0238デフォルトの名無しさん2010/03/22(月) 15:44:25
>>230
0件とnullは違う意味で使うだろ、常識的に考えて
0239デフォルトの名無しさん2010/03/22(月) 15:44:27
>>235
>>224
0240デフォルトの名無しさん2010/03/22(月) 15:45:38
>>235
プログラムはケツまで流すものだとか考えてる人なら
正常処理だけif文に入れる

ようは好きにしろ
0241デフォルトの名無しさん2010/03/22(月) 15:47:20
>>230
そもそもDBの場合
まず件数引っ張ってからデータ取得しない?
0242デフォルトの名無しさん2010/03/22(月) 15:48:28
条件式のネストを避ける書き方って一般的に何ていうんだっけ?
0243デフォルトの名無しさん2010/03/22(月) 15:49:16
>>241
件数そのものを先に欲しい場合はそうするかもしれないが、
普通はカーソル機能を使って最初の1行目だけをもらう。
全部引っ張るようなメモリ食うようなことは避ける。
0244デフォルトの名無しさん2010/03/22(月) 15:52:12
rowsよりcountのほうが軽いだろ
0245デフォルトの名無しさん2010/03/22(月) 15:56:43
>>235
delegate bool EmptyDelegate(string[] s);

    EmptyDelegate emp=IsEmp;

    if(emp(s))
    {
      (処理)
    }


  private bool IsEmp(int n)
  {
   if ( a == null || a.Length > 0 )
      return false;
  }
}
0246デフォルトの名無しさん2010/03/22(月) 16:00:15
>>245
普通のメソッドでなくデリゲートを使うのはなんで?
0247デフォルトの名無しさん2010/03/22(月) 16:11:07
全角変換するなら文頭のスペースだけにしろよ
0248デフォルトの名無しさん2010/03/22(月) 16:13:10
>>247
おまえがやれ
0249デフォルトの名無しさん2010/03/22(月) 16:14:11
カッコの中の最初と最後を空けるなら全部に適用しろ
算術記号も同様に
02501932010/03/22(月) 16:15:01
>>237
>>239
>>240
どうもです。>>224さんのようにします(´・ω・`)ノシ
0251デフォルトの名無しさん2010/03/22(月) 16:18:22
>>249
おまえがやれ
0252デフォルトの名無しさん2010/03/22(月) 16:22:54
できないのか・・・
■ このスレッドは過去ログ倉庫に格納されています