ふらっと C#,C♯,C#(初心者用) Part141at TECH
ふらっと C#,C♯,C#(初心者用) Part141 - 暇つぶし2ch200:デフォルトの名無しさん
19/01/08 01:42:19.06 +TBsMqqs0.net
9時と13時に定期的に作業を実行させたいので、タイマーを使ってプログラムを書きました。
似た部分が多いのでタイマー自体を配列化したのですが、「動作を停止しました」とエラーが出て動きませんでした。
タイマーの配列化って無理なんでしょうか?
System.Windows.Forms.Timer[] timerOnce = new System.Windows.Forms.Timer[2];
public GetControlsList()
{
myTimerOnce(timerOnce[0], "9:00");
timerOnce[0].Tick += new EventHandler(timerOnce_Tick);
}
// 指定時刻までの時間を計算して、Intarvalにセット
private void myTimerOnce(System.Windows.Forms.Timer thisTimer, string setTime)
{
//現在の時刻から、ターゲット時刻までのインターバルを算出
TimeSpan mySpan = DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd ") + setTime) - DateTime.Now;
int sleepSec = (int)mySpan.TotalMilliseconds;
thisTimer.Enabled = true;// タイマ ON
thisTimer.Interval = sleepSec; // 更新間隔
}
// 指定時刻になったらmethodを実行
void timerOnce_Tick(object sender, EventArgs e)
{
//実行したいメソッド
}

201:デフォルトの名無しさん
19/01/08 06:44:44.69 dT41V3TC0.net
アドバイス頂いた通りシリアライズを見直したところ解決しました。
var account = new Account { Email = "hogehoge.example.com", Active = true, };
using ( StreamWriter sw = File.CreateText( @".\accounts.json" ) )
{
var jw = new JsonTextWriter( sw ) { Formatting = Formatting.Indented };
new JsonSerializer().Serialize( jw, account );
}
このように書いていたので、accountをリストに変換してから行うようにしました。
new JsonSerializer().Serialize( jw, new List<Account> { account } );
レスくれた皆さん、ありがとうございます。
こちらもVS2017なのできっと文法違いが原因です。
Json形式を勉強し直します。

202:デフォルトの名無しさん
19/01/08 08:12:51.74 mtJIt88ca.net
>>197
そもそもWinFormsのタイマーは精度や信頼性がとても低く、時間の計測に使ってはいけない
あくまで「時々処理をさせたい」だけのときに使うもの
あなたのケー�


203:Xならタスクスケジューラを使うのが定石です



204:デフォルトの名無しさん
19/01/08 09:49:22.14 Sw3FA19SM.net
>>197
配列をnewしただけで中身のTimerをnewしてないからじゃないの

205:デフォルトの名無しさん
19/01/08 09:53:57.24 Sw3FA19SM.net
まずデバッグ実行することを覚えた方がいい気がしないでもない

206:デフォルトの名無しさん
19/01/08 12:12:53.32 +TBsMqqs0.net
>>200
まさにそれでした。
1行加えただけで解決しました。ありがとうございました。

207:デフォルトの名無しさん
19/01/09 07:23:03.10 fI4baLQf0.net
本当に初心者質問ですが、ライブラリはimportとnamespaceから書いていくのと、どちらが良いのでしょうか
もしくは使い分けがあるのでしょうか

208:デフォルトの名無しさん
19/01/09 07:48:48.51 c4aAB3Aqd.net
>>203
ここC#スレやで

209:デフォルトの名無しさん
19/01/09 12:18:51.14 fI4baLQf0.net
>>204
C#はusingですけどスコープ内でオブジェクト破棄する機能もusingと呼称してるので混乱しないようにimportと表現しました
なんで2つの記述方法を許しているのか、何か意味があるのか気になりまして

210:デフォルトの名無しさん
19/01/09 12:21:16.40 c4aAB3Aqd.net
>>205
c#にもimportはあるから余計混乱するだけ
名前空間とusingsは全然用途違うでしょ?

211:デフォルトの名無しさん
19/01/09 12:21:41.32 c4aAB3Aqd.net
C#というかMSBuildだけど

212:デフォルトの名無しさん
19/01/09 14:41:58.83 2h2JyjUc0.net
>>203
名前空間の全表記は可読性下げるので使ってないな
VSでカーソル当てれば名前空間表示されるし、今時テキストエディタでゴリゴリ書いている人でもなければ全表記する必要ないと思う

213:デフォルトの名無しさん
19/01/09 14:52:14.20 TKkGGOqYM.net
>>208
MediaのcolorとDrawingのcolorが混在してるときはぶっ潰したくなる

214:デフォルトの名無しさん
19/01/09 14:55:45.81 TKkGGOqYM.net
pathってファイルパスじゃなくて
曲線かよ死ねよとか
省略形でも違いがあったほうが絶対いい

215:デフォルトの名無しさん
19/01/09 19:11:30.62 5txyXp0A0.net
>>203
URLリンク(docs.microsoft.com)
usingでググればここに理由も呼び分け方(using ディレクティブ)も出ている
一般的な呼び名を使わないと調べることすらできなくなるよ

216:デフォルトの名無しさん
19/01/10 13:13:55.78 lMztlpGar.net
>>209
そういうの他にもある

217:デフォルトの名無しさん
19/01/10 20:09:22.40 9xQ4gBbQa.net
P/InvokeやCOM相互運用を書くときに
System.Runtime.InteropServices.ComTypes以下の構造体やインターフェースを使う時があるんだけど
System.Runtime.InteropServices以下に同名の物があるから、大体の場合で完全修飾かusing alias directiveが必要になって面倒なんだよなあ
.Net1.1時代の後方互換性のためにObsolete付きで残してあるんだろうけど邪魔で仕方がない

218:デフォルトの名無しさん
19/01/11 12:39:13.44 qc15f1nfD.net
>>211
その名前を知る事が大変ですよね
沢山本読むしかないんでしょうけど

219:デフォルトの名無しさん
19/01/11 12:57:28.29 RbVY6SmB0.net
>>214
この話はusingの話で質問した人もわかっているし
わからないなら分からないなりに説明したらいいだけ
オレオレ用語使ってこんなところで質問するのは普通におかしい

220:デフォルトの名無しさん
19/01/11 13:29:58.48 5RUmP2fm0.net
スレ間違えたことを嘘に嘘を塗り固めるのは朝鮮人の始まり

221:デフォルトの名無しさん
19/01/11 14:37:44.48 225AU0sE0.net
ちょっと教えろください。
int型変数二つの足し算でオーバーフローするかどうかチェックしたいのですが、
①decimalに�


222:Lャストして足し算した結果がintの範囲に収まっているかif文で判断 ②try catchで例外をつかまえる どっちがいいのでしょう?



223:デフォルトの名無しさん
19/01/11 14:40:44.08 86XGb19RM.net
>>217
③decimalではなくlongにキャストして足し算した結果がintの範囲に収まっているか判断

224:デフォルトの名無しさん
19/01/11 15:54:41.82 r18fheRy0.net
>>217
int_max - a < bなら
a + b < int_maxが成り立つ
でも>218のほうがわかりやすいとは思う

225:203
19/01/11 17:49:49.09 1orv+xc30.net
俺がjavaerという事がバレちまったらしょうがねえ
なんだよusingってよ
vb如きだってjavaリスペクトしてんぞ

226:デフォルトの名無しさん
19/01/11 18:29:52.22 KWycMyC0a.net
>>217
オーバーフローは同じ符号の値を足した時にしか起こらず、起こった場合は前後で符号が変わる。
他の人が見ても何やってるか分かることが重要ならそれで判定するのが一番だと思う

227:デフォルトの名無しさん
19/01/11 18:33:43.65 KnmjjSvJM.net
ラップアラウンドとサチュレーションって学生のときに聞いたのが最後だ

228:デフォルトの名無しさん
19/01/11 18:40:14.66 fFtOgUz40.net
すみません、初めて見る構造体が出て来たのですが
[StructLayout(LayoutKind.Sequential)]
struct INITCOMMONCONTROLSEX
{
public int dwSize;
public uint dwICC;
}
これは何構造体と読むのですか?

229:デフォルトの名無しさん
19/01/11 18:45:24.19 1+lzGhU1M.net
つまらん!
お前の話はつまらん!

230:デフォルトの名無しさん
19/01/11 18:46:13.28 eF6moy/g0.net
>>223
URLリンク(ufcpp.net)
>Sequentialレイアウトでは、複合型のフィールドは宣言した順序通りにレイアウトされます。

231:デフォルトの名無しさん
19/01/11 18:49:12.65 1+lzGhU1M.net
イニシャライズコモンコントロールズイーエックス構造体

232:デフォルトの名無しさん
19/01/11 18:51:24.03 zVvjOIcHa.net
>>223
構造体名で検索したらInitCommonControlsEx関数が出てくるじゃろ

233:デフォルトの名無しさん
19/01/12 00:09:08.43 iaJ8ArIE0.net
VS2017でC#のプログラムを組んでます。
はじめてVS2017を使うのですが、画面の下に

準備完了 ↑ソース管理に追加
という邪魔なバーが表示されてます。
VS2010にはありませんでした。目障りなのでこれを消したいのですが何か方法はありますか?

234:デフォルトの名無しさん
19/01/12 00:20:55.22 Fl9Ups4U0.net
>>228
ツール->オプション、環境->全般、ステータス バーを表示するのチェックを外す

235:デフォルトの名無しさん
19/01/12 00:21:44.23 iaJ8ArIE0.net
>>229
ありがとうございます!!目障りだったんですよね。

236:デフォルトの名無しさん
19/01/12 01:04:45.40 CChJ5ept0.net
色々迷ったけど
オートフォーマットはOFFにした

237:デフォルトの名無しさん
19/01/12 03:22:33.67 S1bCJ3S10.net
例外処理(に限らず、エラー処理)ってどこまで徹底して行うべきなんでしょうか?
下みたいに、使うインスタンス片っ端から毎回nullチェックとかしてたら、凄まじいコード量になるんですが・・・・・
if(obj == null)
{
return msg;
}

238:デフォルトの名無しさん
19/01/12 03:53:00.80 ejfouP+Ya.net
>>232
さあ。
でもバグと例外は区別した方がいいんじゃないか。
そのコードは多分バグを想定してるんだよね?
絶対にとは言い切れないが、バグを想定してそれを検出するifは書かないのが普通じゃないか
いやライブラリみたいなものを作ってるならバグを想定して例外を投げるのは普通だけど

239:デフォルトの名無しさん
19/01/12 03:58:46.63 ejfouP+Ya.net
最後の行は引


240:数のチェックの話ね



241:デフォルトの名無しさん
19/01/12 04:03:08.28 2xT9w9620.net
return msg
してるから まず例外をちゃんと使えてないんじゃ疑惑

