X



ふらっと C#,C♯,C#(初心者用) Part138
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 369a-msj4)
垢版 |
2018/06/05(火) 19:32:42.28ID:70UTtyrn0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part137
https://mevius.5ch.net/test/read.cgi/tech/1523004019/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0670デフォルトの名無しさん (アウアウエー Sa52-4Kub)
垢版 |
2018/07/17(火) 12:10:59.29ID:G5IVIkIla
>>667
食べるが側が自分だけじゃないなら>>663の言うととおりだめなんでしょう

その場合もコレクションに出し入れがあったことを検出する簡単な方法があれば
スキャンしている間に出し入れが行われなくなるまでリトライすることで実現できそうだけど、
そういう簡単な方法はないっぽい。

もっとも、仮に実現できたところで排他制御できないなら検査の後の状態は保証できないわけで、
どんだけ意味があるのか疑問ではある
0671デフォルトの名無しさん (スップ Sd0a-Y7YF)
垢版 |
2018/07/17(火) 17:47:09.52ID:bja0VNMZd
>>663
>>666
>>667
レスくれた方ありがとう
やりたいこととしてはcountとpeekを駆使することでなんとか実現できそうだという結論になりました
キューに対してpeekすると、じゃあ今度はいつ削除するの?とかなりそうだけどもpeekでなんとかします
0673デフォルトの名無しさん (ワッチョイ 66c9-LQig)
垢版 |
2018/07/17(火) 19:14:26.70ID:LTVxWI1Y0
BlockingCollectionはコレクションの要素が取れるまでブロックし続けるから、peekとか削除とか考えずに済むから楽なのにな
まあ>>670の通り他と連動してコレクションにとどめておく必要があるんだろうけどさ
0679デフォルトの名無しさん (ブーイモ MMc9-FUtQ)
垢版 |
2018/07/17(火) 22:19:09.18ID:8FZ8qVPxM
〜の作り方的な本は、言語が分かってない段階だと本当に手順を追うだけになってしまって何一つ頭に残らないからお勧めできない
まあ頭使わずに何かやってる気にはなれるから勉強が苦手でどうしてもモチベーションが続かない人にはいいのかもね
0680デフォルトの名無しさん (ワッチョイ 66e8-LQig)
垢版 |
2018/07/17(火) 22:28:45.89ID:A75xOI8y0
おらにも良書おしえい
0682デフォルトの名無しさん (ワッチョイ 5d1e-EBXJ)
垢版 |
2018/07/17(火) 22:58:06.26ID:s7VdXjPi0
一番いいのは作りたいアプリがあってそれを作る。アプリ作りを通して色々考えることがでてきだろう。最初は一人よがりなプログラムになるかもしれんがそれが第一歩だな。
0684デフォルトの名無しさん (ワッチョイ 66e8-LQig)
垢版 |
2018/07/17(火) 23:27:52.79ID:A75xOI8y0
ここまで0冊
0685デフォルトの名無しさん (ワッチョイ 66e8-LQig)
垢版 |
2018/07/17(火) 23:32:23.19ID:A75xOI8y0
>>672
まずは独習でいいと思う
これで基本機能が理解できたら
Linqや非同期、マルチコア専門の教本もあるから気になったら読めばいい
これらは重要だし独習が終わればよく理解できると思う

