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

■ このスレッドは過去ログ倉庫に格納されています
2017/10/09(月) 19:00:56.93ID:Y4203ffV0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part131
http://mevius.5ch.net/test/read.cgi/tech/1504861931/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/10/18(水) 12:35:54.11ID:uKmp6sxaM
>>290
氏名と性別を持ってるクラスのListにしたほうがいいよ
2017/10/18(水) 12:36:22.87ID:uKmp6sxaM
>>301
書いてあったw
304デフォルトの名無しさん (ガックシ 06eb-dPak)
垢版 |
2017/10/18(水) 13:54:21.47ID:M3PcmRrI6
クラスと構造体の使い分けを教えてくれ
2017/10/18(水) 13:58:44.93ID:pBm/jvOsa
>>304
処理を付加したかったり読み書き制限したりしたかったらクラスと言うか、構造体でできることはクラスで全部できるからあえて構造体を選ぶ場面は少なくないか
2017/10/18(水) 14:30:35.20ID:YSC60BKkM
>>304
win32api呼び出す時以外は使い道ないかも。
2017/10/18(水) 17:29:04.28ID:jNhOnQNR0
別に構造体でないとPInvokeできないということはないはずだが
StructLayoutはクラスのレイアウトも制御できるわけで
2017/10/18(水) 17:49:30.20ID:J95CPfXbM
ポインタじゃなくて構造体のコピー寄越せって関数とか
2017/10/18(水) 17:54:28.88ID:MMY2jKS6d
>>304
十分小さい時は構造体の方がパフォーマンスがいい
2017/10/18(水) 17:54:33.85ID:GswCLlj60
>>304
C/C++連携かパフォーマンス最適化か

1. Microsoft (2008)
1) It logically represents a single value, similar to primitive types (int, double, etc.).
2) It has an instance size under 16 bytes.
3) It is immutable.
4) It will not have to be boxed frequently.
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct

2. Effective C# 2nd(2010)
1) Is the main responsability of the type data storage?
2) Is its public interface defined entirely by properties that access or modify its data members?
3) Are you sure your type will never have subclasses?
4) Are you sure your type will never be treated polymorphically?

3. とあるStackOverflowの回答
1) You use structs for performance when stored in arrays.
2) You need them in code passing structured data to/from C/C++
3) Do not use structs unless you need them:
https://stackoverflow.com/a/598268
2017/10/18(水) 18:14:03.46ID:f/O0/ZtAH
>>304
明らかにその場で使い捨てなら構造体
2017/10/18(水) 18:23:14.37ID:a0tZ3XvZ0
16バイト以下なら構造体
2017/10/18(水) 18:24:25.72ID:9gwGUiRxd
>>304
ゼロ初期化で良いものでshort3つとか小さいものは、クラスより遥かに軽いので、万の桁で呼ぶなら構造体にする。
あとGCで回収させずに、メソッド終わったら即捨てたいものとか。これもそのメソッドを頻繁に呼ぶ時に。
小さい構造体はヒープではなくてスタックに置かれて、抜けたら無くなるので効率とかより、GCが呼ばれてる暇がなくてもちゃんと開放される。

よく使うのは、挙がってるの以外だと描画周りに使う事ある。