242:デフォルトの名無しさん
19/01/12 04:04:51.50 DC6KrvaN0.net
デザインパターンでnullオブジェクトパターンみたいの参考にするのは?

243:デフォルトの名無しさん
19/01/12 04:12:05.96 DC6KrvaN0.net
nullが入るケースがあることを想定している場合にnullチェックを全部書くのがめんどいならnullオブジェクトパターン適用すればいいし
本来はnullが入ってたらおかしいケースならエラーを起こして拾わせるのが正しい構造って回答でいいのかな?

244:デフォルトの名無しさん
19/01/12 04:17:50.15 2xT9w9620.net
・nullが来ない想定ならチェック不要
・nullケース考慮したくないならnullオブジェクトパターン
・null来た場合にぬるり以外で知らせるならチェックする
・nullのネスト面倒ならnull条件演算子
こんな感じやろか
null非許容参照型使うという手もあるが

245:デフォルトの名無しさん
19/01/12 08:05:30.51 VHzQIvd20.net
読んでる入門書のLINQとラムダうんたらってのが分からなくて
手がstopしてしまっているのですが入門者向けに分かりやすく解説されてるページなど教えていただけないでしょうか?
メソッドの使い方はある程度分かったのですがそれじゃ駄目なんすかね…

246:デフォルトの名無しさん
19/01/12 08:39:26.90 0dPYYJK00.net
>>239
LINQやらラムダ使えなくても動くものはつくれるからまぁまずは作ってみよう

247:デフォルトの名無しさん
19/01/12 10:13:12.90 iaJ8ArIE0.net
最近は、自分でプログラム組まずにランサーズでハイスキルな奴に外注してるわw
中抜きでうま~~~

248:デフォルトの名無しさん
19/01/12 10:35:45.31 e9xF8Gpoa.net
>>232
チームの方針次第
うちの場合は
nullを許可しない引数と返り値は基本的に全てチェックして例外を投げてる
めんどくさいと思うかもしれないがFluentAssertionのようなライブラリを使えばそこまで大きな負担にはならない
nullオブジェクトパターンはやればわかるがチェックするよりも手間がかかる
また必ずしもnullの場合の適切な動作を定められるとは限らない
適切でない場合にパターンを適用するとそれがnullオブジェクトかどうかチェックするといった本末転倒なことになりかねない
なのでこれが最も適切と確実に判断できる場合を除いて使用しない
C# 8.0が待ち遠しいね

249:デフォルトの名無しさん
19/01/12 10:44:33.52 CChJ5ept0.net
>>232
仕様と設計で解決する問題
エラーが出たときどうしたいの?
エラー出たときに別に原因とかわからんでええなら一連の処理をtrycatchで囲ったらええやん
なんか起きたらcatchに入ってくるで

250:デフォルトの名無しさん
19/01/12 17:18:08.40 XDHakXaX0.net
>>232
外部とのやりとりの場所は結構厳重にチェックを入れる。
自分で書いているところは適当に流す。
外部とは当該館数のパラメータや、呼び出す関数とかの戻り値ね。
try catch で囲んで、チェックして例外発行して、catch 内でまとめてトレース情報込みでログ出してスローするくらいなら大した手間じゃないじゃない。
その例なら if( obj == null ) throw new ArgumentNullException("ぼーっと生きてんじゃねーよ!"); で済む話じゃん。
>>239
コピペでもいいからたくさん書いてみる。で解決するよ。
やってるうちに理屈が分かるようになる。

251:デフォルトの名無しさん
19/01/12 17:23:52.90 iaJ8ArIE0.net
昔は開発現場でこっそりExcel型の2chブラウザでネットサーフィンばかりしてたな~
座ってるだけで月70万むっちゃらくやった

252:デフォルトの名無しさん
19/01/13 00:23:58.00 X0+RFgX60.net
>>239
駆け出し時代オー�


253:vンソース改造してた時にLINQはパフォーマンス悪いと思って見つけ次第foreachに手直しするという逆工程でLINQとラムダ式マスターした



254:デフォルトの名無しさん
19/01/13 00:46:53.42 IIPQpabmp.net
使えば勝手にlinqの快感にハマって抜け出せなくなる

255:デフォルトの名無しさん
19/01/13 04:21:19.42 qwE0jZig0.net
麻薬のような機能だなw

256:デフォルトの名無しさん
19/01/13 09:07:48.83 Xn8IPTP50.net
LINQもRxも使いだすと元に戻れなくなる
でも性能気にしてstructとforeachに書き直し始めると時間足りない

257:デフォルトの名無しさん
19/01/13 09:32:12.32 Z+h8nfOL0.net
>>246
パフォーマンスのためならなんでforにしなかったん?

258:デフォルトの名無しさん
19/01/13 18:27:15.40 X0+RFgX60.net
>>250
Listはしてたよ
あとラムダ式はLINQ→foreachより行数減らす意識持って1行メソッドを見つけ次第ラムダ式に直す工程で習得したな

259:デフォルトの名無しさん
19/01/14 23:20:39.35 3wGjtMyb0.net
ComboBoxに例えばA~Dと4つ項目が入っていて、A~Cは同一計算方法でDのみ特別な計算方法でコード内容が異なり且つ色んな計算をする為コードが長くなる場合の見やすくする為の最初の分岐方法とか書き方とかありませんか?
今はifで分岐した中にあれこれ結果を取ってきて結果を出してるのでifがやたら長く見辛いです。なんかいい方法があれば教えて頂きたいです。

260:デフォルトの名無しさん
19/01/14 23:31:33.99 CBheeOs80.net
LINQ使うと元に戻れなくなるのはわかるんだけどデバッグしづらくね?
デバッグを想定する時点で初心者なのかな...教えてエロい人

261:デフォルトの名無しさん
19/01/15 00:45:24.53 DUfu4s9fa.net
>>252
4っつぽっちの分岐で何がそんなに見づらくなるのかちょっと理解できんよ。
いや、煽ってるわけじゃなく本当に
各分岐先のコードが長くなるっていうのならそれぞれメソッドに切り分けるだけじゃないの?

