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

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

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part138
https://mevius.5ch.net/test/read.cgi/tech/1528194762/
■コードを貼る場合は↓を使いましょう。
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/
2018/09/12(水) 22:45:44.44ID:JSQG/Jue
linq
リンキューですか?
ラインクですか?
2018/09/12(水) 22:59:50.57ID:HCZYwh62
リンクじゃないのか?
俺はアクセントがわからない
2018/09/13(木) 01:12:43.13ID:xXJqEk25
リンクだと思ってた
2018/09/13(木) 03:37:55.81ID:4tq0ggVx
>>490
したない
495デフォルトの名無しさん
垢版 |
2018/09/13(木) 05:03:38.49ID:wmIVPXZe
byte a;
byte b;
byte c = a + b;
だと型が合わないとエラーが出る
左辺をint cにするか、右辺を(byte)(a + b)にする必要があるんだな
なんで型が合わないのか分からず一日ドツボにはまった
入門レベルの参考書には載ってないし
でもバイト型とバイト型を演算したら答えはイント型に変わるって
根本的におかしくね?
2018/09/13(木) 05:09:18.59ID:1YFyErS3
why?
2018/09/13(木) 06:06:29.57ID:4tq0ggVx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/byte#conversions
2018/09/13(木) 08:17:24.20ID:IoXWiQ4j
>>491
リンクだとlinkって感じなので心の中ではリンクゥって言ってる
2018/09/13(木) 08:18:16.41ID:Ts60fXh8
>>495
CPUはそういうもん
小さな型でもいったんCPUに応じた処理しやすい自然なサイズに変換してから演算する
32/64bit CPUと呼ばれる所以だ
もちろんbyte同士なら演算後に勝手にbyteにキャストする仕様もありうるけど、
そんなことをしてもせっかく255を超えてもオーバーフローせずに表現できてるものを
わざわざ余計な処理入れて切り捨てるなんて無駄でしかないからCPUの仕様に合わせている
2018/09/13(木) 08:44:11.24ID:eHHJ6hTJ
>>491
https://www.microsoft.com/ja-jp/mic/seminar/programing_linq.aspx
>統合的なデータの問い合わせを実現したテクノロジ LINQ (リンク)
2018/09/13(木) 10:09:10.44ID:7r2vSdtk
LINQ職人の方に聞きたいのですが

var 元 = new[] {
  new {Index = 0, Value = "あ"},
  new {Index = 1, Value = "い"},
  new {Index = 3, Value = "う"}
};

みたいな羅列があって、こいつを平凡な string[] に変換したいです。

[0] → "あ"
[1] → "い"
[2] → null
[3] → "う"

LINQ 1発でバシって出来ませんか?
2018/09/13(木) 10:15:23.01ID:vxp+pG1B
普通にはできません
2018/09/13(木) 10:49:45.94ID:uKwFSQ+m
LINQ 外部結合
ぐらいでググったらそれらしいのあるが、やめとけ。
2018/09/13(木) 10:55:31.20ID:n/Ia9Ufb
さくっとできる
2018/09/13(木) 10:59:56.20ID:n/Ia9Ufb
rangeとzipな
2018/09/13(木) 12:50:08.04ID:gBmhWXZp
>>495
今まで気づかなかったけど、C#もintに揃えるCの手抜き実装を踏襲してるんだなw
これはシンプルに「大きい方の型に揃える」ルールにして欲しかったね
2018/09/13(木) 15:34:46.60ID:B76L2xUy
>>501

var 元 = new[]
{
new {Index = 0, Value = "あ"},
new {Index = 1, Value = "い"},
new {Index = 3, Value = "う"}
};

var array = Enumerable.Range(0, 4).Select(index => 元.Where(moto => moto.Index == index).FirstOrDefault()?.Value).ToArray();
2018/09/13(木) 15:38:33.86ID:TO6ro8xf
ちなみにFirstOrDefaultはFunc<T, bool>を引数に取れるからWhereはなくていいよ
2018/09/13(木) 16:23:35.73ID:B76L2xUy
>>508の指摘にそって改良

var 元 = new[]
{
new {Index = 0, Value = "あ"},
new {Index = 1, Value = "い"},
new {Index = 3, Value = "う"}
};