ちなみに、処理を付加すると言うか、メソッド生やすのは拡張メソッドで無理が効くようになったから、関数載せたい、でも関数の参照持たせたくない!もかなりなんとかなる。
2017/10/18(水) 22:59:59.74ID:K9flraWY0
値っぽいやつは構造体
2017/10/19(木) 06:04:01.12ID:eqdHlWFS0
ふと思ったのですが、メソッドで匿名型クラスのインスタンスを返すことってできますか?
返すことができるなら返り値の型になんて書けばいいのでしょうか?Typeはだめでした
2017/10/19(木) 07:15:50.96ID:8WeFWhTb0
あえていうならdynamicだけどメソッド超えるなら匿名型は諦めよう
2017/10/19(木) 08:07:39.54ID:hoxSwRGJH
今ならタプル返せばよい
2017/10/19(木) 09:32:28.99ID:mqSZ6mSda
C#の絵本第2版出てるな
2017/10/20(金) 02:56:07.82ID:iR2BGy9F0
文字列型のIdプロパティも持つクラスHogeのリストList<Hoge>からIdのカンマ区切りの文字列を求めたいのですが、
普通にやると
string.join(",", items.Select(i => i.Id));
とループが2回走るんですが、これをLINQか何かで1回のループで求められるでしょうか??
2017/10/20(金) 03:17:26.49ID:InyPVBX00
>>319
string.JoinにIEnumerable<string>渡してるから、そのままでループは1回になるんじゃないか
2017/10/20(金) 03:50:32.91ID:PY8ywvH80
自分でループまわして連結すればいいんじゃないか
2017/10/20(金) 04:34:32.44ID:iR2BGy9F0
>>320
items.Select(i => i.Id)
あれ、このSelectでもう1回ループまわる??
よくわかんなくなってきた
2017/10/20(金) 04:36:29.82ID:iR2BGy9F0
ああ。Selectでループ回らないか。
2017/10/20(金) 05:12:35.17ID:NH12zMgi0
vb.netを何年か使って仕事してたのですが、c#に移行していくことになったのでc#の学習を始めようと思っているのですが、おすすめの書籍はありますか?
325デフォルトの名無しさん (ワッチョイ 4e8a-sQMv)
垢版 |
2017/10/20(金) 06:26:42.31ID:2DRMxDJ60
>>324
Effictive C#とか
古いけど
2017/10/20(金) 06:38:32.06ID:l3SzA2hHM
実戦で役立つC#のイディオムなんちゃら
割とよかった
基本をサッと把握するにはこれで良いと思う
基本を抑えたらCLR via C#とか読むべき
dotnet coreならマイクロソフトのドキュメントかな
アップデートが速すぎて本が出ない
2017/10/20(金) 07:08:41.55ID:NH12zMgi0
>>325
>>326
ありがとうございます。
基礎を理解するのに、独習C#かオライリーのC#の購入も検討していたのですが、その2冊についてはいかがでしょうか?
あまり役に立たない様なら、おすすめいただいた3冊を購入してみようと思います。
328デフォルトの名無しさん (ワッチョイ 4e8a-sQMv)
垢版 |
2017/10/20(金) 07:29:07.74ID:2DRMxDJ60
>>327
正直最初の一冊は好きなの選べばいいよ
それで足りないと思ったらここを含めてお勧めされてる本をレビューなんかで評価の高い順に読めばいい
どの本の内容があんたに合ってるかはあんたにしかわからんのだから
2017/10/20(金) 09:14:18.94ID:zf8EG0F60
誤植がない本がいいよ
C#始めた頃に買った入門本で、「なんでこうなるんだろう・・・」と嵌まって時間浪費したことがある
誤植に気づけるまでのレベルなら流せる問題が、一言一句読み解きながら進めてるときに
誤植にあたると学習コストが無駄に跳ね上がる
まぁ、読む前にそれを気づくのは至難の業だから、評価高い本と初版避けることくらいしか方法ないけど
2017/10/20(金) 12:43:09.38ID:l+99Dkv9a
>>324
VB何年かやってたなら@ITの記事を一通り斜め読みするだけでも十分でしょ
2017/10/20(金) 12:45:00.04ID:RDZrWMpbM
>>329
そう言うのこそ
なんでこうなるのだろう?
って思った時にここで聞けばいいんじゃね?
2017/10/20(金) 13:02:30.91ID:kQTzxkDwa
この業界歴史が浅いから本が必ず正しいことを言っているとは限らない点も注意だな
長くたって結局将棋とか過去の棋譜を使わないほうが強くなったらしいし
未来は自分で切り開くんだよend
2017/10/20(金) 13:10:28.70ID:Qvu1f4hHH
ここで聞くのは一番やっちゃいけないことだと思う
2017/10/20(金) 13:25:54.62ID:kQTzxkDwa
>>333
じゃあ、オススメを貼れよグズ
2017/10/20(金) 14:00:27.64ID:QjnViytCM
>>333
ある意味、正論だな。
ここで回答してる奴でここで質問したことのある奴は殆ど居ないんじゃないのかな。
2017/10/20(金) 14:08:15.33ID:kQTzxkDwa
>>335
してるよ!
c#の構文解析でいいライブラリねーの?
って聞いてから返答ないままだよ!
2017/10/20(金) 14:08:31.02ID:QjnViytCM
>>334
StackOverflow英語版かな?
2017/10/20(金) 14:14:34.61ID:QjnViytCM
>>336
凄いアバウトな聞き方w
じゃ、.NET Frameworkって回答しとく。
2017/10/20(金) 14:27:12.08ID:kQTzxkDwa
>>338
あんの?
確かに計算式はやってくれんだよね
2017/10/20(金) 14:31:27.58ID:kQTzxkDwa
具体的には処理フローを出力したい
reflectionでやれればそれでもいいし
ソースの文字列から構文木的なものを返してくれるならそれでもいいし
2017/10/20(金) 14:35:43.81ID:QjnViytCM
>>339
Roslyn関連のライブラリって構文解析してくれるんじゃないの?
2017/10/20(金) 14:41:43.45ID:QjnViytCM
>>340
それ、初心者スレで聞く内容かw.
2017/10/20(金) 14:53:31.10ID:kQTzxkDwa
>>341
おお!
行けそう!行けそう!
ありがとうございました!
まさかこんなものが出てるとは
2017/10/20(金) 15:41:21.62ID:QjnViytCM
>>343
解決かw
2017/10/20(金) 15:52:51.14ID:kQTzxkDwa
>>344
いや、まだわかんない
2017/10/20(金) 16:00:55.66ID:+VbZElimd
偉そうなこと言っときながらRoslynも知らないとはwww
2017/10/20(金) 16:06:52.51ID:QjnViytCM
>>346
c#の追っかけしてるファンじゃないと知らんわ
2017/10/20(金) 16:11:32.61ID:kQTzxkDwa
>>347
少なくとも追加されてから
c# 構文解析
でググり続けた俺にはかすりもしなかったねw
2017/10/20(金) 16:26:31.24ID:QjnViytCM
>>348
グーグル先生の5番目のご神託にでるが
350デフォルトの名無しさん (ガックシ 06ee-G561)
垢版 |
2017/10/20(金) 16:28:33.99ID:3KJGg1dF6
VSで使われてるコンパイラだろ?そんなの俺でも知っとるわ。
2017/10/20(金) 16:44:44.00ID:kQTzxkDwa
>>349
うん、普通に出るね
多分1年前ぐらいにググって
無かったから2〜3番目ぐらい見て
華麗にスルーしてたんでは無いかと
2017/10/20(金) 17:00:35.99ID:dPxZWMqc0
構文解析に興味を持つようなやつがRoslynすら知らないとは
2017/10/20(金) 17:01:23.38ID:gEmQ2eLHd
>>347
じゃあ構文解析なんて無理だから諦めた方がいいよ
2017/10/20(金) 17:04:37.96ID:MLgxPClpa
初心者スレでロズリン知らないのと叩く滑稽さ
355デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
垢版 |
2017/10/20(金) 17:05:34.41ID:umJD7f7O0
ヒストリカルに字句解析と構文解析が何故分かれているのか疑問に感じるバカは多いと思う。
俺もバカの一員として分けなくてもエエやん?と思い実際に作ってみたら、何故分かれているのか体感したという。
2017/10/20(金) 17:08:58.31ID:QjnViytCM
>>353
なんでオレに言うかw
357デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
垢版 |
2017/10/20(金) 17:10:01.08ID:umJD7f7O0
忙しい現代社会。
すぐレスしてくれそうだからではないか。
2017/10/20(金) 17:19:16.72ID:kQTzxkDwa
>>352
実際あんまり興味無い
こんな言語マニアしか食いつかないようなもんで
人生費やすのはゴメンだった