262:デフォルトの名無しさん
19/01/15 02:09:17.70 gvlEsXBIp.net
>>252
if(value == d){
d用処理またはメソッド
}else {
a~c用処理またはメソッド

これじゃダメなの?

263:デフォルトの名無しさん
19/01/15 04:09:30.23 Vsgk6Uc3K.net
>>252
ComboBoxにブチ込むためのクラスを書いてDは継承

264:デフォルトの名無しさん
19/01/15 06:09:12.86 rjgxVR8i0.net
LINQはなかなか身につかんなあ。
とりあえずforで書いといて見直してこれLINQで一行になるんじゃね?と気付いたらいそいそと書き直す感じ。
LINQ脳になってない

265:デフォルトの名無しさん
19/01/15 06:39:49.84 OSSPo6bD0.net
例えば処理順を意識しなくて良い場合、通常のforまたはforeachで処理するのと、Parallel.ForEachで並列処理するのはやはり並列処理の方が早い?

266:デフォルトの名無しさん
19/01/15 07:24:38.34 ohj/8QmzM.net
>>255
質問者の意図とは違うかもしれんがそういうコード書くと怒るやつがいた職場がある
わざわざ継承してうにゃうにゃやらんと怒る
んでできたコードが何がいいのか考えてもさっぱり意味がわからん
本人にメリットを聞いてもさっぱり理解できんというかメリットの話になると必ずボケた返しをする
ありもしない改修を想定してキチガイとしか思えない発言を連発する
そもそも仕様書や設計書に処理がその数で分岐するってあるのに
なんで普通に書いたら怒るんだよ
もうお前とはやってられん
ってとこまでいって仕様書や設計書通りに組んでるのに工数が増えてるのはあんたのせいだ
って会社間の会議になってもまだグチグチ言ってる
その場にいる全員?な状態だった

267:デフォルトの名無しさん
19/01/15 08:37:28.18 biF


268:9zsRRd.net



269:デフォルトの名無しさん
19/01/15 08:41:56.04 AEHaNlhRa.net
>>259
条件分岐が減るとかじゃないの?
それだけ不具合が減る理屈だが、工数が増えてるんじゃ意味ないな

270:デフォルトの名無しさん
19/01/15 08:50:45.78 OahWWfOzM.net
普通のケースでは継承にしても
条件分岐が別の場所に移動するだけだべ

271:デフォルトの名無しさん
19/01/15 09:24:06.17 n85zJfLmM.net
>>258
Parallel.ForEachはオーバーヘッドが大きい
一周に数百ミリ秒かかるくらいの粒度の大きなループでない限りは普通のforeachより確実に遅くなる

272:デフォルトの名無しさん
19/01/15 10:26:04.16 fix0rts+0.net
多態性は手間がかかる割に恩恵が少ないよな

273:デフォルトの名無しさん
19/01/15 16:18:48.41 R0UqBAnw0.net
>>257
foreachならともかくforで書いているなら苦労するだろう

274:デフォルトの名無しさん
19/01/15 16:22:04.50 R0UqBAnw0.net
>>259
逆のパターンなら数多見てきたけど、そのパターンは珍しいな
if分岐が10以上になるからなんとかしてと言われて継承使ったプロトタイプ渡したら、なぜか基底クラスでif文復活してたことならあるけど

275:デフォルトの名無しさん
19/01/15 16:36:00.01 0qvQfApDM.net
C#のforeachってpythonみたいに定義しないでindex取得出来ませんか?forにするしかないでしょうか?

276:デフォルトの名無しさん
19/01/15 16:37:26.00 Oh+57Mh2M.net
[_]

277:デフォルトの名無しさん
19/01/15 16:53:35.12 XrO54/Dg0.net
>>267
foreach単体じゃ無理
Enumerable.Select Method
URLリンク(docs.microsoft.com)

278:デフォルトの名無しさん
19/01/15 17:42:13.30 AbSveg4gd.net
>>267
上のSELECT使った実装例はこんな感じ
foreach (var x in items.Select((item, index) => new { item, index }))
{
Console.WriteLine($"index: {x.index}, value: {x.item}");
}
Listか配列かIEnumerabelどれでやってるかは知らないけどもこれで行けるはず

279:デフォルトの名無しさん
19/01/15 17:49:07.53 u2JtKhAa0.net
forが完全上位互換なのになんで
foreach使うのか?
って今でも思ってるよ俺は
ループにインデックスが必要になったというただそれだけで変更するんだぜ

280:デフォルトの名無しさん
19/01/15 17:55:58.21 AbSveg4gd.net
indexが必要でCountもできる時はわざわざindex生成してforeach使う必要無いと思うけどもLinq使いたい時とかIEnumerabelに実装してるものにわざわざfor使わない派

281:デフォルトの名無しさん
19/01/15 17:58:55.44 AbSveg4gd.net
というか戻り値をIEnumerabelにして抽象化しておく事が多いから余計にforeach使うのはあるかもしれない
Linq拡張メソッド作る時とか諸々

282:デフォルトの名無しさん
19/01/15 19:24:57.54 Kk36dR3w0.net
とりまLINQ使って富豪的に組むだろ

283:デフォルトの名無しさん
19/01/15 20:11:07.93 LAAyKIEna.net
>>252
int CalcDefault();
int CalcSpecial();
int Calc() {
if (IsSpecialCase()) return CalcSpecial();
else return CalcDefault();
}
bool IsSpecialCase() => combo.SelectedValue == "D";
とりあえず最初はこれでいいよ
似たような条件分岐が増えてきたらリファクタリングしてポリモー対応できないか検討
最初からポリモーは大げさだからやらなくていい
でも後でリファクタリングしやすいように責務指向でメソッドを切っておくぐらいはやっておいたほうがいい
このへんのさじ加減は経験則だな

284:デフォルトの名無しさん
19/01/15 20:18:43.20 ToRrrvnYa.net
switchを無くすのに多態


285:なんか使う必要ないね。 すくなくともC#にはデリゲートがあるんだから多態使うぐらいならComboBoxのアイテムに デリゲート持たせた方がいいよ。 個人的にはこれも本当に可読的か疑問だけど。 分岐素直に分岐で書いた方が分かりやすいって



286:デフォルトの名無しさん
19/01/15 20:29:43.48 u2JtKhAa0.net
テストするときに圧倒的にわかりにくいコードになんの意味があるの?
バカのやることは本当にわからない

287:デフォルトの名無しさん
19/01/15 20:31:56.84 LAAyKIEna.net
確かに
分岐が多いとテストしにくい
少しならいいけど限度がある

288:デフォルトの名無しさん
19/01/15 20:50:47.00 u2JtKhAa0.net
設計書で分岐が100個あったらswitchcaseかifで100個書けよ
それが気に入らないなら設計書直せよ
そういう当たり前の手続きを無視してコード書いてる雑魚に俺は超えられねぇ

289:デフォルトの名無しさん
19/01/15 20:54:23.73 ShjRgn6y0.net
switch vs 多態って結局プログラムがDRY & SOLIDになってるかどうかって問題に帰着すんだよな
>>255はDRYでもSOLIDでもない
>>275はSOLIDではあるがDRYではない
多態までいけば完全にDRYでSOLIDなプログラムになる
そのコードが一回こっきりで重複がないという前提だと、DRYのありがたみを実感しにくい
だからswitch派が一定数居るのだろうね

290:デフォルトの名無しさん
19/01/15 20:58:26.66 AbSveg4gd.net
インターフェイス厨だから似たような分岐はインターフェイスで分けて個別実装か本当に共通してるなら継承でなんとかしたくなる
それと見返したら俺酷いスペルミスしててワロタ

291:デフォルトの名無しさん
19/01/15 22:25:49.08 rPJfKlkHp.net
cしか知らないのです
vsをダウンロードして独学でc#勉強し始めたのですが、どうにもなりませんです
オブジェクトだのラムダ式だのデザインパターンだの文法的な要素以外に勉強しないとなにを言ってるのかわからない事が多くて、勉強の進め方が間違ってるのだろうと思いました。
初心者丸出しの質問で恐縮ですが、どんな順で何を勉強したら良いでしょう?
また、良書、良いウェブページなどご存知でしたら、ご教示いただければ幸いです
よろしくお願いします。

292:デフォルトの名無しさん
19/01/15 22:32:18.90 2N1r/ZHN0.net
>>282
物まねでもなんでもいいから何か作りまくれ
用語とかから勉強しなくていい。色々調べるうちに覚える
わからなくなったらやりたいことの頭にC#+スペース入れて検索

293:デフォルトの名無しさん
19/01/15 22:33:11.37 p93FMJH30.net
必要性がわからない概念を理解するのは難しい
それはコード書いた経験が少なすぎるから
Cもほぼ入門書読んだだけでしょ
とりあえず自分が理解できる範囲の知識でなにか作りたい物つくった方がいい

294:デフォルトの名無しさん
19/01/15 22:52:10.98 qux9+5740.net
>>282
主にオブジェクト指向関係が分からないみたいだから
オブジェクト指向入門系の本やウェブサイトを探せばいいんじゃないか?
あるいはC#にこだわらないのであればC++の入門書はC言語との違いとして
オブジェクト指向向けの機能に触れているものが多いと思う
実際にプログラム作ってオブジェクト指向の感覚掴みたいなら
個人的にはちょっとしたゲーム作ってみるのもオススメだな 
UnityならC#使えるし

295:デフォルトの名無しさん
19/01/15 23:25:56.04 Zm1dLYXR0.net
>>282
勉強の進め方というか基本的な理解が浅いのでは
Cでも構造体ネストして疑似継承くらいするだろうし
ラムダにしてもクロージャ要素はともかく匿名関数
とりあえずクラスは関数を纏めているのではなく
型を作りデータと結び付けているという事だね
URLリンク(docs.microsoft.com)
翻訳が割と酷いが公式にもドキュメントはあるよ

296:デフォルトの名無しさん
19/01/15 23:31:48.76


297:grH+sReD0.net



298:デフォルトの名無しさん
19/01/15 23:33:48.23 grH+sReD0.net
図々しいお願いで恐縮です

299:デフォルトの名無しさん
19/01/15 23:35:09.56 opRVBBPd0.net
デザパタは経験積まないと有り難味が判らないから放置でいいよ
作りたいものを完成させるにはどうすれば近道かだけ考えろ

300:デフォルトの名無しさん
19/01/15 23:40:43.54 grH+sReD0.net
>>289
デザイパターンはある程度蓄積が出来てないとありがたみがわからない、だから、後回しでも良いと言う意見ですね
クラスを作る定石集のようなものだと思ったので、先に勉強した方が良いのかとも思っておりました
定石知らなくても、楽しく将棋はできるのだから、後回しでも良さそうですね
ご意見ありがとうございます

301:デフォルトの名無しさん
19/01/15 23:50:54.16 u2JtKhAa0.net
vector3Dクラスの内部に
vector2Dクラスは普通は作らないんだぞ
知ってた?
しかし、両クラス共にメンバx,yを保持する
そう、お前らの大っっっっっっっ嫌いな重複だw
しかし、極上のバカでもない限り
vector3Dをvector2D+zで作るやつなんてこの世にいないんだよ
わかるな?
この例ではわかりやすく
XYZで説明してやったが
世の中ってのはこういうもので満ち溢れてるんだよ
xyでもyzでも計算するときがあるのさ
わかりにくいだけで
xyをvector2Dで作ってしまったオブジェクトのyzの計算は不格好なのさ
オブジェクト指向は破綻している
そこをわかった上で付き合うんだ

302:デフォルトの名無しさん
19/01/16 00:03:56.21 9UhWNW230.net
>>287
物に例えるってのは常々ダメだと思うわ、関係ない要素が絡んできて
人に依ってはマイクロウェーブとか出るの?とか思うだろうし
クラス設計としちゃフィールドは構造体と一緒だけどメソッドは…
うん、とりあえず手続き型っぽく作っても良いだろう\(^o^)/
多態性は+演算子の数値なら加算が文字列だと連結になるとかね
C経験はCUIのみという事かな?.NET Frameworkなんか知らん!という事であれば
Visual C++ Windows デスクトップアプリを従来通りWin32で作っても良いと思うけど
手っ取り早くダイアログベースで作成してメッセージハンドラに渡ってきたIDで振り分ける
ぶっちゃけ.NET FrameworkもWin32 APIをラップしてるだけなのでC#も基本は変わらない
フォームデザイナーで弄くってコントロールにイベントハンドラ割り当てるだけ

303:デフォルトの名無しさん
19/01/16 00:44:36.48 RsJGf8R10.net
>>292
制御系のプログラムばかり書いているのです
どうかするとロジアナ見てる方が多いかもしれませんが
パソコンの世界はほとんどわからないです

304:デフォルトの名無しさん
19/01/16 01:02:27.00 NripHWV9a.net
>>293
制御系ならCでも自然とオブジェクト指向的な設計でコード書いてたはずだと思う。
「キーをスキャンしてデバウンス処理を担当するコード」とか「LCDドライバーへの表示データの転送を担当するコード」
とか、そういう仮想機械をコード上にいっぱい作ってたはず。
オブジェクト指向のオブジェクトって要はこの仮想機械のこと。
クラスはそれを書きやすくするための仕組みに過ぎん。
だからたぶん心配してるよりずっと簡単な話だと思うよ

305:デフォルトの名無しさん
19/01/16 01:07:11.33 RsJGf8R10.net
>>294
私の頭の中はオブジェクト指向とは無縁です。
設計そのものに、そんな考え方を取り入れていないので、どこまでも手続き型で考えてしまうのです。
強いて言えば、状態遷移を作るときに少し似たような考え方になるだろうか、という程度ですね
なにをクラスとすれば良いのか、そういうところがピンとこないので、わからないのです。

306:デフォルトの名無しさん
19/01/16 01:13:49.60 9UhWNW230.net
いわゆる組み込み系か、それだと逆にこっちが経験乏しいけど、Cライブラリなら馴染みはあるのかな
するとまずはVisual C++からWindowsコンソールアプリをC/C++ライブラリで作ってみるとかかねぇ?
APIとかはC#にしろMSDN…今はMicrosoft Docs?を見るしかないね、C#ならIntelliSenseにも詳細出る
でもC#からなんか制御するとかだと結局プラットフォームのネイティブAPIや専用ライブラリになるか?
とりあえずオブジェクト指向とかを学びたいのであればC++や他スクリプト言語とかでも良さそうな

307:デフォルトの名無しさん
19/01/16 01:15:08.32 NripHWV9a.net
>>295
でもキュー(リングバッファー)ぐらい実装したことあるでしょ?
端的に言えばあれがオブジェクトの一例っすよ。
データ(配列 + 読み出しポインタ + 書込みポインタ)と、
それをリングバッファーに見せかけるコードの組み合わせ
簡単でしょ

308:デフォルトの名無しさん
19/01/16 01:30:35.70 RsJGf8R10.net
>>296
言語そのものはどれでも良いと考えています
vsのヘルプを読む限り、同じことができてるようですから
どうせなら、c#を勉強してみたいなと考えております

309:デフォルトの名無しさん
19/01/16 01:36:56.53 RsJGf8R10.net
>>297
リングバッファがオブジェクト指向の考え方なのですか。
なるほど。
仮装化したデバイスのようなもの、ということなのでしょうか。ハードディスクのドライバやNICのドライバは確かにアプリケーションからみると仮想的で、実際のハードウェアの持つ機能とは関係なくつかえるようにしますね
少し例えがわかった気がします
ありがとうございました
今日は遅いので、この辺で失礼します

310:デフォルトの名無しさん
19/01/16 02:56:08.32 JSfUU2TA0.net
private Task<int> hoge{....}
というメソッドがあって
var t=hoge();
でタスク走らせた後、ちょっと別の処理してから
t.ContinueWith(()=>...);
と継続タスクを付け足した場合、
付け足した時点でhogeが終わってれば
すぐ継続タスクの処理を開始してくれますか?

311:デフォルトの名無しさん
19/01/16 08:32:38.24 vAlWKxD3a.net
>>300
はい

312:デフォルトの名無しさん
19/01/16 09:09:41.77 CvIYGZ/W0.net
なんならTask.CompletedTaskからでもContinueWithできる

313:デフォルトの名無しさん
19/01/16 11:29:57.72 O5e9hp9mM.net
>>299
オライリーのヘッドファーストオブジェクト指向がおすすめ

314:デフォルトの名無しさん
19/01/16 16:28:16.62 UcQqPOFa0.net
ついでに、ユニットテストを身につける本をだれか教えてくれんかな
どの入門書もテストについて全く教えてくれんがどうなってんだ・・・・

315:デフォルトの名無しさん
19/01/16 16:40:21.97 vTKVQdGXF.net
そのうちテストのテストも書きたくなってくる

316:デフォルトの名無しさん
19/01/16 18:30:37.61 rdmn+dmd0.net
なかなかゲームの自動プレイを実装するの難しいな~

317:デフォルトの名無しさん
19/01/16 19:00:09.87 uHZTYjv/a.net
>>241 >>245 >>306
>>1

318:デフォルトの名無しさん
19/01/16 19:04:33.77 rdmn+dmd0.net
1は俺の書き込みちゃうでぇ

319:デフォルトの名無しさん
19/01/16 20:32:03.28 LiM0dr73p.net
>>303
どうもありがとうございます
java c#を習得している人が前提の書籍のようですね
オブジェクト指向の勉強には良さそうな本で助かります
javaも知らないので、今度丸善にでも行って太刀打ちできそうか、少しみてから判断しようと思います

320:デフォルトの名無しさん
19/01/16 21:05:07.42 wbo0XsPzd.net
>>301
>>302
ありがとうございました

321:デフォルトの名無しさん
19/01/18 05:08:46.83 bjcECFHM0.net
すまんが、VisualStudio2017についてる.NET Core2.1って、2.2にするにはどうすればいいの?
勝手に入ったんだからVisualStudio周りからアップグレードする方法があって良いような気がするものの・・・・どこにあるんだろ!?
URLリンク(dotnet.microsoft.com)
それともこっからダウンロードしてきて入れちゃえば良いのかな?

322:203
19/01/18 07:03:56.21 3+zdHjT80.net
>>287
動物スーパークラス作って猫クラスと犬クラス作って猫にニャーニャー 犬にワンワンと鳴かせるプログラム作りな
完成したらオブジェクト指向習得
これで月18万の8次請非正規になれるよ
面談では経験8年で勘定系COBOLの経験有りと答えてね

323:デフォルトの名無しさん
19/01/18 07:26:09.39 UV6kIYNk0.net
>>311
VSのインストーラから入れられるのはLTSだからか知らんが今のところ2.1まで
2.2はSDKで入れてプロジェクト毎にターゲットとして指定すればおk

324:デフォルトの名無しさん
19/01/18 07:46:49.16 tSI143EMa.net
>>312
意地が悪いな

325:デフォルトの名無しさん
19/01/18 09:51:47.00 LKOsIFRz0.net
オブジェクト指向は色々勉強するより
ちょっとしたゲームでも作ったほうが分かりやすいと思うわ
モンスターとヒーローを作って相手を攻撃するメソッドと攻撃を受けたときにダメージを受けるメソッドを書いて 終わり

326:デフォルトの名無しさん
19/01/18 11:05:46.51 OxZoH0bi0.net
非同期のファイル検索処理を途中でキャンセルしたいのですが
時間がかかる処理はDirectory.GetFilesなので
CancellationPendingをどこに書いても処理が終わるまでキャンセルされないのですが
どう書けばよいでしょうか
URLリンク(dotnetfiddle.net)

327:デフォルトの名無しさん
19/01/18 12:09:48.64 FhyCLWa9d.net
>>316
こういうやつ?
URLリンク(qiita.com)

328:デフォルトの名無しさん
19/01/18 12:11:43.78 70siMoMg0.net
>>316
Directory.GetFiles()の代わりにDirectory.EnumerateFiles()を使う

329:デフォルトの名無しさん
19/01/18 13:00:12.01 Xg90leRQM.net
>>315
ゲームはオブジェクトと環境との間のインタラクションが多すぎるからオブジェクト指向を学ぶには適さない
プロでも結局全部グローバルスコープでアクセスできるようにしとけみたいな設計にしかならん

330:デフォルトの名無しさん
19/01/18 14:06:54.39 LKOsIFRz0.net
じゃあやっぱ>>312がベストアイディアだな

331:デフォルトの名無しさん
19/01/18 17:53:25.90 3+zdHjT80.net
俺が先輩なら新人に自動車クラスとタイヤクラス作らせて型継承でタイヤ交換


332:は容易にするようにと課題出す 出来たら6年選手として売る



333:デフォルトの名無しさん
19/01/18 17:56:23.24 3+zdHjT80.net
新人言うても30歳超えの中途ね
コスパ良いんだわ
年食ってると従順でパワハラにも耐える
そう言えば20代新人とか見たことない
存在するのかね

334:デフォルトの名無しさん
19/01/18 18:53:47.09 LKOsIFRz0.net
すまんがIT企業の闇と経験年数詐欺の手法はマ板でやってくれんか?
ム板は数年後のプログラミング教育必修化に向けてフレッシュでさわやかな若者向けの板に改装する予定なんだが

335:デフォルトの名無しさん
19/01/18 19:22:42.59 LUo6T6YMr.net
おまえが改装するの?

336:デフォルトの名無しさん
19/01/18 19:45:43.10 adSAogxL0.net
マ板話をム板でするなハゲ

337:デフォルトの名無しさん
19/01/18 19:57:21.94 zUd1LnnRd.net
>>325
ハゲ・ヅラ板の話をム板でやるなよ

338:デフォルトの名無しさん
19/01/18 20:48:28.34 LKOsIFRz0.net
早いところプログラミング必修化してほしいもんだぜ
会社の愚痴とブラック会社アピールが「プログラミングのお話」だと思ってるオッサン多すぎ

339:デフォルトの名無しさん
19/01/18 21:54:37.77 v/mpstOM0.net
IT業界の非正規形態に未来がなさ過ぎて辛い
いかんいかん 楽しい気持ちでラムダ練習せねば

340:デフォルトの名無しさん
19/01/18 22:02:21.54 BJ9hxZ250.net
↓プログラミングを必修化した結果
URLリンク(pbs.twimg.com)

341:デフォルトの名無しさん
19/01/18 22:16:50.60 v/K+38IX0.net
なんかちがう

342:デフォルトの名無しさん
19/01/18 22:41:31.47 yv7JhRUX0.net
そもそも資格試験は政治家の天下り先がつくってる
いみない
なぜなら資格を作ってるところの役員事態は
知識がないのだから。

343:デフォルトの名無しさん
19/01/18 22:57:58.37 1ZiD/8V00.net
文字列から数字をtmpWとtmpHに抜き出すクラスを作りたいのですがどうしたらいいですか?
演算子記号は+−もある、数字の桁数は不明で小数点もあり、数字が入るときは小文字一字始まり、引数はw or hで抜き出す戻り値を示す。

対象文字
①w900×HH
②WW×h1000
③WW×HH
④w900/h100
結果 引数がwなら左  hなら右
①tmpW=900 tmpH=""
②tmpW="" tmpH=1000
③tmpW="" tmpH=""
④tmpW=900 tmpH=1000

344:デフォルトの名無しさん
19/01/18 23:04:40.52 qic/InUuM.net
数字文字列は尻からスキャンが定石か

345:デフォルトの名無しさん
19/01/18 23:09:53.93 FQpSYkdr0.net
正規表現で抜けば?

346:デフォルトの名無しさん
19/01/18 23:11:37.85 OxZoH0bi0.net
>>317
ありがとうございます。調べてみます
>>318
ありがとうございます。しかし同じくキャンセル出来ませんでした

347:デフォルトの名無しさん
19/01/18 23:58:07.57 JDQsFvp5a.net
フォルダの中に万単位でファイル作ってGetFiles()テストしたことがあったけど
10年以上前のPCでも非同期にしなきゃならんほど遅くなかったと思ったけどなあ
普通に遅い原因はユーザーコードの方にあるんじゃないの

348:デフォルトの名無しさん
19/01/19 00:06:23.94 h3VcH88n0.net
10年前のPCはそこまで性能悪くないだろ

349:デフォルトの名無しさん
19/01/19 00:41:04.18 pEXPsY3Y0.net
>>332
文字列を×/区切りの前後でsplit
それぞれの先頭がwhなら以降を戻り値

350:デフォルトの名無しさん
19/01/19 01:20:56.46 2Tiw7zAQa.net
>>336
誰と話してるの

351:デフォルトの名無しさん
19/01/19 05:18:33.12 M8Q3zGyy0.net
>>332
今ちょうど過疎ってるお題スレにちょうど良さげなのでお題スレにコピペさせてもらおう。

352:デフォルトの名無しさん
19/01/19 07:28:05.47 +IqL7b8U0.net
>>334に一票

353:デフォルトの名無しさん
19/01/19 08:43:09.59 hupcYVyzM.net
>>332
④が難題だな。どうやって実現しようかなぁ

354:デフォルトの名無しさん
19/01/19 08:48:50.91 Oo+kKfbG0.net
indexOfとLowerでイケるんちゃうか?

355:デフォルトの名無しさん
19/01/19 08:49:22.84 Oo+kKfbG0.net
あとsplit

356:デフォルトの名無しさん
19/01/19 14:47:58.46 +IqL7b8U0.net
>>342
確かに w
まあtypoだろうからスルーしてやれよ

357:デフォルトの名無しさん
19/01/19 17:07:22.10 FJgPPckz0.net
脊髄反射で書いたので添削頼む。
public static string[] GetHW(string input)
{
string[] returnval = new string[2];
string[] temp = input.Split('+','-','*','/');
if (temp[0].StartsWith("w", StringComparison.Ordinal))
temp[0] = temp[0].TrimStart('w').Insert(0, "tmpW=");
else if (temp[0].StartsWith("WW", StringComparison.Ordinal))
temp[0] = "tmpW=\" \"";
else
temp[0] = "それ以外の何か";
if (temp[1].StartsWith("h", StringComparison.Ordinal))
temp[1] = temp[1].TrimStart('h').Insert(0, "tmpH=");
else if (temp[1].StartsWith("HH", StringComparison.Ordinal))
temp[1] = "tmpH=\" \"";
else
temp[1] = "それ以外の何か";
return temp;
}

358:デフォルトの名無しさん
19/01/19 17:11:32.02 FJgPPckz0.net
あ、Replaceでよかった。
returnvalも無意味。

359:デフォルトの名無しさん
19/01/19 17:39:42.56 FJgPPckz0.net
1文で
public static string GetHW(string input)
{
return input.Replace("w", "tmpW=",StringComparison.Ordinal)
.Replace("h", "tmpH=", StringComparison.Ordinal)
.Replace("WW", "tmp=\" \"", StringComparison.Ordinal)
.Replace("HH", "tmp=\" \"", StringComparison.Ordinal)
.Replace("+", " ", StringComparison.Ordinal)
.Replace("-", " ", StringComparison.Ordinal)
.Replace("*", " ", StringComparison.Ordinal)
.Replace("/", " ", StringComparison.Ordinal);
}

360:デフォルトの名無しさん
19/01/19 18:47:09.81 jmND9WvPa.net
>>332
質問内容はともかく、プログラマならもうちょっと読み手が推測で補完しなくても
内容を過不足なくきっちり読み取れるような文章を書いた方がいいと思う。
ってういか、率直に言って日本語変だよw

361:デフォルトの名無しさん
19/01/19 18:53:12.69 +IqL7b8U0.net
文章はともかくサンプルデータと結果を書いてるのは褒めてもいいと思うよ
他の質問者もぜひ見習って欲しい

362:デフォルトの名無しさん
19/01/19 19:00:37.08 ov6XiAZ2M.net
競技プログラミングの問題文よりましだろ

363:デフォルトの名無しさん
19/01/19 19:36:35.93 PaRH8QDQF.net
独学手探りで勉強しながら作っていたアプリケーションが一応形になったので
折角だから公開してみようと思っているんですが、
デバッグやライセンス確認など、リリース前に確認する事、の知識が全くないことに気づきました
少額ながら有料公開にしようと考えている為、
最低限これとこれは確認しないと、って物を教えて頂きたいです

364:デフォルトの名無しさん
19/01/19 19:39:05.53 9NMu+pMT0.net
>>352
なんのアプリケーションかも分からないし、答えようがない

365:デフォルトの名無しさん
19/01/19 19:41:36.75 FJgPPckz0.net
有料ってことは、不具合に対する改善要求が来る可能性もあるので、責任の範囲(逃げ道)を明確にしておく。

366:デフォルトの名無しさん
19/01/19 19:42:32.49 XwZdf3VkM.net
>>349
そこは、「あなた、日本語お上手ですね!」で煽らないと

367:デフォルトの名無しさん
19/01/19 19:53:49.36 oPTngqYr0.net
煽ってどうすんだよガイジ

368:デフォルトの名無しさん
19/01/19 20:31:17.01 h4R+weTi0.net
>>313
今の所、普通に使っていて2.2にはならないのか
ありがとう

369:デフォルトの名無しさん
19/01/19 21:00:12.97 jmND9WvPa.net
>>332
まあ、適当に忖度して書いてみた
普段正規表現あんまり使う機会がないんでどっかおかしいかもしれん
URLリンク(ideone.com)

370:デフォルトの名無しさん
19/01/19 21:02:54.87 BW5TF7JUa.net
>>352
ヘタしたら訴訟沙汰になりかねないからやめとけ
まずはベータ版


371:として無料で配るとかして様子を見るべき



372:デフォルトの名無しさん
19/01/19 21:59:06.23 +chQE6yt0.net
>>352
・C#で作ってるならデコンパイルされても大丈夫か確認しておく
・GPL汚染に注意する

373:デフォルトの名無しさん
19/01/20 23:51:42.85 NEqE5pSC0.net
ソフトで商売って労力に見合わないな
キラーソフトでも作れればそれだけで暮らせるんだろうけど

374:デフォルトの名無しさん
19/01/21 00:00:18.20 lx5Y5NZb0.net
ニッチな分野か、あるいは既存ソフトより高性能であれば有料でも売れる可能性はある

375:デフォルトの名無しさん
19/01/21 01:05:58.77 +LWwKYuDa.net
業務アプリなら大したスキル無くてもやってることがビジネスとして正しくてちゃんと営業すれば売れるよ
今時ツール系で稼ぐのはまあ無理

376:
19/01/21 05:02:51.88 BX1YVz9RH.net
>>362
業務にての使用を公認されるためには、有料(シェア)ソフトの方が有利なようですよ、秀丸とか

377:デフォルトの名無しさん
19/01/21 07:23:38.48 EWbXmLTJ0.net
ASPばかりしてたらWinFormの作り方忘れた
つか今だにWinFormの案件あるのかね
小ツールはコンソールアプリで作っちゃうから勝手が思い出せない

378:デフォルトの名無しさん
19/01/21 07:27:48.21 V744VEzgd.net
>>346
>>348
ありがとうございます!調べてやってみます!

379:デフォルトの名無しさん
19/01/21 07:41:57.18 A1e+SXhY0.net
ASPの案件がある方が驚きだわ

380:デフォルトの名無しさん
19/01/21 07:46:49.66 1hBKI8k2D.net
>>367
大手はWindowsServer入れてる率が多い気がする

381:デフォルトの名無しさん
19/01/21 07:54:57.12 BPZ4z+V2d.net
>>368
ASP.NET(かもしくはASP.NET Core)やろってツッコミじゃね?

382:デフォルトの名無しさん
19/01/21 08:07:17.42 pqXwpH4cd.net
ASPはもうASP.NETに移行済んでるものと思ってた

383:デフォルトの名無しさん
19/01/21 08:20:46.33 V744VEzgd.net
>>358
わざわざ有難うございます!
これも書いて勉強してみます!

384:デフォルトの名無しさん
19/01/21 10:03:06.25 HJdNRmJRM.net
開発マシン XP32bitでVS2005で作ったC++のdllを同じくVS2005で作ったC# WinFormアプリでDllImportを使って利用しています。
Win10 64bitで実行するとC++の関数をコールすると
間違ったフォーマットのプログラムを読み込もうとしました。(HRESULTからの例外: 0x8007000B)
となります。
同じ事をwin7 64bitのVS2013で作ったアプリでしても(当然)問題なく動きます。
VS2005で作ったアプリで動かす方法はないでしょうか。

385:デフォルトの名無しさん
19/01/21 10:21:26.36 yj1nRareM.net
プロジェクト設定でany cpu になっている部分をx86にしなされ

386:デフォルトの名無しさん
19/01/21 11:03:04.79 HJdNRmJRM.net
>>373
ありがとうございます!
無事動作しました!

387:デフォルトの名無しさん
19/01/21 12:12:30.14 1DQQx7qk0.net
新規プロジェクトをVBでやりたがるPMにC#をオススメしたいのですが、C#が決定的に優れてる点はあるでしょうか?
VB読みにくいなんて言っても苦しむのはお前だろ関係ないという雰囲気で

388:デフォルトの名無しさん
19/01/21 12:30:08.86 eMR7WidkM.net
ループの評価とコーディング量かな
手持ちプロジェクトをSharpDevelopで変換してみなされ

389:デフォルトの名無しさん
19/01/21 12:44:54.58 9okmCQOjM.net
プログラマの品質
実際にC#使うかVB使うかはどうでもいいが、要員をC#経験者に限定することでリスクは格段に下がる

390:デフォルトの名無しさん
19/01/21 12:55:35.86 qfMy6igJ0.net
ネットに転がってるサンプルコードの量
(ちょっと慣れればすぐに読み替えられ�


391:驍謔、になるってのは秘密)



392:デフォルトの名無しさん
19/01/21 13:14:20.48 dccJtP51d.net
>>377
担当PGは決まってるんだからそんなこと言っても説得力なし

393:デフォルトの名無しさん
19/01/21 13:48:30.91 NM3vIbDMa.net
日本人を説得するのはこれが一番
URLリンク(yellow.ribbon.to)
実際問題.NETの世界ではC#が標準で「みんな」が使ってる。
逆にあえて非標準のVBを使う理由って何なんですかと聞いてやればいい
もう少し合理的な人なら、ラムダ式とか、デリゲートのadd/removeに演算子が使えることとか、
三項演算子とか、null合体演算子とか、代入演算子が右辺の値を返す式であるとか、
プロパティーのいろんな省略記法とか、C#ならいかに簡潔にかけて同じことをVBでやるといかに冗長になるか
具体例を見せてやればいいよ

394:デフォルトの名無しさん
19/01/21 14:10:03.70 NbFzEAOW0.net
>>380
> ラムダ式とか、デリゲートのadd/removeに演算子が使えることとか、
> 三項演算子とか、null合体演算子とか、代入演算子が右辺の値を返す式であるとか、
> プロパティーのいろんな省略記法とか、
単なる印象だけど>>375のところのPMはそう言うのを嫌いそうな気がする

395:デフォルトの名無しさん
19/01/21 16:35:43.35 trZhU3Ina.net
Labelを貼って、そのTextを空白にしたらデザイン画面でクリックできなくなってしまったのですが
どうやって選択状態にしたらいいのでしょうか

396:デフォルトの名無しさん
19/01/21 17:01:29.53 NM3vIbDMa.net
>>382
デザイナで以下のどれかの操作をする
(a) [ctrl] + z
(b) マウスでそのラベルがあったあたりをドラッグ
(c) [ctrl] + [alt] + t
(d) プロパティウィンドウの上部のドロップダウンで選択

397:デフォルトの名無しさん
19/01/21 17:54:05.53 trZhU3Ina.net
>>383
ありがとうございます
C案でやらせていただきました

398:375
19/01/21 18:26:05.83 1DQQx7qk0.net
PM的にはVBのが簡単で人員の確保が容易との理由ですが、イベントリスナにクラスレスで全処理書くベテランエンジニアの意向を汲んでるんだと思います
自分はサンプルの多さとC系で無い記述に不慣れという理由でC#を希望しましたが、ベテランに寄せられるんだろうなと諦めムードです
ちなみにベテランのスマートUIは芸術の域で若輩の自分には追従不可です
コード量も多く見積りが高く出来るとPMからも信頼されています

399:デフォルトの名無しさん
19/01/21 18:37:52.16 PrrgsGFM0.net
今2019年やぞ……。
生産性を上げる技術を入れる気が無い、そのPMにはC#のメリットはメリットに見えないだろうなぁ。
ベテランは古い技術と心中できるけども……

400:デフォルトの名無しさん
19/01/21 19:12:08.60 R3pW/ayE0.net
ループ内で一時変数宣言したらコストが増えるってのを知って
新しいブロック作って変数宣言してみたけどなんか見た目がすっきりしない
ループ内の変数宣言の新機能とかないのかな

401:デフォルトの名無しさん
19/01/21 19:14:47.05 FhYMYDcaa.net
>>386
生産性って言葉は立場や状況によって指してるものが変わるんやで

402:デフォルトの名無しさん
19/01/21 19:26:17.46 tYy/rBPTM.net
ソフトウェア作れると言うとソフト作って売って大儲けできるんじゃないかと
よく言われる
世間はそういう感じで見てる

403:デフォルトの名無しさん
19/01/21 19:27:19.80 0j7Aeluod.net
権力持ってる人がVB推しなら決定でしょ
できることはほぼ同じだし諦めな

404:デフォルトの名無しさん
19/01/21 19:36:49.44 lF845d4L0.net
>>387
コストが増えるってローカル変数が増える事?
初期化するスタックの増加


405:やレジスタに乗りづらくなるとか? さほど気にするもんでも…とりあえずAnyCPUで64bit優先オヌヌヌ



406:デフォルトの名無しさん
19/01/21 19:59:33.83 2/OM9doDa.net
>>386
意識高めても虚しいだけだよ
10年この仕事して啓蒙もしたけどなにも変わらなかった
9割5分の人材はそもそもシステム開発に興味ないから啓蒙しても無駄
転職するか割り切るかどちらかしかない
環境を変えようと思ったら負け

407:デフォルトの名無しさん
19/01/22 05:26:41.64 1xYsQegz0.net
正規表現パズルやってたのか・・・参加したかった

408:デフォルトの名無しさん
19/01/22 12:26:50.15 vFo5wc3/a.net
パズル言うほど難しい問題出てない気が...
どっちかっていうと質問自体の方がハズ(
正規表現便利だけど他人の書いたの読むのキツいよねw
しょっちゅう使ってれば違うのかもしれんが

409:デフォルトの名無しさん
19/01/22 15:21:12.16 pHhZylOrM.net
ややこい正規表現の場合
コメントで想定okパターンくらいは書くようにしてる

410:デフォルトの名無しさん
19/01/22 15:22:14.22 pHhZylOrM.net
あとテストコード入れとく場合も

411:デフォルトの名無しさん
19/01/22 17:14:18.11 4H8Bkb5P0.net
フォームアプリケーションにtrackbarを2つ用意して、
pcに接続されたモノラルマイクの音量(感度?)とパンニングをそれぞれ操作したいんですが
適当な検索ワードがわからずにたどり着けませんでした
できるだけシンプルに、どう書けば可能でしょうか?

412:デフォルトの名無しさん
19/01/22 17:49:02.10 vFo5wc3/a.net
ググったらこんなのが出てきた
読んでないけどなんかすごい面倒くさそう...
URLリンク(web.archive.org)URLリンク(www.terra.dti.ne.jp)

413:デフォルトの名無しさん
19/01/22 18:36:37.95 NN+MTXVc0.net
質問です
ファイルの移動を扱う自作メソッドの結果を扱うクラス(Aとする)を作りました
このクラスに
class A{
...
public static A Output_IsCanceled(string 元のファイル) {
//引数を受けて動作をキャンセルしたことを示す結果を返す。
}
}
のように典型的な結果を出力するメソッドを追加したのですが、
このAを継承したクラスBにこのメソッドもこのメソッドを上書きしたメソッドも実装させたくありません。
なにかスマートな解決方法はあるでしょうか。
私には大人しく別のクラスに移すくらいしか思いつかないのですが。

414:デフォルトの名無しさん
19/01/22 18:49:41.50 P5rqpQdz0.net
>>399
そのメソッドを外したクラスを作ってクラスAとクラスBに継承させる

415:デフォルトの名無しさん
19/01/22 18:49:53.30 lqDMGVH00.net
親作って別々に継承

416:デフォルトの名無しさん
19/01/22 19:00:35.92 NN+MTXVc0.net
なるほど 言われてみれば簡単でしたね
ありがとうございます

417:デフォルトの名無しさん
19/01/22 22:12:29.98 ttdon+q40.net
object型の変数に入れた匿名クラスのプロパティを取得する方法で
詰まっております。
object hoge = new { fuga = 1 };
int a = hoge.fuga ←こういうイメージで取得したかったのですが。。。
ご教授よろしくお願いいたします。

418:デフォルトの名無しさん
19/01/22 22:19:56.81 bu0N7pF20.net
>>403
なんでそんなことしたいの?

419:デフォルトの名無しさん
19/01/22 22:25:46.51 ttdon+q40.net
>>404
Dapperの引数がobject型だったのですが、Dapperに渡す前の
匿名クラスのプロパティの値を元に一つ条件式を作りたかったんです
object型の匿名クラスからどうやって値を取るのか興味もありまして

420:デフォルトの名無しさん
19/01/22 22:26:33.77 qwoCd5dDa.net
ほら宇宙刑事ギャバンの必殺技みたいなあれだよ

421:デフォルトの名無しさん
19/01/22 22:39:23.63 g3EQ5hiYa.net
>>405
無理
渡す先の引数がobject型だからって変数の型をそれに合わせる必要はないだろ
var使えよ

422:デフォルトの名無しさん
19/01/22 22:41:18.57 0fUOX4Xc0.net
>>403
リフレクションを使った力業
var a = ( int )hoge.GetType().GetProperty( "fuga" ).GetValue( hoge );

423:デフォルトの名無しさん
19/01/22 22:45:23.28 UB+BgHs40.net
>>403
int a = ((dynamic)hoge).fuga;
てしたら取れた。なおインテリセンスはきかない。

424:デフォルトの名無しさん
19/01/22 22:47:54.29 N3agGC610.net
>>409
これは全く頭になかったわ

425:デフォルトの名無しさん
19/01/22 23:01:01.54 ttdon+q40.net
>>409
値が取れました。ありがとうございます。
結構トリッキーになるみたいなので
多用は避けた方が無難かと学びました
しかし、Dappreはさらにプロパティ自体も自前で取得するので
手練れの外人は違うなと

426:デフォルトの名無しさん
19/01/22 23:21:33.35 0fUOX4Xc0.net
>>411
Type.GetProperties()でプロパティの一覧が取得出来るよ。
foreach ( var propertyInfo in hoge.GetType().GetProperties() )
{
var value = propertyInfo.GetValue( hoge );
Debug.WriteLine( $"{propertyInfo.Name}={value}" );
}

427:デフォルトの名無しさん
19/01/22 23:32:00.27 ttdon+q40.net
>>412
なるほどそうやるのですね
知らないことが多いので参考になります

428:デフォルトの名無しさん
19/01/23 00:01:29.03 n+ibBTmv0.net
Androidの実機持って無いんだけど、もし、完成したC#のアプリが有った場合、
DownLoad から、実行まではどうすればいい?
.Net のインストールから始まるの?
C#アプリはGooglePly からDLするの? それとも自前のWebサイト?

429:デフォルトの名無しさん
19/01/23 03:41:42.64 g/jeFpr60.net
WPFって、最初のGUIデザインはデザイナで出来ますが、ユーザーの入力に応じてGUIを変化させたい場合
(例えば、テキストボックスに3と入力したらラベルを3つ追加するとかの場合)
xamlではなくC#のソースコードでコントロール追加せざるを得ないのでしょうか?

430:デフォルトの名無しさん
19/01/23 04:35:34.67 OkP0wizv0.net
>>411
匿名クラス使わなきゃいいやん

431:デフォルトの名無しさん
19/01/23 07:17:48.93 bZ1m5CuBM.net
>>415
wpf xaml 条件分岐
でググレ

432:デフォルトの名無しさん
19/01/23 08:30:39.69 YOQQL4jNa.net
>>415
よく考えよう
その例の場合、お前はコントロールを追加したいんじゃなくて表示対象の文字列を増やしたいんだろ?
C#からは「表示対象の文字列を追加する」操作だけをして、コントロールを追加するのはバインディングに任せるのがWPFの思想だ
>>417は間違いで、ググるべきキーワードは DataTemplate
コレクションに文字列を追加するだけで勝手にコントロールが追加されるようになる

433:デフォルトの名無しさん
19/01/23 08:36:51.99 YOQQL4jNa.net
ちなみにWebなら上記のようなまどろっこしいことをしなくてもRazorテンプレートの中に直接forループを記述するだけだ
WPFの難解なバインディングは概念ばかりが先行してユーザーを置き去りにする典型的なMSの失敗作

434:デフォルトの名無しさん
19/01/23 09:43:36.18 qi0lTRAT0.net
上の人はワケワカラン書き方しているが、wpfではListBoxのItemは自由にかけるから、そこにLabelを配置して追加削除をやるってのが定番ね

435:デフォルトの名無しさん
19/01/23 09:47:33.21 NxchbiGLM.net
>>420
間違い
Itemsには文字列のコレクションをバインドする
でItemsTemplateでDataTemplateを適用させてLabelを生成させる

436:デフォルトの名無しさん
19/01/23 11:55:57.45 tAarVqiS0.net
WPF は知らないけど、一般的に、JavaScript の状態管理なら、
Vue.js, Nuxt.js など、状態管理用のフレームワークを使う

437:デフォルトの名無しさん
19/01/23 12:40:46.32 x96ZzLYOr.net
ここは今からjavascriptのスレになりました

438:デフォルトの名無しさん
19/01/23 14:43:06.09 PhLCwjBwd.net
>>422
ウゼーーーー

439:デフォルトの名無しさん
19/01/23 17:42:05.37 yPNynzM60.net
最近、業務システムはデータベースとデータ操作言語が8割でC#はさほど重要じゃないんじゃ。。。
と疑うようになってきました
C#が主役の開発って、ゲームくらいですかね

440:デフォルトの名無しさん
19/01/23 17:50:21.87 qdiHHHQi0.net
>>425
それも統計に嘘がある可能性あり。以下、各社各様、自分に都合の良いことを行っている:
一般人:「Androidのアプリの大部分は Java である」
Unity:「百万種類以上あるゲームアプリの半数が Unity(C#)製である」
Adobe:「Flash製ゲームが、100万種類を超えた。」
日本人:「日本の歴代で一番売れたゲームは、Final Fantasy xx で、700万本(売り上げにして500億円程度)」
外人:「MineCraft というゲームの売り上げが一兆円越えた。」

441:デフォルトの名無しさん
19/01/23 19:31:40.08 qdiHHHQi0.net
誤: 外人:「MineCraft というゲームの売り上げが一兆円越えた。」
正: 外人:「MineCraft というゲームの売り上げ本数が一億本越えた。」
Flash に関しては、「one million games」みたいな言葉を使って、
Adobe が「自慢」していたんだそうだ。

442:デフォルトの名無しさん
19/01/23 20:40:29.23 2LIdCPNFa.net
>>425
ミクロサービス開発するとデータベース殆ど触らなくなる
EF便利

443:デフォルトの名無しさん
19/01/23 21:24:52.01 xzA+L1aD0.net
SQL手書き最高ひゃっはp

444:デフォルトの名無しさん
19/01/23 22:51:20.49 xSBZbPpe0.net
C#のデバッグ画面の診断ツールについて質問です
メモリ使用量のプロファイルはデフォルトで無効だと思うんですが、いつの間にかクリックしてしまって
有効になったまま無効に戻せません
VCの場合はクリックすると元に戻す出来る場所があるのですが
レジストリをいじらないと駄目なんでしょうか?

445:デフォルトの名無しさん
19/01/24 18:07:50.56 +k418LkV0.net
とりあえずVisual Studio Community 2017だと
診断ツールウィンドウの左上の歯車クリックで出るドロップダウンの
メモリ使用量のチェック外したら次のデバッグから消える
つかデフォルト有効じゃなかったっけ オンにした記憶ないし

446:デフォルトの名無しさん
19/01/24 22:08:23.88 nbtsb27b0.net
C#の話じゃないのかもわかんないけど、ちょくちょく出てくる「コンテキスト」ってのが何者なのか未だに理解できん
プログラムの単位で!?処理の中断・継続等を担ってる!?!?とかなんとか説明されてるけど意味がわからん
こいつは一体どういうもんなんじゃい?

447:デフォルトの名無しさん
19/01/24 22:17:59.01 Io4qrCW00.net
>>432
何年もC#使っているけど「コンテキストメニュー」しかわからん
またJavaの話じゃないだろうな

448:デフォルトの名無しさん
19/01/24 22:23:04.95 nbtsb27b0.net
>>433
ASP.NETでもEFでもXamarinでのモバイル開発でも、何しててもコンテキストが出て来まくるじゃない

449:デフォルトの名無しさん
19/01/24 22:34:05.54 KQvEosKo0.net
>>432
「文脈」という意味で、例えば、Graphic の Context の場合なら、
・現在の foreground color
・現在の background color
・現在の font
・「カレント座標」 (MoveTo() などで


450:設定する LintTo() の開始座標) ・現在の Clipping 領域。 ・現在の 原点の位置。 などを記録しているオブジェクトのようなこと。だから、もし、同じ Window に対して 2つの Graphic Context を持てば、それぞれで別々の カレント座標や、foreground color、Clipping Region を持つことが できて、瞬時に切り替えたりできる。これが、Win32 の Device Context に相当する。 --------------------------------------- CPU の Cotext の場合、IA32BIT の場合なら、 汎用レジスタ: EAX, EBX, ECX, EDX, ESI, EDI、EBP 命令ポインタ: EIP スタックポインタ: ESP フラグ: EFALGS セグメントレジスタ: CS, DS, ES, FS, GS 浮動小数点レジスタ: ST0~ST7 などが該当する。この Context を細かく時間を区切って切り替えることで、 MultiTask が実現できる。MultiCore CPU の場合は、それぞれの Core が 別々の Context を同時に持っていることになる。



451:デフォルトの名無しさん
19/01/24 22:36:47.07 /05KE7l40.net
>>435
ただし、JS の canvas の context は、1つの canvas に対しては、1つしか
持つことが出来ないとされており、
var ctx1 = canvas.getContext("2D");
var ctx2 = canvas.getContext("2D");
のようにしても、ctx1 と ctx2 は同じ値が返ってくることになっているらしい。

452:デフォルトの名無しさん
19/01/24 22:38:30.97 /05KE7l40.net
>>435
誤:CPU の Cotext の場合、IA32BIT の場合なら、
正:CPU の Context の場合、IA32 の場合なら、

453:デフォルトの名無しさん
19/01/24 23:11:19.24 nbtsb27b0.net
ふえるわけわかめ

454:デフォルトの名無しさん
19/01/24 23:34:17.52 9ks/14Qta.net
>>432
コンテキストの意味はコンテキストに依存するのでまずはどんなコンテキストで話してるのかはっきりしてくれ

455:デフォルトの名無しさん
19/01/24 23:41:41.55 ykheMFGu0.net
Xamarinって言ってるからAndroidのContextクラスもありそう

456:デフォルトの名無しさん
19/01/25 06:33:11.37 58XK3b4v0.net
>>438
紙に絵を書く場合に、色んな筆に予め色を載せておいて、必要なときにすぐに
目的の筆を選べるようにしておくと便利。その筆が context。
これだけだと単なる「brush」に過ぎないという突っ込みも有り得る。
実際のcontextは筆だけでなく、場所まで覚えてくれていたりする。

457:デフォルトの名無しさん
19/01/25 08:19:04.26 VVNAHEZ90.net
DCの話し?

458:デフォルトの名無しさん
19/01/25 08:57:13.43 58XK3b4v0.net
>>442
まあ、そうなんだけど、プログラミングにおける「context」というのは、
HDC と大体似たようなニュアンスを持ってると思う。

459:デフォルトの名無しさん
19/01/25 09:01:53.98 58XK3b4v0.net
日本語で、「この文脈では」「文脈をわきまえて」というものがあるけど、
直前に直線の描画を終えたばかりの「最後の座標」を覚える、っていうのが
それに近い。最後に使った色を今後も使う、最後に使った座標から、
また、直線を描き始める・・・。
お葬式では暗い顔して暗い服を着る、結婚式では明るい顔する・・・。
悪いニュースは暗い顔で読み、良いニュースは楽しそうに読む・・・。
それが文脈、context。

460:デフォルトの名無しさん
19/01/25 09:13:33.36 58XK3b4v0.net
それはそうと、.Netで書かれてるらしい MasterSeeker.exe と HNXgrep.exe
がWin7で劇遅になった。特に起動。XPではとても快適だったのに。
起動速度が多分、3~5倍くらいになった気がする。
Win32/MFCで書かれたアプリでは経験したことの無い現象だと思う。

461:デフォルトの名無しさん
19/01/25 12:14:00.12 qfUC5qIOa.net
>>432
そんなこと考えても時間の無駄。
contextの意味もcontext依存だから。
その文脈でどういう意味で使われてるか読み取るしかない。
英語ってそういう言葉でしょ?
コンピュータプログラムのcode、暗号のcode、符号のcode、
これらから還元してcodeが何を意味してるのか考えても意味ないのと同じ

462:デフォルトの名無しさん
19/01/25 12:55:33.13 YHYKY/Dsd.net
fixtureもピンとこなかった

463:デフォルトの名無しさん
19/01/25 14:04:22.53 HDgzt9Ph0.net
管理者権限を必要としないで動作するソフトを作成しました、。
仮にバグがあったとして、そのバグを突かれて攻撃された場合に権限昇格等の事態は発生しますか?

464:デフォルトの名無しさん
19/01/25 14:31:21.79 NjeEwFLO0.net
アプリケーション1とアプリケーション2の間でメッセージをやり取りする必要が出てきたので、SendMessageを使ってもう一方のテキストボックスに
メッセージを送り、TextChangedのイベントで受け取りを判断するようにしました。
ところが、アプリケーション1→2は成功するのに、2→1はうまく動作してくれません
(テキストボックスに送られたメッセージは表示されますが、テキストボックスがChangeしたとは判断されていないようです)。
原因がわかる方いらっしゃったら教えてください。

465:デフォルトの名無しさん
19/01/25 16:06:37.52 ihVRaCqt0.net
formにフォーカスしたときにスペースキーを押すとkeydownで拾って処理ということをやってるけど
スペースを押すタイミングでform内のチェックボックスがチェックされたり消したりするけど止めることは出来ますか?
ヒントを教えてください。

466:デフォルトの名無しさん
19/01/25 16:24:22.19 VVNAHEZ90.net
メッセージ捨てている?

467:デフォルトの名無しさん
19/01/25 16:35:10.05 cY+a6SZrM.net
>>448
所詮ローカルアプリだろ?
そんなもんにセキュリティの考慮なんぞ要らん
正当なユーザーに悪意があれば自分のPCの権限制御なんぞどうとでもなるし、
権限のない第三者が悪戯できない程度には今のWindowsのセキュリティは堅固だ

468:デフォルトの名無しさん
19/01/25 19:10:00.05 +fHR2Vfoa.net
>>449
MQ使っちゃいなよ

469:デフォルトの名無しさん
19/01/25 20:12:53.90 GQtzdg+pM.net
>>452
ClickOnce…一般ユーザーがインストール…悪意があったら…
うっ…頭が

470:デフォルトの名無しさん
19/01/25 20:21:06.45 9dAxHT9C0.net
ClickOnceはホリエモンが作ったらしいで

471:デフォルトの名無しさん
19/01/25 21:40:49.02 lgKiVxcFr.net
ホリエモンは天才だからな

472:デフォルトの名無しさん
19/01/25 21:50:17.27 VVNAHEZ90.net
Microsoftで仕事していたの?

473:デフォルトの名無しさん
19/01/25 22:02:24.78 RIyzEPA40.net
>>450
・KeyDown用のコントロールを設定しForm全体でキーを受けるのをやめる
・別のコントロールに常にフォーカスが当たるようにする
 具体的にはクリックイベントやForm.Shownのイベントメソッドを全部作ってControl.Select()かControl.Focus()を入れる
・Formからチェックボックスを無くす
下に行くほど下策。他にもあるだろうけど他の人に任せる

474:デフォルトの名無しさん
19/01/25 22:36:20.38 0+JzU8ara.net
>>450
基本的にはそれあなたの仕様そのものがバグってる。
WindowsのUIのお約束に反するようなUIを作ったらあかん。
どうしてもならSetStyleを呼んでCheckBoxが入力フォーカスを持たないようにするのが筋だと思う。

475:デフォルトの名無しさん
19/01/26 09:41:45.11 0YlzP7hG0.net
>>458 >>459
フォーカスを何とかすることを考えます。とても為になりました。ありがとうございました。

476:デフォルトの名無しさん
19/01/28 16:07:38.67 4O8CfcWu0.net
>>449
こういう名前付きパイプとかいうのは使えないの?
URLリンク(docs.microsoft.com)

477:デフォルトの名無しさん
19/01/28 16:43:45.23 ji//xT0NF.net
TCPsocketとか使う

478:デフォルトの名無しさん
19/01/29 18:28:09.44 lSFWGay90.net
質問です
100msとかの短い間隔で繰り返す場合、
Systems.Timers.Timerを使って処理を繰り返すのと
while中にSleepかTask.Delayで間隔をとって繰り返すのとでは
どっちが処理がはやくて負荷が少ないですか?
またそれぞれのメリット・デメリットがあれば教えて欲しいです

479:デフォルトの名無しさん
19/01/29 18:32:52.89 KZd0CVbOa.net
回答待つ間にやってみたらいい

480:L
19/01/29 18:47:23.89 8rAEnTT80.net
>>463
Sleep() 自体はそんなに積極的に使うべきものではない。ただし、
「逐次処理」で書いたほうが書きやすいような場合に使うと便利
な場合がある。例えば、単なる繰り返しではない、以下のように順にコードを
実行していくような場合:
(処理1)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理2)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理3)
・・・
ここで、処理1、処理2・・・の内容がほとんど同じような場合は、Timer を
使うべきだが全く違うようなものが10個も並ぶような場合だったら、Sleep()
を使うと楽。
SetEvent() などの同期オブジェクトを待つ WaitForSingleObject() などがサポート
されてない環境において、何かのフラグが立つのをポーリングして待たざるを得ない
ような時に、間に何も「はさまない」でループするとCPUがフルパワー状態で回って
しまって電気の無駄使いになるのが、Sleep() を「はさむ」と、Sleep()に指定する
待ち時間がたとえ短時間であっても、Sleep() の中で待ってる間は CPU が HLT 状態
になるので、電力消費を劇的に抑えることが出来る。
WaitForSingleObject() などが存在する環境では、Sleep() は余り使わないで良い。

481:デフォルトの名無しさん
19/01/29 18:47:44.92 aKVTslCz0.net
>>463
役割が全部違う
Sleep
指定時間の間は同じスレッドでのGUI等の入力が停止する
Sleep/Task.Delay
(実行後に)確実に指定した時間が停止する
Timer
指定した間隔で実行される

482:デフォルトの名無しさん
19/01/29 18:59:35.28 8rAEnTT80.net
【参考】
Sleep() の意味は、待つときに、HLT 命令を使うこと。HLT 命令は、特権命令なので
ユーザーランド(一般アプリ)のプロセスでは実行できないため、OSのAPIで実行して
貰うしかない。なお、マルチタスクOSで、HLT 命令を実行すると、他のプロセスに実行が
移ることが多い。
多くのアーキテクチャに置いて、HLT 命令は、「busy wait」で待つよりも、
劇的に電力消費と熱の発生を抑えることが出来る:
URLリンク(en.wikipedia.org)(x86_instruction)
Almost every modern processor instruction set includes an instruction or
sleep mode which halts the processor until more work needs to be done.
In interrupt-driven processors, this instruction halts the CPU until an
external interrupt is received. On most architectures, executing such
an instruction allows the processor to significantly reduce its power
usage and heat output, which is why it is commonly used instead of
busy waiting for sleeping and idling.

483:デフォルトの名無しさん
19/01/29 19:19:24.76 BTNuwc+5a.net
>>463
どっちにしろそんな違いがプログラムのパフォーマンスに影響なんかしないw
そもそも可読性よりパフォーマンスを優先する時代じゃない。
つまりより可読的な方法を選択すべき。
一定間隔で処理を繰り返すなら普通はタイマーを使った方が可読的でしょう、
繰り返し終了後に別の処理を継続させたい、みたいな事情があればあえてループ(つまりSleep)を
選択する場合もあるかもしれない

484:デフォルトの名無しさん
19/01/29 20:17:02.92 lSFWGay90.net
>>465-468
みなさまありがとうございます。
特にSleepの解説は勉強になりました。
パフォーマンスも特に影響無いようで、
一定間隔で処理するのでTimerを利用することにします。

485:デフォルトの名無しさん
19/01/29 21:31:43.87 ftdCQ0WJa.net
this.Close()でアプリを終了させた時、
デバッグモードだとProgram.csの方でエラーが表示されますがこれは気にしなくていいエラーでしょうか?

486:デフォルトの名無しさん
19/01/29 22:05:21.74 JPJ1HyJa0.net
気にしなはれ

487:デフォルトの名無しさん
19/01/30 01:49:16.67 DZ6eQREq0.net
WinFormsのデスクトップアプリでVSyncを待つコードを教えてください
Unityなとのフレームワークやゲームエンジ、DirectXラッパーを
使うことは許されていません

488:デフォルトの名無しさん
19/01/30 04:02:46.09 /8sJMxSkM.net
>>472
無理に100ペリカ

489:デフォルトの名無しさん
19/01/30 07:29:11.42 foE0k69S0.net
>>472
P/Invoke禁止とは言われてないのだな
ではD3DKMTWaitForVerticalBlankEventを使いましょう
名前はD3Dとありますがgdi32にある関数なのでDirectXではないと
糞ルールを決めた上司に主張しましょう

490:デフォルトの名無しさん
19/01/30 08:12:13.35 /B2wAYnE0.net
>>468
可読性という理由でラムダ式の表記禁止して5,6段のネストは許されている俺社

491:デフォルトの名無しさん
19/01/30 08:37:51.08 /+A/bmbGa.net
可読性も人それぞれ

492:デフォルトの名無しさん
19/01/30 08:46:16.74 hYqQd3E1d.net
あるフォルダ(A)内に不定期に作成されるファイルを、ローカルのフォルダ(B)に一定間隔でコピーします(フォルダ内全てではなく、前回からの差分ファイルをコピー)。
今回コピーしたファイルを使って後続処理をしたいのですが、どのようにしたら今回コピーしたファイルだと判別できますか?ファイル名にはタイムスタンプが入っています。
コピー後にA内のファイルを削除などできず、コピーのみ可能です。

493:デフォルトの名無しさん
19/01/30 08:49:12.12 /+A/bmbGa.net
>>477
データベースにヒストリを保存すればよろしいかと

494:デフォルトの名無しさん
19/01/30 09:59:39.11 E37rjQ75a.net
>>477
別のフォルダに "<ファイル名>.trigger" みたいな一時ファイルを作って処理後に消せばいい

495:デフォルトの名無しさん
19/01/30 18:35:51.42 hYqQd3E1d.net
>>477
ありがとうございます。
コピー済みのファイル名をDBに保存しておき、そこにないファイルは新規ファイルとして処理する。
こんな判断になりそうです。

496:デフォルトの名無しさん
19/01/31 15:06:18.62 k6O3ixIF0.net
Unsafe.の質問ってここじゃ不適切だよね
と言ってもここ以外にまともなC#スレはないようだけど

497:デフォルトの名無しさん
19/01/31 16:28:47.69 wgv6NCGX0.net
相談室スレでもいいよ 多分回答者はこのスレと共通だけど

498:デフォルトの名無しさん
19/01/31 17:28:39.66 hO+r/SI90.net
Dictionary 型の自動ってないですか。
とあるキーに対してInsert/Updateするとき、
いちいち ContainKeys してから Add するかしないか、ってのがイケてないと思うのですが
dicHoge["Key"] = "hoge";
ってしたとき、Key がなかったら Add して、あったら値を差し替える、みたいな動きする標準クラスないですか?

499:デフォルトの名無しさん
19/01/31 17:42:31.36 06DUsvP/


500:0.net



501:デフォルトの名無しさん
19/01/31 17:44:45.57 KzsKuKr5M.net
>>483
ConcurrentDictionaryのTryAddとかTryUpdateとか

502:デフォルトの名無しさん
19/01/31 17:46:25.97 +2lIT2P6a.net
>>483
自動って表現が新しいw
確かにそんなメソッドがあってもよさそうだけど、
たぶん分かりやすい命名がしづらい割には単純にRemove後のAddで
実現できちゃうから用意されてないんじゃないかなと想像

503:デフォルトの名無しさん
19/01/31 18:07:55.31 zfSfgMG3d.net
多分無いのかな?
「dictionary 拡張」で調べると拡張コードが出てくるからこの辺りから必要なのコピペして関数増やした方が早いかも

504:デフォルトの名無しさん
19/01/31 18:34:02.36 wmh3wxbj0.net
dicHoge["Key"] = "hoge";
これの何がダメなの?

505:デフォルトの名無しさん
19/01/31 19:16:07.42 Is8hbjin0.net
>>483
> dicHoge["Key"] = "hoge";
> ってしたとき、Key がなかったら Add して、あったら値を差し替える、みたいな動きする標準クラスないですか?
Dictionary<TKey, TValue>はまさにその挙動だが

506:デフォルトの名無しさん
19/01/31 19:16:34.95 nQoHUWUF0.net
何か別の言語と勘違いしてんのかな
C++のmapみたいに存在しないキーにアクセスしたら自動的に初期値が入ればいいなと思ったことはある
var d = new Dictionary<string, int>();
d["a"]++;
こういうのできたら楽

507:デフォルトの名無しさん
19/01/31 21:30:37.03 yHmpMqGVM.net
>>483
var

508:デフォルトの名無しさん
19/01/31 21:46:52.01 2xzbyMOq0.net
hashset

509:デフォルトの名無しさん
19/02/01 00:06:39.55 1o0umz0dp.net
拡張メソッド作ればええんちゃうか

510:デフォルトの名無しさん
19/02/01 00:37:05.77 SfS6VrgI0.net
そーいえば、ちょっと便利な Dictionary を作りたくて、これの完全ラッパーなクラスを作ったことあったな。
いまから考えれば無駄な労力だと思うが。w

511:デフォルトの名無しさん
19/02/01 00:46:34.52 Lo/lI1+50.net
そんでDictionaryのインデクサが要求そのまんまの挙動であることについてはどういう見解なのだ
なんでそんな質問したんだ
気になるだろ

512:デフォルトの名無しさん
19/02/01 01:27:01.49 Melu7CRC0.net
.Addメソッドも存在してるから
初見だと[]=valueがAddOrUpdateだとは思えないのはまぁ分かる

513:デフォルトの名無しさん
19/02/01 03:22:41.97 V0cnsy7O0.net
質問する前にちょこっと作って見ればすぐ分かるのに

514:デフォルトの名無しさん
19/02/01 12:54:05.03 hIHuQnKx0.net
>>474
ありがとうございます
D3DKMTWaitForVerticalBlankEvent に渡す
D3DKMT_WAITFORVERTICALBLANKEVENT の
以下の3つはどのように取得すればよいのでしょうか
D3DKMT_HANDLE hAdapter;
D3DKMT_HANDLE hDevice;
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;

515:デフォルトの名無しさん
19/02/01 17:55:46.18 mF+gwDus0.net
var dicHoge = new Dictionary<string, string>();
dicHoge["Key"] = "hoge";
って、いきなり出来ちゃうんですか。
ダメと思って試しもしなかったです。

516:デフォルトの名無しさん
19/02/01 18:45:15.00 9eIyz51RM.net
System.Data.DataTable なんて使ったら悶絶しちゃうかもな

517:デフォルトの名無しさん
19/02/01 19:27:14.70 Lo/lI1+50.net
>>498
そのくらい自分でぐぐって調べろ
と突き放そうと思ったけど要望そのまんまのコードが出てきたのでまあええわ
URLリンク(github.com)
素直にIDXGIOutput::WaitForVBlank辺り使った方が良いと思うけどネ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch