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

■ このスレッドは過去ログ倉庫に格納されています
2021/03/23(火) 12:58:24.10ID:ACoFzk2L0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

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

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/04/03(土) 10:48:17.75ID:UQC8gxiad
>>75
でもLinqって古くから有る技術の延長にある気がする。
SelectしてWhereで選んでSortしてっていうのは、コマンドプロンプトでパイプリダイレクションとかいう手法に似てる。
ラムダ式とかは新しいのかな。数学の世界とかそういう所では古いのか。
2021/04/03(土) 11:15:26.55ID:vVgJyrul0
やっててよかったラムダ式。
やらなきゃよかった苦悶式。
2021/04/03(土) 12:27:40.46ID:4GR7Zrkb0
>>76
君はLISPを何だと思っているのかね?
2021/04/03(土) 12:41:49.44ID:msrmgqC70
そうか、C#だとメソッドチェーンすらも一般的ではないのか…
いやそんな馬鹿な
Unity制御スクリプトとしての利用が多いから?
いいや雑談だし
2021/04/03(土) 12:56:50.93ID:49uAy5SrM
>>75
そりゃ脳みそは使わないと衰えるだろうね
最適化重視で副作用を容認したコードを書こうとすると詰まることが増えた気がする
2021/04/03(土) 13:57:02.33ID:PWpcDrEf0
いきなりメソッドチェーンとか持ち出したのはLinqの話に絡めてか?
全然違うものだと思うが。
2021/04/03(土) 18:55:38.38ID:a2otFyvK0
Linqのクエリ式自体はメソッドチェーンのシンタックスシュガーじゃん
2021/04/03(土) 19:11:52.27ID:CmPk+yxPa
メソッドチェーンの元々の意味はvoidのメソッドをthisを返すようにして....
ってことだったんだと思うよ。

個人的にはこういう重箱の隅を突く話は好きじゃないけど
2021/04/04(日) 13:52:07.93ID:U9Ytphde0
>>73
純粋に、自分が知らない有用な書き方があるなら知りたいとは思うんだよな。
別スレの LINQ がらみの話題もやるかどうかは置いておいて勉強にはなったし。
もしくだんの人が出てきてくれて講釈してくれるなら専用のスレぐらいは立てる。
2021/04/04(日) 17:58:30.84ID:a8juFvNn0
初歩的な事かもしれませんが教えて下さい。

以下のような独自クラス「Group」のリストがあります。
このリストをクラスのAgeListをキーにGroupByしたいのですが上手くグループ化できません。
どうすれば良いでしょうか。

public class Group{
/// グループID
public int Id {get; set;}
/// グループ名
public int GroupName {get; set;}
/// グループ所属の年齢一覧
public List<int> AgeList {get; set;}

public Member()
{
List = new List();
}
}
2021/04/04(日) 19:15:49.58ID:LnRN74zvM
>>85
どうすればいいじゃなくてどうしたいのかをお前が決めろ
平均年齢なのか最大年齢なのかそれともまた別の基準なのか
グループ化に使うキーが一意に定まらないならグループ化のしようがない
2021/04/04(日) 19:55:19.53ID:m/N7RFml0
>>85
最低限ビルドできるコードを例に挙げろよ
88デフォルトの名無しさん (ワッチョイ b501-5QI3)
垢版 |
2021/04/04(日) 19:59:05.44ID:gm8Ka2TU0
そもそもの設計ヤバない?AgeはMemberに持つのでは?
2021/04/04(日) 20:15:49.42ID:+2DTDHawM
デフォルトで使われる比較関数じゃ欲しい結果が得られないからGroupByに独自の比較関数を渡すか、Groupクラスに比較方法を定義しておくかのどちらか
2021/04/04(日) 20:17:26.34ID:+2DTDHawM
新卒研修の課題とかだろうから設計にツッコミいれてもしょうがないような
2021/04/04(日) 20:45:41.30ID:C0fdEpC00
初心者以前の話だよな
何がしたいか位は分かるように書けよと思う
2021/04/04(日) 20:52:52.48ID:ufNVz0O6a
何がしたいかはなんとなくわかるだろ
2021/04/04(日) 20:55:57.89ID:C0fdEpC00
>>92
動かないあれを見て分かるか?
そもそも構造すら間違ってるやろ
2021/04/04(日) 21:09:17.93ID:ghBYdtOLM
>>92
わかるんなら説明してくれよw
メンバーの年齢だけを保持してるグループってあまり見かけないし
2021/04/04(日) 21:13:12.33ID:xvT8M2vo0
俺はこういう場合、独自解釈して好きなように作る。
今回ならAgeListをソートしてカンマ区切りの文字列にして、をれをキーにする。
でGroupByだな。