実践で役立つ〜はちょっとわからない
0688デフォルトの名無しさん (ワッチョイ 2a7f-L1xz)
垢版 |
2018/07/17(火) 23:47:31.06ID:WCI1fetR0
>>686
昔からあるぞ。
最近のだと、More Effective C# 6.0/7.0が既に出てて、Effective C# 6.0/7.0ももうすぐ出る予定。
0691デフォルトの名無しさん (ワッチョイ 6681-+P7Y)
垢版 |
2018/07/18(水) 02:04:04.67ID:ohWLsVDp0
>>688
やっぱあるよね
感覚的にはeffectiveに書いてある内容がとりあえず理解できて実践しだしたら中級者なイメージ
上級者っていうとmvpクラスと同等の知識レベルとかになるのかなぁ
mvpもいろいろあって基準としては曖昧かもしれんが
0692デフォルトの名無しさん (ワッチョイ 6681-+P7Y)
垢版 |
2018/07/18(水) 02:09:13.63ID:ohWLsVDp0
1000行なんて時には1日で書く程度のアプリ10本作ったところで…
だからって10万行のアプリなんて、それほんとに10万行必要だったの?プラグイン1個居れたら数万行不要になるんじゃない?って気もする
そもそも行数で語る時点でおかしい訳だけど
プログラム未経験は別として経験者なら一言語の中級者になるのに3年もかけてたら上級者になる頃にはその言語消えてんじゃね?って思う
0693デフォルトの名無しさん (スップ Sdea-Y7YF)
垢版 |
2018/07/18(水) 07:35:29.71ID:604NWUGLd
一時的にスリープのように任意のスレッドの処理を停止させて
別スレッドがある処理をしたら停止スレッドが動き始めるような形を作りたいです
waitforsingleobject以外に実現方法ありますか
0695デフォルトの名無しさん (スップ Sdea-Y7YF)
垢版 |
2018/07/18(水) 07:40:12.26ID:604NWUGLd
>>694
Aスレッド、Bスレッドがあって
Aスレッドはたまっているリクエストを非同期で投げ続けています
リクエストは一つずつ送らないといけない制約があるため
その応答が来るまでAスレッドを停止させたいです
応答というのがBスレッドの処理です
0698デフォルトの名無しさん (ササクッテロル Spbd-p+0f)
垢版 |
2018/07/18(水) 10:14:35.95ID:IWAo5nUlp
じゃあセマホ使えよ。
0700デフォルトの名無しさん (ワッチョイ 8954-nsuX)
垢版 |
2018/07/18(水) 13:53:18.95ID:imuZ+lX20
会社クラスを作りインナークラスで部署クラスを作ったのですが、インナークラスの使い方として間違っていないでしょうか

なんかMS意図と違う使い方をしてる気がしておりまして
0703デフォルトの名無しさん (ワッチョイ 6dbb-Qvid)
垢版 |
2018/07/18(水) 19:00:56.71ID:9N0yBnKk0
listviewを使って画像をドラッグした位置に挿入できるようなものを作りましたが、サムネイル表示(ViewプロパティをView.LargeIconに設定)だと移動後に一番後ろに来てしまいます
、どうすれば自由に画像を入れ替えれるのでしょうか?
0704デフォルトの名無しさん (ワッチョイ 1181-L1xz)
垢版 |
2018/07/18(水) 19:50:12.60ID:yFSY1wbO0
>>692
>1000行なんて時には1日で書く程度のアプリ10本作ったところで…

これも内容によるけどな
10本作る間に誰に見られても恥ずかしくないコードが書けるようになれば…
0711デフォルトの名無しさん (アウアウカー Sa55-eTBu)
垢版 |
2018/07/18(水) 23:09:23.95ID:/cNHsX3ta
コントロールそこそこおいたまともなアプリなら1000行じゃおさまらんやろ
0716デフォルトの名無しさん (ワッチョイ ffe8-H0hI)
垢版 |
2018/07/19(木) 00:18:15.44ID:mgU85F4C0
varってスコープが決まってたりよく使うもんだと思ってるんだけど
違うん?

あとコンパイル時に推論されるから実行速度には影響ないって考えていいの?
0718デフォルトの名無しさん (ワッチョイ ffe8-H0hI)
垢版 |
2018/07/19(木) 00:29:37.74ID:mgU85F4C0
>>717
ありがとうございます
0719デフォルトの名無しさん (ワッチョイ ff8a-H0hI)
垢版 |
2018/07/19(木) 00:34:23.22ID:4jMcHp760
var myTable = new Dictionary<string, string>();
myTable.Add("Hokkaido", "Sapporo");
myTable.Add("Iwate", "Morioka");
myTable.Add("Miyagi", "Sendai");

//*1
var b = myTable.ContainsKey("Iwate");

if (b == true)
{
      //*2
var s = myTable["Iwate"];
MessageBox.Show(s);
}