var array = Enumerable.Range(0, 4)
.Select(index => 元.FirstOrDefault(moto => moto.Index == index)?.Value)
.ToArray();
2018/09/13(木) 16:34:26.33ID:n/Ia9Ufb
zipで一行
2018/09/13(木) 16:48:55.75ID:Mtznb6SP
>>510
コードで示して
2018/09/13(木) 16:51:19.42ID:n/Ia9Ufb
コードは甘え
2018/09/13(木) 16:52:36.00ID:Mtznb6SP
>>512
じゃあ>>509も1行で済んでるからそっちでいいや
514デフォルトの名無しさん
垢版 |
2018/09/13(木) 17:34:16.92ID:fde6nCOF
cscやmscが吐き出す実行ファイルについて教えてほしいのですが、これはOSや実行環境に依存せず実行できるのですか?
WindowsPC上で実行ファイルを作成し、それをRaspberry Pi等にコピーしてmono上で動くのかが知りたいです
2018/09/13(木) 17:40:54.40ID:O9n8eAiW
>>514
依存する
monoの方にどこまでサポートするか書いてないか
2018/09/13(木) 19:29:30.60ID:nU06fVx/
Tostaring();
Set focus();
とかの()の意味を教えてください。
2018/09/13(木) 19:30:56.20ID:84N5Yvll
>>516
引数が存在しないことを示す
518デフォルトの名無しさん
垢版 |
2018/09/13(木) 20:13:42.27ID:tX4xVeil
言葉も出ない、ということ
2018/09/13(木) 21:21:45.27ID:RirS5RMp
>>516
演算子だって考えるのが素直でしょう
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/invocation-operator

デリゲートの後ろに引数リストを囲った()を付けるとメソッドが呼び出される
2018/09/13(木) 21:24:09.90ID:RirS5RMp
しかし、Tostaringてw
ドラマか何かの主演俳優にするメソッドがw
2018/09/13(木) 21:25:43.52ID:YrOTDcXS
スターリンがどうかしたって?
522デフォルトの名無しさん
垢版 |
2018/09/13(木) 21:26:14.24ID:6Z3XXp4U
はからずもS式の合理性を再認識させられる初秋の夜であった
2018/09/13(木) 22:00:27.97ID:tu9+IsVI
>>501
Enumerable.Range(0, 4)
.GroupJoin(元, m => m, i => i.Index,
(m, i) => i.FirstOrDefault()?.Value)
.ToArray()
長いね…
2018/09/13(木) 22:14:47.62ID:JHngkFny
元.Aggregate(new string[4], (a, x) => { a[x.Index] = x.Value; return a;});
2018/09/13(木) 22:17:18.10ID:z+6RPAPe
おお
2018/09/13(木) 22:21:08.27ID:u61xW8CT
>>510
Zipじゃ
i=2 : null
は無理でしょ
2018/09/13(木) 22:31:31.75ID:z+6RPAPe
3項塩山市をつかう
528デフォルトの名無しさん
垢版 |
2018/09/14(金) 07:23:37.25ID:dEKf7JQJ
>>1のスレ趣旨にあるように、
超初心者でも、気軽に入り込めるスレに、して欲しいです。
2018/09/14(金) 07:53:12.59ID:zwGydTBu
LINQのメソッドこねくり回しているのは超初心者には厳しいかな?
530デフォルトの名無しさん
垢版 |
2018/09/14(金) 08:02:41.43ID:ixgSdYSb
おまえも超初心者やんw
そうゆうとこやあかんのはw
2018/09/14(金) 09:26:00.50ID:6Xa6OuyO
Aggregate優勝
2018/09/14(金) 09:48:38.96ID:YVc6B226
Aggregateのパターンを実際使うとすると配列代入時のインデックス範囲チェックが必要で結局長くなるんだよな
2018/09/14(金) 10:20:53.65ID:VsV8E9sx
業務システム開発でLinqと三項演算子だけでほとんど処理を書いていたら 応用情報技術者試験のアルゴリズム問題でカウンタを持つようなfor文が全然読めなくなってしまいました

やはり開発においてLinqは有害なのでしょうか?
2018/09/14(金) 10:40:20.21ID:74Ijv3/g
>>533
貴方の脳の品質の問題をLINQの問題にしないでください
2018/09/14(金) 12:17:21.38ID:uKNqObYo
まあ脳の病気だわな
2018/09/15(土) 10:29:16.94ID:xmiaTl3L
C#7のローカル関数って、一つのメソッドからしか呼ばれないなら良いと思うんだが、ユニットテストはどうなるんだろ?
2018/09/15(土) 11:18:16.17ID:luWyo1Kp
>>536
ユニットテストはやる人などによってやり方はそれぞれだろう
2018/09/15(土) 11:19:27.99ID:PMHdQMes
privateメンバのユニットテストをしようとするのはそもそも誤り
壊れやすいテストは結果的にメンテされなくなり意味を為さなくなる
2018/09/15(土) 12:21:00.32ID:hseJLl5H
>>538
これ
publicなメンバーを通してテストすること
540デフォルトの名無しさん
垢版 |
2018/09/15(土) 20:38:11.28ID:elLmwu/2
LinQの中身がfor文って本当ですか?
2018/09/15(土) 20:39:51.17ID:xmiaTl3L
>>537-539
納得しました、サンクス
2018/09/15(土) 21:16:49.41ID:vc2YYDHO
>>540
ソースを読めば分かる