過去この独自解釈が5割くらいそのまま仕様になってる
2021/04/04(日) 21:16:41.13ID:jr3tMa1na
>>93
>独自クラス「Group」のリスト
>このリストをクラスのAgeListをキーにGroupByしたい

List<Group> list = new List<Group>();
// なんか処理
list.Groupby(x => x.AgeList)
ってしたいって理解したんだけど違うんかな

宣言でそもそも間違ってるのは知らん
2021/04/04(日) 22:12:27.02ID:0QnJQanX0
Ruby なら、こういう感じ

members = [ {id: 1, age: 30}, {id: 2, age: 20}, {id: 3, age: 50} ]

p members.sort_by{ |member| member[ :age ] }

出力
[{:id=>2, :age=>20}, {:id=>1, :age=>30}, {:id=>3, :age=>50}]
2021/04/04(日) 22:18:00.59ID:LUDq5H1sM
>>97
C#なら?
2021/04/04(日) 22:23:09.43ID:ciXsbyqc0
>>97
APLなら?
2021/04/04(日) 22:32:47.74ID:glgnW2pm0
そんな議論はさておき、俺様が>>100を掻っ攫う
2021/04/04(日) 22:38:41.33ID:C0fdEpC00
Rubyガイジは無視して同じコードをちょっと書いてみた
https://paiza.io/projects/XRdHMEMPrv4_lIhlB8WYuw
2021/04/04(日) 22:45:22.63ID:7UKH0ZmwM
ピザくいたい
2021/04/04(日) 22:48:28.83ID:ciXsbyqc0
この時間だからラーメンにしておきな
2021/04/07(水) 14:11:22.94ID:/xOeegWId
C++とJavaを業務でやっていてc#始めた初心者です。
Xamarin.Mac でmacOSのアプリを作りながら学んでるけど
恐ろしく情報が少ない…。Macでc#使う人って少ないんでしょうか?
2021/04/07(水) 20:43:30.57ID:keBvs1o20
そもそもXamarinで作る必要あるのかという感じがする
正直流行ってないからね
Java出来るならJavaでいいんじゃね?
もっと新しい技術ということならelectronをお勧めしておくわ
Windows限定アプリならVisualStudioでC#は楽でいいけどね
2021/04/07(水) 21:57:44.60ID:5xSMK6sJd
MacといえばSwiftじゃないの?
2021/04/07(水) 22:41:15.43ID:fLp1VLDK0
>>104
人脈作りから始めよう。