Dictionaryから特定の要素を探して、あれば表示するんですが
この*1 *2 をLINQを使って1行にしたいんですが、どうすればいいですか?
0720デフォルトの名無しさん (ワッチョイ f7d2-zNEp)
垢版 |
2018/07/19(木) 00:38:57.36ID:5TJBBc7u0
継承について
スーパークラスAに始まり
class B : A
class C : B
class D : C
となった場合、
Dクラス内でAやBのクラスのフィールドやメソッドをを使いたくなった場合には
それぞれをインスタンス化をすれば使えると思いますが、
継承されていない場合はどうすれば良いのですか?
例えば、
スーパークラスX
class Y : X
class Z : Y
とい場合、class Aのメソッドやフィールドを使いたくなったときは、
どうやってクラスAを持ってくるのでしょうか?
継承をしなくても、そのクラスのメソッドやフィールドを持ってくる方法はありますか?
0722デフォルトの名無しさん (ワッチョイ ffd3-H0hI)
垢版 |
2018/07/19(木) 00:56:15.63ID:OslD0F820
>>719
LINQ は集合に対して使うものなので、その例だと必要ない

if (myTable.TryGetValue("Iwate", out var s))
{
 MessageBox.Show(s);
}

対象が複数あるならこう

var list = new[] { "Hokkaido", "Iwate", "Tokyo" };
var q = list
 .Where(x=> myTable.ContainsKey(x))
 .Select(x=> myTable[x]);
foreach (var s2 in q)
{
 MessageBox.Show(s2);
}
0723デフォルトの名無しさん (アウアウウー Sadb-glQ9)
垢版 |
2018/07/19(木) 01:05:12.94ID:EPnya5cJa
>>719
LINQ全く関係ないけど比較的新しいC#ならこう書ける
if (myTable.TryGetValue("Iwate", out var s)) MessageBox.Show(s);
どうしても単一ステートメントにしたいなら
myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
(myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す
0724デフォルトの名無しさん (スプッッ Sd3f-/JJK)
垢版 |
2018/07/19(木) 07:22:53.40ID:Y653MTcJd
>>696
awaitでは上手く実現できなさそうな構造でした

https://msdn.microsoft.com/ja-jp/library/system.threading.monitor(v=vs.110).aspx
monitorクラスを使って実現できそうだなとなりました
ただこれのシグナルを投げるpulseとpulseallの違いがよくわかりません
pulseは変数で渡したオブジェクトのスレッドを、pulseallは渡すオブジェクトとか関係なくwaitで止まってるすべてのスレッドを動かす?
0728デフォルトの名無しさん (アウアウエー Sadf-0r7x)
垢版 |
2018/07/19(木) 11:39:51.48ID:wWZN809Va
むしろ一番の疑問は、
>リクエストは一つずつ送らないといけない制約がある

のであれば、キューを持つべきなのはリクエストを送る側ではなく受ける側なんじゃないか、
なぜリクエストを送る側に受ける側の都合に合わせる負担をさせるのか、
ってことだと思うけど、まあ話が曖昧過ぎてよくわからんね。
0729719 (ワッチョイ ff8a-H0hI)
垢版 |
2018/07/19(木) 12:02:04.85ID:4jMcHp760
>>722
自分のコードだと野暮ったくて古い感じがしたんですが
out var なるものを使ってすっきりさせるんですね

>>723
最近、ラムダ式やLINQを始めたんで↓みたいにメソッドチェーンで繋げたかったんですが
これだとやりすぎなんですねw

>> myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
>> (myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
>> とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す


ありがとうございました
0730デフォルトの名無しさん (スプッッ Sd3f-FUqr)
垢版 |
2018/07/19(木) 12:23:58.43ID:apArmWopd
見やすくしたり行数減らす為の機能なのに一文に無理やり詰めたら見づらいだろうしな
LINQ使わなくても
;で終わらせた文を一列にずっと書き続けてたらなんだこいつってなるだろうし
0734デフォルトの名無しさん (ワッチョイ 7783-4GkJ)
垢版 |
2018/07/19(木) 14:35:28.55ID:3tSlXwR10
10年で1スレも消費できないムラダ厨がまた初心者スレで暴れてるのか。
0735デフォルトの名無しさん (ササクッテロル Sp4b-zvcE)
垢版 |
2018/07/19(木) 15:40:49.42ID:afTcWGfVp
>>728
送る側で待たないと仕事を溜め込んだ受け側が最悪死ぬか無視する様になるぞ。
0736デフォルトの名無しさん (アウアウエー Sadf-0r7x)
垢版 |
2018/07/19(木) 16:09:05.04ID:wWZN809Va
>>735
意味わかんないよ

キューが満杯ならエンキューできないだけ。
そして、キューが満杯になるような事態が起こるかどうかは、キューを送る側受ける側
どちらが持つかという設計の問題とは何も関係がない。

送り側が持てばそんな事態は起こらない、などとはまったく言えない
0741デフォルトの名無しさん (ササクッテロル Sp4b-zvcE)
垢版 |
2018/07/19(木) 23:06:52.57ID:afTcWGfVp
>>736
少なくとも送る側が待てばたまらないし、待たすからには大元まで遡って待たせることが出来る。
受け側で貯めちゃうと、そんなコントロールすらできない。
0744デフォルトの名無しさん (アウアウエー Sadf-0r7x)
垢版 |
2018/07/19(木) 23:24:45.38ID:OO5CyzUia
>>741
何を言ってんの。
ちゃんと自分の頭で考えて言ってる?

キューの容量が100だとする。
リクエストが100まで溜まってしまうかどうかは、キューをどちらが持つかと関係ないでしょ。

スループットはリクエストの処理能力で決まるんであって、キューをどっちが持つかで決まるんじゃない。
当たり前でしょ。

送る側が待てばたまらない?
それは受ける側がリクエスト拒否したらたまらないと言ってるのと同じ

君の世界じゃ、バケツリレーの余分なバケツの置き場所を送り元におくか送り先に置くかで
バケツの輸送能力(単位時間あたりの送れる水の量)が変わるの?

変わるわけがないでしょ
頼むよマジで
0751デフォルトの名無しさん (ササクッテロル Sp4b-zvcE)
垢版 |
2018/07/20(金) 10:43:27.30ID:aSukBuZjp
>>744
だから、貯め無い様にするには、送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話。
わかる?

通信のフローコントロールの話と同じなんだよ?
0752デフォルトの名無しさん (アウアウエー Sadf-0r7x)
垢版 |
2018/07/20(金) 10:47:52.01ID:j2kgPlBya
>>751
まだ言ってるのか。

君の世界では
>送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話

これが可能かどうかはリクエストのキューをどちらが持つかに依存するのか。
キューをリクエストの受け側が持ったらそれは出来ないのか。
意味が分からないよ

何が
>通信のフローコントロールの話と同じなんだよ?
だw
馬鹿過ぎて笑える
0754デフォルトの名無しさん (ササクッテロル Sp4b-zvcE)
垢版 |
2018/07/20(金) 10:50:53.38ID:aSukBuZjp
おまえ、目悪過ぎて呆れるわ。

持つなんて一言も言って無いだろw
待つだw マツ。

キューをどっちが持ってるかなんて話はしてない。
0756デフォルトの名無しさん (ササクッテロル Sp4b-zvcE)
垢版 |
2018/07/20(金) 11:16:02.27ID:aSukBuZjp
>>755
まあ普通は受け取る側に郵便受けが無いと受け取る人はいちいち局留めの郵便を受け取りに行かなきゃならないんだけど、まあ、それはどちらでも機能するからあんまり争点にはならないけどね。
0757デフォルトの名無しさん (スププ Sdbf-DFDX)
垢版 |
2018/07/20(金) 13:07:56.71ID:aSN8UD58d
バケツリレーの喩えでもスループットは変わっちゃうんだよな。
受け側に送信側が送信する総量より大きいバッファを持てば、スループットは水の入ったバケツを運ぶ時間に依存するだけで済む。
キューがそれより遅ければバケツを引き渡すために時間が余計にかかるわけだから、スループットは落ちる。
送信側にキューを持ったところで、送信側は送信処理に対して同期的に処理しないだけで済むだけで、そのキューからの送出がどんどん遅れるだろう。受け取ってくれないなら。
■ このスレッドは過去ログ倉庫に格納されています