ふらっと C#,C♯,C#(初心者用) Part159
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part158
https://mevius.5ch.net/test/read.cgi/tech/1679783460/
■関連スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします
http://www.visualstudio.com/downloads/
■情報源
https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://learn.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
https://source.dot.net/
・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
++C++; // 未確認飛行 C
https://ufcpp.net/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured >>317
配列宣言において型が違うことは重要じゃないよ
どんな型の配列だって作れるわけだから
それが分からないことこそが基礎ができてない証拠であって
君の言う「必要なところ」がやれてないということ
>>315のリンク先をきちんと理解すれば>>314の
>tiletype型には定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入しているあたりが分からないです。
>何らかの文字列の定数が入ると考えていますた
という疑問と想定が間違っていたことに気づく
まずそこから始めよう 自分が必要と思うところだけつまみ食いするのがタイパいいとでも思ってるんかねぇ
見当はずれなことやって結局無駄に時間を使うだけなのに 批判は一切受付けません!のスタイル
そもそもこんなことに何日も掛けて進まない時点でこいつには無理 >>318
>>325
返信してくれた5人が違う事を言ってたら、その中からどれか選ぶしかないじゃないですか。
あと、基礎やるにしてもどうせすべて使うわけじゃないし、必要な部分だけやるスタイルです
>>324
リンク先見てきます 要約すると、
基礎を学ぶ気はない貴様らは俺の聞いたことに答えればいいんだ
つまり、教えてもらおうではなく聞きだそうというスタイル とりあえず環境構築してるならまずサンプルコードそのままコピペして実行しろ
いろいろ考えながらコードを弄っているうちに分かってくるからさ
疑問点は人に聞く前にまず自分で試して経験しろ >>327
>>331
ほんそれ
荒らしの相手レスする香具師も荒らしと看做せばいい
質問オウム返しはそもそも問題解決する気が無くて荒らしたいのだろう 色々なブレイクポイントで止めて中身を確認、理解する
理解できない部分は置いといて次に進む繰り返し
過去の疑問も解けていく
これは必須の作業。これをやればほとんどの疑問、分析は自己解決できる
昔はPRINTいっぱい埋め込んだものだ
今は楽ちん >>328
リンク先の内容で理解できない部分や自分の想定と違う部分があったら具体的に示して質問して >324
列挙型でも数字はありますもんね。
ようやく少し理解 列挙型は数字があるというより数値を別名で抽象化したもの
実際の正体は単なる整数値
ただし直接的に数値として扱うとエラーになる >>338
いや、理解できてない
数字がある(=型に数値と互換性があるという意味と推察)かどうかは配列で扱ううえで全く関係ないよ
君が「数字がないもの」と思っているものの配列は理解できる?
例えば文字列配列を配列の長さ3で宣言できる? >>338
なんで数字にこだわるのかわからなかったけど
> tileList = new TileType[ columns, rows ];
>の部分でtiletype型には定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入しているあたりが分からないです
ひょっとしてcolumnsとrowsで二次元配列のサイズを指定してるのを
配列tileListにcolumnsとrowsの値を入れていると誤解してる? 二週間も同じことをグダグダ質問してる馬鹿は荒らしか?そうでなければ才能ないから諦めて消えろ >>341
そうじゃなくて、配列宣言は定数値じゃないといけないと思ってるんでしょ
だから皆から他人のコードを読む以前、基礎がわかってない、先に本なり見て学べって散々言われてるんよ >>341
あーなるほどね
コレクション式も追加されてそういう誤解は増えそうだな >>344
それだと「整数値であるcolumnsとrowsを代入している」とは言わないだろう
tileList = new TileType[]{columns, rows};
みたいに初期値を入れてると誤認してるからこそだろう
そして「tiletype型には定数の文字列が入ると思っていました」というのは
tileList = new TileType[]{TileType.PLAYER, TileType.BLOCK};
のような書き方を指していると推察できる >>346
「定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入している」ね
要するに配列宣言には定数を使用すると思ってたのに整数型変数使ってるのなんで?ってことよ 配列の宣言には定数を使わないといけないという勘違いをするのはそういう制約のある他言語に慣れ親しんだ人だけだから >>347
「tiletype型には定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入している」ね
columnsとrowsが配列のサイズを指定していることを理解していればそうは言わんでしょ
TileType型の配列の初期値に整数値が入るのなんで?ってことよ >配列宣言は分かっているんですが、型が違いますよね
とか
>列挙型でも数字はありますもんね
って発言からもTileType型の配列には数値は入らないと思ってたけど入るんだと自分を納得させてるフシがある 配列の宣言わかってるならあれを初期値だと思うか?
まぁ結局どういう考えかは本人にしかわからんけど 配列宣言は定数値じゃないといけないと思ってる、よりは言動の辻褄が合うのではないかという話
本人に聞かないと真実がわからんのはその通り 単に定数値という言葉の意味をわかってないだけでしょたぶんTyleType型の各値のことを言ってる
なんなら宣言という言葉の意味もわかってないし代入すらわかってない可能性もある 再掲
配列の要素のデータ型が列挙型(の変数)というだけであって配列そのものが特殊なものという訳ではない
この倉庫番のコードではマップのデータをcsv形式のテキストで設定してtileListという名の配列に格納している
格納する際に配列の要素はcsv内の整数データからTileTypeで定義された列挙型の変数に変換される
https://i.imgur.com/iA3fRKM.png interfaceのクラス変数としてintとかの変数持たせるのはstatic intにしても同じことって理解
でいいですか? クラス変数は誤植ですねごめんなさい。interfaceの中に変数宣言できたことです。 揚げ足取りじゃない
質問も訂正もおかしなことを書いてる C#でインターフェイスにフィールド(メンバ変数)を定義することはできないよ
なのでどういうのを想定しているのか回答者は全然分からない
用語を間違ってる可能性もあるからまずこういうコードというのを示してみたら >>361
発言がおかしいと感じたならそこを問いただせばいい
>>358は揚げ足取りでしかない
それともまさか本気で言ってる? ないものについて質問されてもないんだから答えようがない
それがまともな回答 他の言語に触れてなくてクラス変数という用語自体を知らないのだろうか c#のinterface内でミューテクシオン宣言が使えないのはなぜですか?
回答
c#にミューテクシオン宣言と言うものはございません
これは揚げ足取りか? >>366
クラス変数という用語をご存知ですか?
イエスかノーでお答えください 誤植ですねについてああだこうだ言うのが揚げ足取り
イエスかノーかで答えてくださいに知らないと答えたのについてああだこうだ言うのが揚げ足取り
全然どうでもいいことにいちいち突っかかってくるID:M9UZ8U5c0が悪い >>368
これは失礼
他の言語の知識がなくてクラス変数自体を知らなかったのなら>>358の発言も仕方ない
ちなみにC#で言う静的メンバ変数に相当するものなので頭の隅に置いておこう 昔はできなかったがinterfaceにstatic memberを定義できるようになったんだよ 特に継承するわけでもないinterfaceの変数を使っていたので
staticでよくね?って思ったまでです。 >>362
メソッド以外定義できないんですか?普通にint xxx{get}みたいに変数定義してましたけど? interfaceは実態まで定義できるようになって
これじゃ多重継承と何が違うんだろうね 今や関数指向全盛じゃん
オブジェクト指向が諸悪の根源じゃねーーの
能力足りてないエンジニアばっかなんだから 関数指向全盛って初めて聞いた
データとかあるんですか (1)オブジェクト指向プログラミング A. クラスの定義 B. オブジェクトの生成 C. カプセル化 D. 継承 E. ポリモーフィズム
(2)関数型プログラミング A. 高階関数 B. クロージャ C. ラムダ関数 D. ジェネレータ E. デコレータ >>380
デコレータはどちらかというとOOP用語
関数型では単なる関数合成の一種なのでわざわざデコレータとは呼ばない Taskについて質問です。
階層構造データを再帰的に探索する処理を階層ごとにTask.Factory.StartNewで並列化させて作ってるのですが、
WinFormsのControl.Invokeのように、子タスク内から親タスクのコンテキスト上で実行させたい処理があります。
今は親タスクで作成したリストを追加するActionを子タスクに渡して、後で親タスクでリストから取り出して処理を行っていますが、
可能であればControl.Invokeのように、子タスクのコンテキストのタイミングで親タスクのコンテキストに明示的に移って実行したいと考えています。
これを実現する方法があれば教えてください。Invokeの仕組みを解説してるサイトもあったのですが、意図する方法は見つかりませんでした。
void parent_proc(Tree tree) {
var locker = new ReaderWriterLockSlim(); var datalist = new List<string>(); var tasklist = new List<Task>();
Action<string> adddata = (string d) => { //排他制御でデータをリストに追加
locker.EnterWriteLock(); datalist.Add(d); locker.ExitWriteLock(); };
foreach (var node in tree) {
if (node.child != null) {
var task = Task.Factory.StartNew(() => { child_proc(node.child, adddata); }, TaskCreationOptions.AttachedToParent);
tasklist.Add(task);
} else {
datalist.Add(node.data);
}
}
Task.WaitAll(tasklist.ToArray());
foreach (var data in datalist) { //今は親タスクのコンテキスト上で処理している
}
}
void child_proc(Tree tree, Action<string> adddata) {
foreach (var node in tree) {
if (node.child != null) {
Task.Factory.StartNew(() => { child_proc(node.child, datalist); }, TaskCreationOptions.AttachedToParent);
} else {
adddata(node.data); // このリスト追加処理を無くして、ここで親コンテキストに移って実行したい
}}} 分かってると思うけど親コンテキストには移れない
親に処理を委譲してるだけ
人間と同じ
それなら親が適切なタイミングでリストを見て実行する様に書き換えるだけだろ
当然waitもawaitも出来ない
脳内でじっくり何をやるか順をシミュレートして考え直すしかない >>384
ありがとうございます。
よくよく考えるとControl.Invokeにはメッセージループがあるので、
ワーカスレッドから渡されたdelegateを同期的に実行するタイミングがある事に気付きました。
今回の場合Task.WaitAllにタイムアウトを入れて、子タスクのデータを泥臭くポーリングすることで意図する事ができました。
while (!Task.WaitAll(tasks, 50)) { check(); } // check内で子タスクデータを処理
check(); // 全子タスクが完了した後残りデータがあれば処理
ウィンドウが無いケースでもExecutionContextで強引に実現できそうな記事も見つかりましたが、
やろうとしてる事に対して複雑になりすぎるので今回はこれでいこうと思います。 キャストとパースは同じものでしょうか?
キャストは型変換で、その手法の1つがパースというイメージです。 キャストとParseメソッドの違いは、主に次の点です:
キャストは同じ型の変換に使用されます。つまり、基本的なデータ型間での変換(例: int から double への変換)に適しています。一方、Parseメソッドは、異なる型のデータを文字列から変換するために使用されます。
キャストは基本的に明示的な型変換です。つまり、変換先の型を明示的に指定する必要があります。例えば、(int)doubleValue というように変換先の型をカッコ内で指定します。一方、Parseメソッドは、変換元の文字列が適切な形式であることを確認し、それを適切な型に変換します。具体的な型指定は不要です。
理解
ありがと(*´ω`*) キャストは同じ型の変換に使用されます。
いきなり意味不明でワロタ テキストファイルから読み込んだ数字というのは文字列なんですね
だからparseが必要ってことか float32/64からint32/64にキャストするときって
小数点以下は勝手に切り捨てられるってことで良いのかな
オーバーフローしてたらどうするのかな
色々面倒だよね
「同じ型の変換」って言われると
int32<->int64
の間のキャスト観たいなのを想像する
これも問題無い訳じゃないけど
parseは文字列からの変換を普通に思い浮かべるが
jsonのparseとかみたいに構造まるごと変換のときも使うしな VisualC#を独習している者です。
教えてください。
GridViewコントロールに←→のような、カレント行を移動させるボタンって、ツールとして用意されていないのでしょうか?
コマンドボタンコントロールを並べて自作するしかないのでしょうか? そういうリッチな機能は標準じゃない
欲しいなら自作もしくは適当なUIライブラリ プログラミングの基礎固めってどこまでやるもんでしょうか
成果物作ろうとしても基礎が出来ないと効率悪いですよね 基礎学習は適当に切り上げてなにか作らないと続かないよ >>400
配列の使い方程度なら基礎ですよね?
ゲームなどの成果物はすぐにでも作りたいのですが、他人のコードを読めない問題に直面しまして、基礎からやり直しです。 こないだの配列宣言の話のときは途中でフェードアウトしてたな
そういう中途半端な姿勢ではこの先も危ういだろう ただの誹謗中傷になってる場合は、出来るだけ見ないようにしてます 誹謗中傷とそうでないものの区別がつかないならこのスレには向いてないよ
他所行ったほうがいい それは受け取り方にもよるんですよね
特に人格に対する中傷なんかは得るものがない割に、気が滅入ります
主観的にどう受け取るかという部分もありますし、誹謗中傷の定義は万人共通ではないかと 配列の宣言、作成、初期化、参照
古典のC言語でもポインタが理解できなくてリタイヤする奴は沢山いた
C#ではとても書きやすくなっているが同じ機能があるということは同様に難しいということ
逃げるなら早い方が良い >>406
じゃあ聞くけど>>340-341のどこを中傷だと感じた?
俺は極力そういう言葉を避けて相手をしたつもりだけど >>401
Unityでゲーム作るのが目的なんだろ?
だったら、作って覚える系の入門書をどれか一冊こなしてみればいいと思うよ
そうすれば何が不足しているのか、もう少し具体的に自覚できるようになるから 1ヶ月も同じことをグダグダしてる馬鹿は荒らしか?そうでなければ才能ないから諦めて消えろ 入門書を読めというアドバイスには意地でも耳を傾けない初心者 他人のコードを読み解くのは自分でコードを書くよりも能力が要る
断片的なネット記事から基礎を学習するのも他言語でプログラミングに慣れてないとちょっと厳しい
まぁ、完全な初心者は定番の入門書を読めってことなんだけど、聞く気無いんだろうなぁ せめていい入門書はありますか?くらいには変わってほしい。 これでまたしばらくだんまりでほとぼりが冷めた頃に的外れな質問してくるようならダメだな 初心者には入門書「だけ」は無理だよ
環境設定とか、バージョンの組み合わせとかで動かないことが多い
その場合、初心者は解決できない
ググっても無駄だし 俺はお前が判んなくても一向に困らないし相手してやってるのは自己満足の暇つぶしでしかねーんだよ有難く思えよ?ただし理解しようとしない馬鹿の常駐だけは勘弁
がこのスレ住人の大体の本音だろう。つまり馬鹿の相手をするな 他人のコードを読むと勉強になると言うのは嘘。
情弱は、それに引っ掛かる
正しくは、他人のコードを無限に時間を浪費して読むと、
ほんの少し分かると言うだけ。
それを10年やっても、半年ぐらいの初心者に勝てない
他人のコードを読むのは、自分で書くよりも、10倍以上難しいし、
さらに悪い事に、記憶の定着率も最悪。
だから、勉強にならない
初心者は、掌田津耶乃みたいな入門書で良い
特に、ひろゆき・ホリエモンみたいなプログラミングの素人に聞かない事。
彼らは、やった事ないでしょ? AIに聞くのも無しだな
AIは平気で自信満々に大嘘を吐く
もちろん合ってる場合もあるけど、知識が無いと真偽を判断出来ない これで初心者が、Ruby on Rails を学んで転職していくのが分かるでしょ?
それ以外の言語が通用しない理由。
10年やっても、何も作れないから
大学でC をやった香具師の99%が、プログラミングはしょーもない。
何も作れないとやめていく。
Cの教師が職を失いたくないからやってるだけなのに、それにだまされているだけ
C# も同じ。初心者ができるわけない。
9割がモデラー。プログラマーなんて、ほぼいない
Rails以外で、初心者が転職できる事はない!
難しさの桁が違う
3D モデルを作って動かすんだよ。
クォータニオンとか、数学物理をやっていないと無理。
Python と同じ。文系なんて採用されないでしょ。
だから、文系のアホは皆、Railsへ行く
プログラマーはまず、Railsなどをやった後の話 C/C++も結局は環境依存の各種ライブラリを使わないと初心者では大したものは作れない
普通の授業だとファイル入出力までで終わりで
ディレクトリ操作のdirect.hなんて教えてくれる所は少ないからな ■ このスレッドは過去ログ倉庫に格納されています