だからアイディアはあったけど
構文木作成部は保留にしてお蔵入り状態にしてた
359デフォルトの名無しさん (ガックシ 06ee-G561)
垢版 |
2017/10/20(金) 18:30:23.02ID:3KJGg1dF6
なに作ってるの?
2017/10/20(金) 18:44:07.33ID:iVvWVDwWa
>>359
処理フロー作成ツール
2017/10/20(金) 19:39:37.53ID:XWAUmrTl0
>>360
Excel方眼紙に出力してくれ。
低レベルのSIerに納品する資料に使える。
スマン、低レベルはSIerのデフォだったかwww
2017/10/20(金) 19:49:32.49ID:BrAKv0lza
>>361
それも考えたんだけど
自宅にexcelってないんだよね
なんで文字と図形と線を出力できるような簡単なベクトルデータってないんけ?
と思ったら笑っちゃうぐらい無くてさ
とりあえず画像データでええかー
的な
機械的に処理フローを
描画するc#のコードを吐き出して
画像で保存
2017/10/20(金) 19:52:26.05ID:XWAUmrTl0
>>362
XPS, SVG, PostScript知らんのんけ?
2017/10/20(金) 19:55:44.74ID:HK8N625v0
まあC#でやるならXPSでいいな
2017/10/20(金) 20:01:09.91ID:BrAKv0lza
>>363
だから編集できねぇじゃんそれじゃ
画像と変わんないよ

