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

■ このスレッドは過去ログ倉庫に格納されています
2018/03/03(土) 15:09:05.75ID:SBEkwl3H
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part135
http://mevius.5ch.net/test/read.cgi/tech/1517749348/

■コードを貼る場合は↓を使いましょう。
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: default:vvvvv:1000:512:----: EXT was configured
2018/03/27(火) 01:19:00.55ID:tVuDF99u
>>693
糞会社が4.0止まりなんだ
2018/03/27(火) 01:20:41.65ID:rY6p5Eum
>>694
4.0はもうサポート対象外だし、Windows Server 2012も非対応なのに使わざるを得ないとか同情するわ
2018/03/27(火) 01:24:49.59ID:t3gWSj15
>>692
最大実行時間は何時間なん?
21時〜3日後の21時までなんて可能性は排除できるん?
平日と休日とで違いはないん?
とかね
なんか仕様がモヤっとしてんじゃん
697デフォルトの名無しさん
垢版 |
2018/03/27(火) 01:30:08.36ID:dhIDlkWy
>>696
だいたい8から13時間程度の稼動になります!
2018/03/27(火) 01:30:24.22ID:ff4RZBmU
4.X系ならアップグレードのコストはそんなにかからないだろうに
お前が変えさせるか、辞めちまえ
2018/03/27(火) 01:36:06.94ID:t3gWSj15
>>697
最大よ最大
返答に範囲が返って来ると気が狂うん
イレギュラーケースの最大を聞いてん
2018/03/27(火) 01:49:34.53ID:XpaqG/wa
最大13時間です!
すいません!
2018/03/27(火) 03:45:35.94ID:7OwU1Hvz
同期プリミティブ
http://www.tokumaru.org/techterm/primitive.html

ポーリングは、ダメの見本。常識

ランデブーとか、待ち合わせしたいだけだろ。
それか、非同期で、callback してもらえば良いだけw
702デフォルトの名無しさん
垢版 |
2018/03/27(火) 04:03:08.18ID:E80vD2cb
task.delay(100)とTheading.sleep(100)ってどう違うの?
2018/03/27(火) 07:45:14.33ID:i+K8FLsM
素人ってやたらとポーリングを嫌うよね
2018/03/27(火) 09:12:45.31ID:8h15hFzc
CPU100%とか言ってるし無限ループと勘違いしてるんだろ
2018/03/27(火) 09:37:19.37ID:84JRCCml
まあ素人さんはしょうがない
2018/03/27(火) 09:39:14.11ID:kmAPzdoZ
>>702
Thread.Sleepは指定した時間自分のスレッドを停止する
Task.Delayは「指定した時間停止するスレッド」を生成する
Task.Delayは単独では意味がないのでawaitなりContinueWithなりする
2018/03/27(火) 09:48:09.70ID:rY6p5Eum
async/awaitの勉強しているんだが、async voidやasync Taskのメソッドをawait無しで呼び出したらそのメソッドの処理は投げっぱなしになるの?
2018/03/27(火) 10:48:57.49ID:fbReATtq
そだよ。
2018/03/27(火) 12:21:35.26ID:7OwU1Hvz
そもそも、MS が、50ms 以上掛かる処理は、同期処理するなって言ってるだろ。
非同期処理にして、callback してもらうようにって

「ポーリング」で検索して、色々な記事を読め
2018/03/27(火) 12:28:13.60ID:xeybzECW
何がそもそもなんだw
>>709の世界ではDateTimeの比較演算に50msもかかるのかw
30年前のPC-98だってそんなにかからないと思うけどww

ネタなのかマジなのか知らんけど、そもそもHW資源を直接触れないOS上で動くコードは
一件コールバックのように見える処理も実態はポーリング

単にそれがシステム側のコードに隠蔽されてるだけ
2018/03/27(火) 12:35:46.40ID:GW1/xmrB
spin lock なんてものは無かったんや
 いやぁ勉強になるなぁ
2018/03/27(火) 12:38:24.18ID:rY6p5Eum
>>708
サンクス
713デフォルトの名無しさん
垢版 |
2018/03/27(火) 12:39:38.04ID:nnyxYnJQ
元々タスクスケジューラで十分な話をよくもここまで長々と続けられるな
2018/03/27(火) 12:44:03.80ID:Eb35YKQg
質問にとは関係ない部分で知識をひけらかしたい奴がいるから
2018/03/27(火) 13:12:24.26ID:8gmuwQWV
仮にオレがこのソフトを作るとしたら、NotifyIconのデザインで小一時間悩むところから始まるだろうね
2018/03/27(火) 13:45:19.52ID:7OwU1Hvz
何時間も待つ処理だろ。
50ms を超えてるから、非同期処理を使えって、MS が言ってる