https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs
543デフォルトの名無しさん
垢版 |
2018/09/15(土) 21:24:11.06ID:8rxpHkWL
for文の中身がgotoて本当ですか?
2018/09/15(土) 21:29:31.15ID:Fr67tYwB
コンパイル結果見ればわかる
2018/09/15(土) 21:48:21.87ID:iPPDwx/Y
列挙子とforeachの組み合わせってforよりおそい?
2018/09/15(土) 21:51:19.05ID:VeSVHeu2
数%の処理速度の違いを気にするくらいならその都度試してみればいいんじゃないかな
2018/09/15(土) 21:53:24.60ID:iPPDwx/Y
いや、なんでLINQ遅いって言われてるのかなっておもって
2018/09/15(土) 21:56:28.37ID:88GvsHdE
遅いと言えば遅いよ
余計な手数が増えてるから

気になるなら後からでも書き換えればいいだけ
549デフォルトの名無しさん
垢版 |
2018/09/15(土) 21:57:40.02ID:8rxpHkWL
>>547
それはリンキューさんの遅さとゆうより
有り合わせのアルゴリズムの組み合わせで勝負するか
はたまた最適化したアルゴリズムをシコシコ組み立てるか
の違いが大きいのや
2018/09/15(土) 21:58:32.54ID:iPPDwx/Y
その程度の差なんですね
よほど大きなオーバーヘッドでもあるのかと思ってた
2018/09/15(土) 22:09:29.85ID:j1sHLBNC
MSIL勉強したいのですが、参考になるサイトを教えてもらいませんか?
2018/09/15(土) 22:14:24.26ID:nm6j3SBT
MSDN
553デフォルトの名無しさん
垢版 |
2018/09/15(土) 23:09:21.09ID:elLmwu/2
>>542
やべえ
これを読む能力がない・・・
2018/09/15(土) 23:53:24.63ID:iPPDwx/Y
linqの中身はforeachで列挙子を回してる
それは
while(次の要素を取得するメソッド){
要素に対する処理のメソッド
}
に展開される

詳しくないから適当だけど
555デフォルトの名無しさん
垢版 |
2018/09/16(日) 01:03:15.10ID:uYUceUNT
アセンブラでもやってろよ
2018/09/16(日) 01:04:46.36ID:ANojdriP
がっつりパフォーマンスのチューニングしたことあるわけじゃないけど
unityの毎フレーム行われるような処理で使わない限りlinqの速度が問題になることはないんじゃないか?
2018/09/16(日) 06:05:13.06ID:75aeC/cD
プログラムによる
プロファイラで分析しろ
ボトルネックの分析前に100倍遅いのとか1000倍遅いとか言っても何の意味もねえから
2018/09/16(日) 08:07:06.87ID:HxZqM27H
ゲームで描画以外の処理が問題になることは少ない
559デフォルトの名無しさん
垢版 |
2018/09/16(日) 08:29:55.59ID:AZs5fz+o
アプリケーションのプロパティの中にある[設定]という項目で
Properties.Settings.Default.xxxでint型配列の変数を保存したいのですが
できませんでしょうか?
前回使ったパラメータ群を配列で保存して
次回に読み込んで再現したいのですが
別の方法でもいいのですが参考になる解説ページでもあれば教えてください
2018/09/16(日) 09:04:23.29ID:psXGYTXF
>>559
「,」でjoinして文字列で保存、取り出すときに「,」でsplitとかどうだろ?
561デフォルトの名無しさん
垢版 |
2018/09/16(日) 09:25:05.54ID:2ksH8VYk
>>560
まあこれが横道だよね
てか、今ならjsonで保存か
562デフォルトの名無しさん
垢版 |
2018/09/16(日) 09:42:20.10ID:AZs5fz+o
>>560
なるほど!配列を分解して文字列型にするのか!
それなら私の低スキルでもなんとかできそうです
ありがとうございました!
2018/09/16(日) 10:07:09.66ID:aJAMOBK/
例えばアプリケーション終了時に画面のサイズと位置を保存して
次回起動時に設定をロードするとしたら
なにで保存しますか?XML?INI?JSON?
2018/09/16(日) 11:04:54.55ID:rvnq8hQD
>>563
「どこに保存するか」を気にしないならすぐ上に出ているProperties.SettingsのSystem.Drawing.Pointで保存したら
MSの推奨なんだから
2018/09/16(日) 11:12:58.81ID:txQA20Wu
昔からあるVSの定型Tipsだけど
この上から目線な感じは
もっと高度な議論を吹っ掛けてるんじゃね?
くわばらくわばら
2018/09/16(日) 11:25:39.54ID:gTaOdbFs
>>563
俺はXMLで実行ファイルと同じ場所に保存してる
2018/09/16(日) 12:37:43.94ID:ksMt/4i/
>>566
実行ファイルと同じ場所は書き込み権限がなかったりするからMS的にはApplication.UserAppDataPathで得られる場所などを推奨
2018/09/16(日) 12:48:14.51ID:LixUwGN0
>>559
IDEでプロパティの型を選ぶところの中には配列ってなかったっけ
2018/09/16(日) 13:06:53.35ID:16Y59QgZ
場所や形式はなんでもいいけど
読み書きクラスを上手くカプセル化しないと後で変更効かなくなって泣くのでそっちのほうが重要
2018/09/16(日) 13:19:04.65ID:p+qyV3Lh
いや、場所や形式は重要だよ
2018/09/16(日) 13:23:10.99ID:aJAMOBK/
>>564
へーありがとう御座います
調べてみます
2018/09/16(日) 13:32:26.33ID:16Y59QgZ
>>570
重要になるのは後で
開発中はたいして重要じゃないし正解も定かではない
2018/09/16(日) 13:59:51.99ID:hCxE0E+A
>>566
実行ファイルのパスってProgramFilesのとこかな?
あのフォルダーって監視入ってるから、データアクセスでも色々遅くなるかも
2018/09/16(日) 14:01:52.05ID:w97F4Kz1
どこに保存するかはかなり致命的な問題になるから
今から学んでおいて損はないよ
2018/09/16(日) 14:10:32.40ID:uf7cGEex
>>573
ProgramFilesがなんで出てくるかもわからないし設定ファイルのデータアクセスのスピードが問題になるのはおかしい
2018/09/16(日) 14:17:56.47ID:gTaOdbFs
>>567
知ってる。でも自作のポータブルアプリだからそうしてる
インストールするようなもんはC#ではまだ作ったことないわ