個人でwordとかフォトショとかイラレとか持ってるなら別ですが
2017/10/20(金) 20:02:30.25ID:VNKX5uBs0
ここは初心者の質問スレです
雑談したいのなら他へ行ってください
2017/10/20(金) 20:05:52.61ID:XWAUmrTl0
>>365
じゃ、Open XML SDKを使ってExcel出力すれば?
Open XMLの仕様書ってpdfで6000ページほどあるが君なら楽勝たろ。
2017/10/20(金) 20:05:56.74ID:BrAKv0lza
じゃあ、最後、svgならincscapeでいけんだね
こいつ日本語扱えた覚えがないからスルーしてたけど
時代は変わったのかとりあえずフォーマット知らねーけどやってみるわ
369デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
垢版 |
2017/10/20(金) 20:07:44.87ID:umJD7f7O0
末尾に#どう思いますか?という行を付け加えれば質問風に雑談できるのでは?
2017/10/20(金) 20:14:20.09ID:XWAUmrTl0
>>366
質問してこの流れを変えればええのだ
371デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/20(金) 20:19:36.38ID:QPjbx7Pr0
おまえ、なんかウザいから氏んでくれ。
2017/10/20(金) 20:23:46.20ID:bKuGhauuM
>>371
お前が死ねば?
相対的には同じだw
2017/10/20(金) 20:35:27.08ID:36f4Sv1zM
>>362
Windows なら Enhanced Meta File でいいんじゃね?
c# emf 作成
とかでググれば作り方はわかると思う
374デフォルトの名無しさん (ワッチョイ 4e8a-/wYC)
垢版 |
2017/10/20(金) 20:51:02.95ID:vd2jZWHS0
いつまでスレチ続けるんだクズども
2017/10/20(金) 20:56:22.63ID:BrAKv0lza
>>373
ありがとう
svgと合わせて調べてみます

>>374
なんか話したい話題があるなら質問しろ
376デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/20(金) 21:08:47.27ID:QPjbx7Pr0
>>372
slip見て自演バレバレ
2017/10/20(金) 22:46:03.30ID:h+e+zHrd0
>>375
御託はいいから新小岩駅に行ってNEXに飛び込んで死ね
2017/10/21(土) 04:38:43.15ID:J3/Oov/oa
>>377
スレ違いどころか
板すらあってないじゃんw
2017/10/23(月) 09:42:48.16ID:iZTfc9Gp0
プロパティとメソッドの使い分けってどうするのです?

例えばクラスが持ってるリストの件数を返すCountとか、ある項目が存在するかどうかを返すIsItemExistとか
こういうのはプロパティかメソッドかどっちで実装するのです?
2017/10/23(月) 09:58:16.86ID:WjGqLCS1M
>>379
クラスの内部状態を返すのならプロパティでしょ。
2017/10/23(月) 10:13:47.78ID:zzY32qse0
DIでInjectしたServiceは、フィールドに保持する?それともプロパティに保持する?
どっちも見かけるから、皆さんどういう風に使い分けてるかなと
2017/10/23(月) 10:47:51.67ID:UXX8AsCPa
困ったら全部getなんちゃらでメソッドにしちゃえばいいじゃん(適当)
Isなんちゃらはプロパティでね、大抵
2017/10/23(月) 10:50:57.14ID:ebDYa8pU0
>>381
オレはパブリックはプロバティーでプライベートはフィールドってのが軸だな
勿論例外もある