自分でプログラミングで、ポーリングしたらダメ

OS の内部処理とは関係ない
2018/03/27(火) 13:53:27.94ID:Eb35YKQg
思い込み激しい奴だな
2018/03/27(火) 14:12:37.92ID:9YSJ28+H
指定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?

c:\test

aaa.txt
bbb.txt
ccc.txt
...etc

指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。

アンパンマン → バイキンマン

といった具合です。
2018/03/27(火) 14:24:49.80ID:zZm0N0X4
スレチ
2018/03/27(火) 14:35:31.77ID:ClOSXPHI
1秒タイマーでタイムアウトするたびに目的の時刻を越えたか
調べるだけでいいじゃないの
違ったら即抜けるだけなのに、50msも掛かる処理じゃねーよ
なんでわざわざタスクスケジューラー使わにゃならんのだ
2018/03/27(火) 15:21:58.88ID:1rmw5Lza
>>709
ぜんぜん理解してないじゃん
2018/03/27(火) 18:28:00.64ID:84JRCCml
コミュ障は病気だからやむを得ないが
読解力は人並みに身につけてから書き込んで欲しいよなw
2018/03/27(火) 19:38:51.59ID:8gmuwQWV
タイマーのインターバルは10秒とか100秒だけじゃなくて、10年でも100年でも設定できるんだから
起動時に開始と停止までの時間を計算してタイマー設定すれば
ポーリングしなくても良いんじゃね?
2018/03/27(火) 19:41:02.82ID:RNGaKb4X
>>723
時刻合わせせずPCの時計を常に基準にするのか
というか仕様や設計の話は他でやってくれないかな
2018/03/27(火) 19:46:25.47ID:a4CYTpTn
>>723
Timerのインターバルはint型でmsec指定
1年の秒数は31536000秒

あれぇ?
2018/03/27(火) 20:12:24.26ID:foR5XOpk
>>724
PCの時刻を基準にしないでどうすんの?
純粋に興味あるから教えてくれ
2018/03/27(火) 20:34:44.17ID:8gmuwQWV
>>725
wpfばかり使ってたんで、DisptcherTimer基準にしていたわ
悪いな
2018/03/27(火) 20:36:49.79ID:D1lCzr9q
初心者の陥りがちなミス

Timeの精度を信用してしまう
途中で時刻修正の入る場合などを考慮しない
2018/03/27(火) 20:40:14.18ID:8gmuwQWV
>>724
今のPCはネットに繋がっていれば時間は自動で合わせてくれる
インターネットに繋がっていない前提ですか?
2018/03/27(火) 20:42:13.82ID:RAm1FIuU
そおです
2018/03/27(火) 20:51:58.53ID:SJRVUf0s
>>710
30年前ってPC9801あったっけ?
2018/03/27(火) 20:56:33.38ID:vavxlF2f
>>731
初代は1982年(36年前)
2018/03/27(火) 20:58:54.08ID:FNmJga7y
こういうインフラの煩わしい制約からコアになる処理を分離したい
ワーカー側は終了再開するためのapiを用意して時間や終了再開するタイミングの事は一切考えない
時間を管理するクラスが適切なタイミングでそれらのapiを実行する

というのが正解な
時間管理クラスが内部でループぶん回そうがシステムコール使おうがそれはどうでもいい
2018/03/27(火) 21:05:37.51ID:D1lCzr9q
c#環境では指定時刻にイベントを起こすAPIは用意されてない
2018/03/27(火) 21:12:23.97ID:9YSJ28+H
指定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?

c:\test

aaa.txt
bbb.txt
ccc.txt
...etc

指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。

アンパンマン → バイキンマン

といった具合です。
2018/03/27(火) 21:13:34.93ID:D1lCzr9q
>>735
スレチ