>>573
違う。ポータブルアプリだからユーザーが置いた場所
USBのフォルダとかマイドキュメントとか
2018/09/16(日) 14:41:31.05ID:gTaOdbFs
>>569
同意。C#はXMLについては簡単にカプセル化できるのがいい
JSONも簡単なんだっけか?、使ったことないから分からんわ
2018/09/16(日) 14:41:58.58ID:ksMt/4i/
UACが出来てからディレクトリの書き込み制限が厳しくなってるから意識する事は大切ですね
>>574
2018/09/16(日) 19:10:33.14ID:PDDwZiUq
>>559
ここにかいてるやん
https://stackoverflow.com/questions/1766610/how-to-store-int-array-in-application-settings
2018/09/16(日) 19:10:39.97ID:8jdJAOdP
書き込み制限するだけならまだマシなんだが
勝手にリダイレクトしやがったりするからなぁ
それも同じOSでもUAC設定だけでしたりしなかったり
2018/09/16(日) 19:15:37.35ID:SnNXv25N
>>578
違う
どこにどんな形式で置くかを柔軟に変更できることが重要
これをおろそかにして最初から場所や形式を決めつけると後で致命的な問題が発生した時に困る
2018/09/16(日) 19:41:28.41ID:5YLu0Ky3
いやいや保存場所は最初から重視しないとだめだよ
あとで罠にはまるよ
2018/09/16(日) 19:50:02.93ID:SnNXv25N
>>582
情報が出揃ってない序盤で決定するのはNG
根拠の薄い判断に盲目的に従って進めるよりはわからないものはわからないと認識した上で進めるほうが良い
最初は良いインターフェイスを決定することに注力する
開発が進むと徐々に客が(隠していた|失念していた)情報を出してくるのでそうなってから検討すればよい
それまでは暫定で簡単な実装を置いておく
2018/09/16(日) 19:57:02.81ID:AeuhPaJN
よくわからないけど設定ファイルを柔軟にする必要はないよ
2018/09/16(日) 19:59:35.75ID:AeuhPaJN
実装方法を知りたい人にインターフェイス云々から始める人は無視
586デフォルトの名無しさん
垢版 |
2018/09/16(日) 20:03:32.45ID:oQtqL1qV
どの初心者スレでも明後日のレスしてドヤりたがっとるプロさんおるねw
2018/09/16(日) 20:14:16.80ID:AeuhPaJN
いいや
プロ的にもありえないだろ
2018/09/16(日) 20:31:15.27ID:Ka1tFSGh
具体例示さず「〜しなきゃいけない」とかいうのは「妄想お疲れ」って返しておけばいいよ
2018/09/16(日) 20:59:15.70ID:AeuhPaJN
今後は全部の質問にインターフェイスの決定に注力しろって答えたらいいんだな
2018/09/16(日) 21:19:05.23ID:Ka1tFSGh
>>589
批判をずるずる引っ張るのはやめてくれ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況