つまりコンストラクター使ってDIならフィールドかな
2017/10/23(月) 10:57:06.62ID:WjGqLCS1M
MSが自動実装プロパティなんて作るから
2017/10/23(月) 11:15:16.91ID:UZkZRiTF0
IsItemExistって何だよ…噓だろ…
2017/10/23(月) 11:33:35.62ID:Y7RvEsYBd
>>383
ありがとう
2017/10/23(月) 12:29:52.29ID:UXX8AsCPa
>>385
確かにw
Isなんちゃらはプロパティ、なんちゃらExistはメソッドってイメージがあるな
2017/10/23(月) 12:42:32.30ID:UiLH3I11M
>>387
動詞が2つ有るって言いたいのだろう。
2017/10/23(月) 13:06:11.13ID:UXX8AsCPa
>>388
ごめん
確かに、はそれが変だなってことにかかってて、そのあとは俺が持ってるイメージの話
分かりにくかったな
2017/10/23(月) 13:11:49.28ID:ZgE4a7c5a
>>389
よこからついでに突っ込むけど、メソッドでexistって動詞を使うこともまずないと思うよ
存在しろって言われても困るでしょうw
〜Exitsというプロパティなら普通にある
2017/10/23(月) 13:17:00.15ID:JL5vrncla
なんか突っ込みどころが多すぎて
登場人物全部抜けてる気がする

File.Exists メソッド
String.IsNullOrEmpty メソッド
2017/10/23(月) 13:23:02.70ID:ZgE4a7c5a
>>391
どっちも静的メソッドだよねそれ

どっちも機能的には明らかにプロパティじゃないのにプロパティ風の名前になってるのは
妥協の産物でしょう。
2017/10/23(月) 14:52:16.08ID:Hm5Sp4K20
>>379
原則状態はプロパティ、動作がメソッド
ただし、利用者はプロパティはループ毎にキャッシュせず読んでもいいくらいに軽い処理だと考える場合があるので、時間がかかるならメソッドにしたほうがよいかも
2017/10/23(月) 19:30:33.33ID:TFf0LeB2M
プロパティはもちろん取得系のメソッドも何度も呼んでいいよ
実測した結果、遅くなってると分かったらキャッシュを導入する
パフォーマンスだけのために説明変数を追加するのはNG
395デフォルトの名無しさん (ワッチョイ c575-G561)
垢版 |
2017/10/23(月) 19:34:24.82ID:HemzWECS0
説明変数とは
2017/10/23(月) 19:50:51.54ID:+URhnDB80
聞きかじりで理解した気になってるからこういう
2017/10/23(月) 20:07:22.56ID:IDuIqN9Mp
>>396
初心者スレでマウントとりたいだけのバカは邪魔なのでわんくまにでも行ってどうぞ
2017/10/23(月) 20:10:22.51ID:TFf0LeB2M
>>395
var cachedUnko = GetBigUnko();
こういうやつ
2017/10/23(月) 20:35:02.50ID:y4/LHG7i0
- IsItemExitsはHasItemに
- Existsは引数を取るので基本メソッド
- IsNull、IsEmpty, HasValue等の問い合わせ系は悩ましいので選択基準を規約で決めておく

問い合わせ系については引数不要で十分チープなら
.NET Frameworkでは基本的にプロパティが使われている
ただメソッドにしないといけないケースも少なからずあるので
個人的にはメソッドに統一しといたほうがいいと思ってる

https://msdn.microsoft.com/en-us/library/ms229054(v=vs.100).aspx
2017/10/23(月) 20:35:25.45ID:VIpRDakhM
回帰分析とかで説明変数って聞くけど他じゃあまり聞かない
2017/10/23(月) 20:39:21.38ID:VIpRDakhM
HasItemってどんなときつかうんだろうか
もしそれがコレクションならContain使うよ

引数ないならプロパティって暴論あるけど
■ このスレッドは過去ログ倉庫に格納されています