ここはc#のスレ
2018/03/27(火) 21:14:46.44ID:1tsj2UvO
>>701
callbackはどんな条件のものをどうやって作るんだ
>>729
時刻合わせのタイミングでインターバル補正するコードは思いつかないな
時間定期的にcheckするだけのものをどこまで難しくする気だコイツら
2018/03/27(火) 21:22:44.33ID:rY6p5Eum
>>737
お仕事でなんでこの仕様からこんな糞コードが生まれるんだろと不思議に思うことあるけど、このスレの流れ見たらある意味納得だわ
2018/03/27(火) 21:23:33.47ID:8gmuwQWV
>>737
1秒ポーリングでも最大1秒弱の誤差が出るわけだが、内蔵時計ってそこまで精度悪いの?
実用上問題ない誤差に見えるがちょっと気にしすぎじゃね?
2018/03/27(火) 21:30:26.48ID:xeybzECW
どうでもいい
そんな盛り上がるネタじゃないだろうw
いい加減止めたら?
2018/03/27(火) 21:43:38.37ID:RAm1FIuU
他に居場所がないのでしゅよw
2018/03/27(火) 21:44:08.38ID:FNmJga7y
悲しいね
2018/03/27(火) 22:08:17.45ID:t3gWSj15
1秒ポーリングでやろうぜ

現在時刻が開始〜終了時刻の範囲
 起動Flagなし
  起動処理
  起動Flag立てる
現在時刻が開始〜終了時刻の範囲外
 起動Flagあり
  終了処理
  起動Flag下ろす

(*゚∀゚)bできた!
2018/03/27(火) 22:29:48.19ID:FkzRU/Z7
回答者の方は基本情報持ってるもんですか?
2018/03/27(火) 23:11:24.08ID:a4CYTpTn
持ってるけど少し勉強すれば誰でも取れる資格に意味なんてあるの?
精々資格手当で給料が5000円プラスされる程度の価値しかないぞ
2018/03/27(火) 23:19:17.56ID:LCPGZ3qz
5000円の価値も分からないとか働いたことないのかな?
2018/03/27(火) 23:32:40.08ID:FNmJga7y
うちは1万増える
2018/03/27(火) 23:34:25.90ID:zFrY2ZyB
5,000円も上乗せとかウラヤマ過ぎだろ
うちなんて高度取っても報償金30,000円だけ
基本や応用ではなにもでない
2018/03/27(火) 23:42:52.53ID:7OwU1Hvz
10年以上やってる奴でも、基本情報技術者は取れない

大卒の新米が、こんなの簡単に取れますよねって言ったら、
中堅社員は皆、新米をにらみつけていたw

企業の資格取得率は、年1%(100人中1人)ぐらいだろ。
10年いても、9割の社員は、資格を取れない
2018/03/27(火) 23:53:23.07ID:FNmJga7y
申し込みしたけど忙しくて受験できない人は沢山居るけど受験して落ちる人はいない
2018/03/27(火) 23:53:50.72ID:3aWOhLkC
俺は応用情報まで持ってて+1万だなー

>10年以上やってる奴でも、基本情報技術者は取れない
……冗談だろ?
2018/03/27(火) 23:58:15.55ID:3aWOhLkC
さておき、建築士だの医師だの弁護士だのみたいに
「この職務に就くには、○○の資格が必要」とかいう業界じゃないんで
本当に、ただ給料が増えるだけではあるな (採用試験でもまあ有利にはなるかもしれん)

増えたら増えただけ嬉しいもんではあるが
年間で+12万なら、家電の買い替え費用くらい楽に捻出出来るし
2018/03/27(火) 23:58:26.75ID:9YSJ28+H
定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?

c:\test

aaa.txt
bbb.txt
ccc.txt
...etc

指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。

アンパンマン → バイキンマン

といった具合です。
2018/03/28(水) 00:00:54.89ID:02fULCHO
botかな
2018/03/28(水) 00:09:13.46ID:pf/Jvdmo
>>752
普通は資格手当ては基礎賃金扱いだからボーナスや残業計算対象でもっと貰えるよ
基本情報で5000は羨ましいけど資格手当て込みのベースにしてるパターンもあるから一概にいいとはいえないかもね
2018/03/28(水) 00:16:20.41ID:0was1dJs
Ruby の、Dir.glob で書ける

Dir.glob('C:/test/*.txt') do |file|
# gsub(/アンパンマン/, 'バイキンマン')で全部を置換する
end
2018/03/28(水) 00:44:23.36ID:Im6j951B
C# もしくは 既に要件を満たすツールがあれば教えてください。
2018/03/28(水) 01:02:57.21ID:GnpAMkN4
>>753
マジレスするとVisualStudioで可能
2018/03/28(水) 01:13:32.94ID:qs/6O+TS
>>757
WindowsでC#使ってるならVisual Studio使ってるんだろ?
フォルダーを指定して置換でいいと思うが
https://msdn.microsoft.com/ja-jp/library/a40ywt0a.aspx
2018/03/28(水) 07:24:31.11ID:1/4U3eU2
>>753
awkやろ
百歩譲ってRubyとかのP系言語
C#は向いてない
2018/03/28(水) 07:34:12.04ID:NtzDkwr+
powershell
2018/03/28(水) 22:10:34.35ID:LHMXaAz3
public Pixel(IList<byte> data, int index)
{
B = data[0];
G = data[1];
R = data[2];
Index = index;
}

var list = new List<(int x, int y)>();

// 何故か背景色がFFA07A固定なのでそれ使って適当に
list.AddRange(pixels.Where(x =>
Math.Abs(x.R - 0xFF) < 5 &&
Math.Abs(x.G - 0xA0) < 5 &&
Math.Abs(x.B - 0x7A) < 5
).Select(x => (x.Index % width, x.Index / width)));


ビットマップをPixelクラスに読み込んで特定の色(FFA07A)のピクセルを検出しているのですが
         (x.R - 0xFF) < 5
ここのRGBから16進数をマイナスして5未満の意味がわからないのですが
なぜこんな計算をしているのでしょうか?
2018/03/28(水) 22:12:50.37ID:6nNahb2+
止まるんじゃねぇぞ…
2018/03/28(水) 22:21:23.63ID:Im6j951B
>>759
VS2017にそんな機能があったんですね。便利!

VS2010じゃその機能はないよね?
2018/03/28(水) 22:33:50.78ID:r3METhPg
>>762
そのコードを書いた奴に聞けよ
2018/03/28(水) 22:42:38.68ID:qs/6O+TS
>>764
2008 でもある
https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/a40ywt0a(v=vs.90)
たぶんもっと前からあったような気がする
2018/03/28(水) 22:52:23.87ID:Im6j951B
>>766
知らなんだ。サンクス
2018/03/29(木) 00:01:16.76ID:LDL0rnP5
>>762
その前にMath.Absが付いとるじゃろ
目的の値との差をとって、その絶対値が5未満
つまり、ぴったり一致しなくても±4までの誤差ならOKとしている
769762
垢版 |
2018/03/29(木) 00:10:37.10ID:3/dH7jim
>>768
なるほど!誤差の為ですか
ちょっとした技を使ってたんですね
ありがとうございました。
770デフォルトの名無しさん
垢版 |
2018/03/29(木) 12:17:07.66ID:48quLBzg
質問です。よろしくお願いします。
ttps://tb.click-sec.com/fx/historical/historicalDataDownload.do?y=2018&m=01&c=21&n=USDJPY
をブラウザで開くとzipファイルのDLが始まるので、これをC#でDLしようと思ったのですが、
このURLのままだとSystem.Net.WebClient.FileDownloadでもWebBrowserコントロールで開いてもzipファイルのDLができません。
どうすればいいのでしょうか。 👀
Rock54: Caution(BBR-MD5:8e40a50a3146c71e5aa506574dbd07bd)
2018/03/29(木) 12:30:39.81ID:49BUJ49m
諦める
772770
垢版 |
2018/03/29(木) 12:50:22.61ID:48quLBzg
IEに開かせればできるかもと思ったのでやってみます。
773デフォルトの名無しさん
垢版 |
2018/03/29(木) 14:42:04.00ID:fRxUhejE
すまんが、イベントハンドラーを空っぽにするのってどうやんの?
2018/03/29(木) 15:00:44.15ID:mcXZqOx8
nullから空っぽのラムダ式を入れる
もしそのイベントを持つクラスの外からやりたいと言ってるならそれは無理
無理と言うより、そんなことをしたいと思うこと自体が間違ってる
2018/03/29(木) 19:35:16.02ID:2ivypk2R
>>773
-= イベントハンドラ;
2018/03/30(金) 11:54:45.53ID:LK6mi3V8
ユニットテストについて質問
例えば計算クラスのテストをするときは

[TestCase(-2, 2)]
public void AbsTest(int a, b){
 int n = Math.Abs(a);
 Assert.AreEqual(n, b);

こういう風に正しい値を予め手計算で用意しておくものなの?
2018/03/30(金) 12:24:31.95ID:Aig7x3ki
>>776
一般的にはその通り
間違っても n = a < 0 ? -a : a とかやってはいけない
ちょっと考えたら分かると思うけど、そういうのは全く意味のないオレオレテスト
手計算がどうしても困難なら、デバッガで動かしてその結果が合ってるかを検証してその値をコピペしとけ
少なくとも意図しないデグレの検出には役立つ
2018/03/30(金) 12:34:29.62ID:LK6mi3V8
>>777
ありがとう!
チェック項目が増えると引数が酷いことになるから何か間違えてるのかと思ってた
2018/03/30(金) 12:46:02.45ID:Aig7x3ki
>>778
それはテストの観点を適切に直行化できてないんじゃないか?
引数xが3以上のとき結果は必ず負になることが期待されるとしたら、
テストは3と3を超える値を引数に入れて、それぞれの結果yについて y < 0 が真となることを確認すればいいんだぞ
何を確かめたいのかを明確にしてそれをそのままコードで書くんだよ
780デフォルトの名無しさん
垢版 |
2018/03/30(金) 14:10:01.41ID:tnFi4c/U
LinqのJoinメソッドに渡すメソッドなんだけど、ラムダ式で書く方法が全然理解できないぜ・・・・
多分、掲示板で解説するのも難しいと思うので、やさしく解説してるページやら本やらがあったら教えて!!!
2018/03/30(金) 14:45:38.48ID:L1eApEVG
>>780
どれがわかりやすいかなんて人それぞれだから宛にならないよ
ラムダ式でぐぐって良さそうなら熟読してわからない所を質問するといい
2018/03/30(金) 14:48:53.79ID:CpZcazmB
ラムダ式とか正規表現とか、記憶してるやついないから大丈夫
毎回ググればいい
2018/03/30(金) 15:28:55.57ID:87KFZNYL
ラムダ式って、無名関数の構文糖だろ

func (引数1, 引数2) => 戻り値

(a, b) => result
2018/03/30(金) 16:00:30.28ID:BIk3pBCX
λを採用した祖の言語LISPなんてわざわざ(lambda〜)と毎回書いてるのに変な略称=>なんて許されんばい
λと書きんしゃい
2018/03/30(金) 16:46:29.66ID:kajlCXLR
またはじまった
2018/03/30(金) 17:32:32.77ID:+cAt7TAV
ランバダのPVはエロかったなあ
関係ないけど
2018/03/30(金) 18:08:45.57ID:qHFB3R53
>>780
この本よかったぞ
基本的な知識はあるがLINQ、ラムダ、推論型の知識があやふやならおススメ

「C#プログラマーのための 基礎からわかるLINQマジック! 」
https://www.amazon.co.jp/dp/product/B01FEZ7QNY/ref=as_li_tf_tl?camp=247&;creative=1211&creativeASIN=B01FEZ7QNY&ie=UTF8&linkCode=as2&tag=bookmeter_book_image_image_pc_logoff-22
2018/03/30(金) 18:19:24.61ID:LI6oPksr
人脈?
2018/03/30(金) 18:25:17.02ID:QYlpMr10
質問失礼します。
以下のようなプログラムを書いたところコメントに書いたようなメッセージが表示されますが、
このメッセージに従ってインライン化しようにも、どのように修正すれば良いか分かりません。
これはIDEのバグだと思って無視しても良いものなのでしょうか。

インライン化の有無は可読性だけの問題でパフォーマンスなどに影響はないのだと思いますが、
このようなメッセージが表示されたままプログラムを完成とするのはあまり気分がよくありません。
プログラムの修正方法や、このようなメッセージに対する考え方など、
分かることがあれば教えていただけないでしょうか。よろしくお願いします。

static void Main(string[] args)
{
void getMessage1(out string _message) => _message = "x is 1.";
void getMessage2(out string _message) => _message = "x is not 1.";

int x = 1;
string message; // IDE0018 変数の宣言をインライン化できます
if (x == 1)
{
getMessage1(out message);
}
else
{
getMessage2(out message);
}

Console.WriteLine(message);
}
2018/03/30(金) 18:42:11.73ID:q+LDJ3nt
そんなもん買っても十中八九忘れる
基本ネットに転がってるコピペで食いつなぐのが一流
2018/03/30(金) 18:44:40.56ID:LI6oPksr
>>789
なんでoutを使うのかが分からないんだけど
2018/03/30(金) 18:49:12.82ID:+cAt7TAV
>>789
"IDE0018"でググったら一発で解説が見つかるんだけどw
何でその長文タイプうする前に検索しないのよw
そこが分からん
2018/03/30(金) 18:57:29.01ID:roepBgfb
>>789
これ、どうしろって言ってん?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。