objective cとcocoaの方が需要あるやろ
2021/04/08(木) 03:06:33.38ID:AfyS2Eek0
>>105-107
回答ありがとうございます。
マジですか。。。C#以外をお勧めされて複雑ですが
その言語も調べておきます。
まだC#学習して1ヶ月程度ですが機能が盛り沢山で面白いので
Macでも普及して欲しいですね(´・ω・`)
2021/04/08(木) 03:47:40.98ID:mAebMgXVd
機能は盛りだくさんでもPythonやJavaの方が人気なんだよね。
それぞれ良し悪しや向き不向きがあるだろうけど。
2021/04/08(木) 04:49:18.36ID:SlRPMViD0
今、統計的な素養があってPytorch触れると
月単価150万からだもんなぁ。
2021/04/08(木) 14:03:49.02ID:3r6MsATA0
>>108
どうしてもC#がいいなら採用出来るかどうかは別にしてもUnityという手はあるけどね
2021/04/08(木) 14:17:05.70ID:d++ONVxC0
>>110
TensorFlowでもええん?ダメなん?
2021/04/08(木) 16:37:37.25ID:kfGdZKXS0
これってDLL importとかしなくなるってことですか?
https://www.atmarkit.co.jp/ait/articles/2101/29/news113.html
2021/04/08(木) 17:10:27.78ID:eSL736QZ0
>>113
MSが共通Wrapper作りましたってことでDLL importは必要なくなるし、アンマネージ
部分についてもお約束を守ればよくなるみたいだけど、サンプル見ると色々手続きが
面倒臭そうで使い勝手は良くなさそう
2021/04/08(木) 17:48:44.06ID:4s+x/uBpa
void*とかobjectにするしかないだろうしアホみたいなオーバーロードの山になるだろうし
始まる前から破綻の予感しかしない

っていうか何で今更
2021/04/08(木) 18:56:34.79ID:HxWbcod1M
そもそもガンガンWin32API使うなら素直にC/C++使うし、C#だとちょっとつまみ食いする程度にしか使わんから今のままでもいいや
117デフォルトの名無しさん (ワッチョイ a3e6-JnQU)
垢版 |
2021/04/08(木) 19:11:09.64ID:7Q+Xoj4V0
apiで使う構造体とかの面倒くささが無くなるならいいんじゃない?
2021/04/08(木) 20:07:04.02ID:SlRPMViD0
>>112
需要と供給で単価は決まるからなぁ
2021/04/08(木) 20:11:07.35ID:Rugi+GK60
Cじゃない言語でOS作り直してくれよもう
2021/04/08(木) 20:20:01.96ID:SlRPMViD0
アセンブラけ?
2021/04/08(木) 21:41:44.08ID:oExYloS10
OSのようなハードに近いレベルの言語となると、Rustが流行ってるのかな。
C#でそういうのも出来ると良いのにね。
2021/04/08(木) 22:08:07.77ID:5uUtmx9J0
>>113
https://dot-sharp.com/net-getdetailsof/
Shell32.dllを使うとき、com参照を追加するだけでC#のライブラリと同じ程度の手軽さで使えました
これが増えるってならいいんじゃないかな
2021/04/09(金) 01:46:32.36ID:tMeqLsRz0
>>118
PyTorchはずっと不人気だったのに
今調べてみたら、ここ二年ぐらいでTensorFlowと拮抗してんな
ま、いいや、どっちか使えりゃ問題ないだろ
2021/04/09(金) 04:55:29.41ID:dxRxz0Yw0
C#をネイティブコンパイルできうようにすればいいだけだと思うが。
なぜ回り道をするのか
2021/04/09(金) 05:03:11.50ID:mVBnPI5w0
>>123
無理せずPaddlePaddle使ってたんでえぇで

日本では需要ないけど
2021/04/09(金) 10:06:28.56ID:tMeqLsRz0
>>125
PaddlePaddleはダメダメだな
日本だけじゃなくて、世界でもダメな奴
127デフォルトの名無しさん (ワッチョイ 86bb-eWep)
垢版 |
2021/04/09(金) 15:11:32.43ID:Sg2n4mcl0
AI関連は、何を使えるかよりどこの博士号を持ってるかの方が重要なんだろ?
2021/04/09(金) 19:20:58.42ID:mVBnPI5w0
CNTKの求人って見ないな
ttps://www.bigdata-navi.com/
2021/04/10(土) 07:46:10.33ID:qc4cGBnV0
以前画面解像度切り替えのツールを作った時にvanaraといwin32apiのラッパー使ったな
構造体も用意してあって簡単に使えた
2021/04/10(土) 09:05:48.65ID:Zw7mVk6D0
win32って一々ラッパー挟まずとも実はC#側で結構調節してくれるんだよな
GetProcAddressみたいなANSI版しかないような関数でもstringそのまま放り込んでもちゃんと機能してびっくりした
2021/04/10(土) 20:01:50.03ID:00IQtlCT0
人はそれをマーシャリングと呼ぶのである
2021/04/10(土) 21:24:18.51ID:mb0ile8c0
a={1, 2, 3, 4}という配列が与えられて
更に10進数x=5が与えられた時、5を2進数にして101なので
(最下位ビットがa[0]になります)
配列の要素1と3の和を出力せよという課題が出ました

var r = 0;
for (int i = 0; i < a.Length; i++)
if ((x & i << 1) == 0)
r += a[i];
で求める答えが出そうだと思ったのですが
4ではなく3が出ます。どこが間違っているんでしょうか
2021/04/10(土) 22:21:05.25ID:ZQT/KDjfa
>>132
わざと間違えてない?w
static int GetBit(uint x, int position)
{
  return (int)((x >> position) & 1);
}
2021/04/10(土) 22:33:06.71ID:mb0ile8c0
>>133
その書き方だと通るんですよね..
下のように解説してるサイトがあったのでそう書いてみたのですが
なんかおかしいんです

ビット bit に i 番目のフラグが立っているかどうか if (bit & (1<<i))
2021/04/10(土) 23:55:58.75ID:GWhpBmtX0
え。
>if ((x & i << 1) == 0)
>if (bit & (1<<i))
2021/04/11(日) 00:13:20.51ID:Zc34G5gB0
あ、やっと気づきました
bit操作理解せずに、コピペで済ませてた弊害が出ました

ありがとうございました
2021/04/11(日) 00:18:38.88ID:gSPWaQTLa
>>134
それはたぶんC#ではなくてCのコード
「bit & (1<<i)」この式の型は何?
Cと違ってC#のifの()の中の式はboolでなければダメ

まあこれは初心者が知らずに混乱しても仕方ないかもしれない。
でも>>132のコードの何が間違ってるかは初心者でも自分で考えれば分かるでしょ。

とりあえず問題を小さい問題に分けて分割統治することから始めましょう。
>>133はそういう意味で書きました。
2021/04/11(日) 06:53:51.52ID:+8zEqMg4d
Typescriptじゃインターフェース名にI(アイ)をつけないのが推奨されてるけど、
C#もそうなったりするのかな。
2021/04/11(日) 08:10:38.23ID:JfLfucqJ0
破壊的変更を.NETユーザーが受け入れてくれるなら良いんじゃね
2021/04/11(日) 08:23:58.76ID:DcU1Z0EW0
付けろと言ってる
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/identifier-names
2021/04/11(日) 12:26:31.31ID:y6cz0vLM0
C#でIが取れなかったのはCOMの影響があったからとかなんとか
今更C#の方針を変えることはないだろうね
2021/04/11(日) 13:01:27.23ID:+MjFaIzva
エディタで色分けしてくれればいclass, struct, interface, abstract
2021/04/11(日) 17:06:24.47ID:LOxmuPpta
プリフィクスのIは字面からインターフェイスだと分かるようにしたい、という強迫神経症的な動機というより、
単純に名前のバッティングを機械的に回避できる点が大きいんじゃないの?
144デフォルトの名無しさん (ワッチョイ df01-slfm)
垢版 |
2021/04/11(日) 17:51:20.56ID:v+npbxj+0
どうせインターフェースにIを付けなくなっても、実装クラスのいい名前が思いつかずになんとかImplってサフィックスつけるんだろ?
2021/04/11(日) 19:02:53.13ID:jqn7J9El0
Delphiだと、クラスにはTypeのT、パラメータにはFieldのFを付けるんだよね。
InterfaceのIはその名残なのかな、とか思ったんだよ。
そして、そういうのは無くしていく傾向なのかな、と。
2021/04/11(日) 20:39:38.45ID:9ef64+I30
>>144
付けないよ
そんなの付けるのJavaやってたやつくらいやろ
2021/04/11(日) 21:55:51.16ID:XlCnUXyn0
命名規則で一番上手くいってるのはC#と思う
インターフェースにプリフィックスIをつけるから命名で困った時にImplとかやらなくてすむし
プロパティ名は大文字で始めるから小文字で始めるローカル変数とぶつかりにくいし
2021/04/11(日) 22:00:03.96ID:XlCnUXyn0
で、最近は名前がさらぶつかりにくくなるようにメンバ変数はm_を付けるスタイルに個人的に変更した
2021/04/11(日) 23:11:51.93ID:Jjs5QDLf0
キャメルケースwww
2021/04/11(日) 23:30:29.10ID:gtdLzQZJ0
まあVSの恩恵でかいよなあって
2021/04/12(月) 00:03:30.52ID:5s47Rc9D0
>>147
こういう適当な名前を付けるやつがいることにピキってるっぽいね
適切な名前にすりゃブッキングしねえから名前付けをサボるなってことらしい
2021/04/12(月) 00:35:55.51ID:z0nrn9OY0
なるほどなぁ
ちなみにIListはなんて名前にすればより適切だと思う?
2021/04/12(月) 00:41:39.46ID:JfC2SlE/0
おまえ馬鹿か
たいていぶつかるのはローカル変数や外部に公開しないクラス名だろ
JavaのImpl使うのだって、内部クラスや非公開や内部のエンジンクラスとか
2021/04/12(月) 00:43:02.12ID:JfC2SlE/0
そんなのに適切な名前なんかブッキングできねぇよカス
2021/04/12(月) 04:43:49.73ID:FczQKoXE0
>>152
Microsoftの推奨する命名規則を参考にすれば良いんじゃない?
つまり、I付きPascal形式でスペル省略不可のフルネームで名詞を表せば良いのかな。
自由に付けても良いけど、.Net Frameworkと調子を合わせると違和感が無いと思う。
2021/04/12(月) 06:14:41.91ID:nRLgqnE00
うちの会社、昔から変数名の1文字目にデータ型の略称(?)をつける文化みたいで、
intのListがiListだったり、longのListがlListだったり、ちょっと困惑した。
2021/04/12(月) 06:47:12.36ID:HnVQKAJ10
>>156
郷に入っては郷に従え!

君の使って良い変数はI150からI300までな!
そこはFortran出身者の支配する村であった
2021/04/12(月) 07:54:06.97ID:lF7oqfJtD
MSの.NETプログラムにおける命名ガイドラインな
ttps://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/naming-guidelines
2021/04/13(火) 07:46:13.80ID:FVP0aIINd
皆さんコメント入れる? 命名規約とか守ってたらコメント要らないような気がしてきた。
2021/04/13(火) 08:25:02.43ID:lZomqcCZ0
>>159
いわゆるドキュメンテーションコメント的なものは入れる。
あと、実例みたいなの。
//引数にXXとYYとZZを渡したら、戻り値はAAになる。
2021/04/13(火) 08:48:00.08ID:cGgJVHDFa
>>159
入れる
2021/04/13(火) 09:02:05.69ID:t+pv5GMk0
visualstudioだとクラスやメソッドの1行前に///入力で自動補完されるからそれは使ってるかな
2021/04/13(火) 09:08:35.29ID:gWbnUgF3a
日付、所属、名前、旧コードはコメントに残すのが常識でしょ
2021/04/13(火) 09:19:57.30ID:Ehg3izfw0
ギャグかな?
2021/04/13(火) 11:05:10.28ID:fFoE8jgx0
バージョン管理ツール使ってるのに旧コード残すやつにはイラッとする!
特に不具合のコードをコメントアウトして残されてると、当てつけなのかと思ってしまう
2021/04/13(火) 12:14:15.55ID:YrXVy+xO0
コメントって入れるものだったんだ。
書くものだと思ってた。
2021/04/13(火) 12:48:28.16ID:ZNHsyNhsD
>>159
コメントには「なぜ」を書くんだよ
2021/04/13(火) 14:24:24.21ID:ovEIWddm0
なぜこんなコード書いたんですか?と書いて旧コードを残すわけですね
2021/04/13(火) 14:40:11.12ID:cQExUzr8M
168が仕様を理解せずおかしな実装を
したので辻褄合わせの辞書を実装しました by 167
2021/04/13(火) 16:02:36.93ID:ct/xqAfva
>>159
コメントは基本的には必要悪なので必要がない限り書かないのが正しいけど、
少なくともパブリックメンバーについては単純に「必要」かもしれんね。

ないと書いた人の意図を変に誤解してないか不安になって
結局中のコードを覗きたくなるかもしれない。
そんなことしなくて済むためのカプセル化のはずなのに
2021/04/13(火) 17:44:15.92ID:Kc5TdA4a0
1年後に自分の書いたコード読んで、何をやっているかちゃんと理解できるならば
書かなくてもよいんじゃないかなw
2021/04/13(火) 18:24:41.93ID:arsZDomXD
>>171
何をやってるかなんてコード読めば解るんだから、
そんなことのためにコメントは不要
「なぜ」そんなメソッドが必要か、
「なぜ」そのデータ構造やアルゴリズムを選択したか
なんていう、コードから見えない情報を記すのがコメント
2021/04/13(火) 18:31:59.11ID:KJ4k5XjpM
MS含めアメリカ製の高品質なコードって「なぜ」のコメントが無茶苦茶充実してるよな
日本だとだいたい // 〇〇処理 みたいな無意味なコメントか、ほとんど無いかのどちらか
SaaSとか一般的にレベル高いと思われてるはずの現場では、だいたい後者のパターンでほぼコメントが無い
根本的に論理的な言語能力に差があるんだろうなと思わざるを得ないわ
2021/04/13(火) 18:37:50.47ID:781G2uFla
コードレビューでコメントを書けって指摘されるじゃんw
2021/04/13(火) 18:43:17.63ID:/XAQKj46M
コメントなんて要らないんだよ
コミットログを見ればいいんだから
2021/04/13(火) 18:48:56.00ID:2mKMjuav0
private なプロパティってフィールドにするべきですか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。