ふらっと C#,C♯,C#(初心者用) Part135
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part134
http://mevius.5ch.net/test/read.cgi/tech/1511951038/
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■コードを貼る場合は↓を使いましょう。
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/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured >>445
キュウは意外と使われていないな。しかし本来連続処理をする場合はキューが必要になる。
例えばフィルターとか、通信処理ではなくてもメッセージの改行ごとの切り出しとか。キューを使うべきなのだが
つかってる例がない。
そもそもこのQueueの仕様がだめなんだよな。まるでハードFIFOのまんまじゃないか。笑える。
折角オブジェクト指向で柔軟に作り込みできるのに、何の機能もついてない。ライトするときの型とリードするときの型を
変えられないと意味ないだろ。W
というわけで、
配列でライトして、バイトリードできる利口なキューReQueを作りたいんだが、どう定義したらいいんだ? BCLのQueueは使いづらいのは確か
昔byte[]でもANSIのstringでもpush/popできるQueueを自作したよ ReQue<int[], byte > qq;
とか
ReQue <strigng, LineString>pp;
とか
1.は array をライトしてByteでリード
2.はStringでライトして、CRLFの区切りで切り出し
こんなのはできないか? 適当に言ってみただけだが、わりと簡単に作れそうだな。
C#って無茶苦茶強力だな。何でもできる。 >>435
な?これだけの議論になる。基礎から勉強し直してこい 実戦で役立つ C#プログラミングのイディオム/定石&パターン
独習c#(この前でたもの)が良いと思う WPFってほとんど使われてないって本当ですか?
windows formの方がいまでも需要あるんですかね?WPFしかやったことないから知らなかった。 慣れればWPFの方が楽チン。
WPF用のスレあるから、そっちで https://qiita.com/nskydiving/items/3af8bab5a0a63ccb9893
>Windows Formsの高DPI
VS2017の新機能に高DPIってあるけども、
別にVS2010とかでも、高DPIは使用出来ますよね?
ただちょっとフォントがボケるくらいで、表示不可能とか位置がズレることは無いって認識で合ってますか? Winformsは中途半端なHiDPIサポートが元々入っているせいで
注意深く組まないとネイティブアプリよりもむしろレイアウト崩れやすいレベルだぞ
4.7で追加されたHiDPIサポートとやらもWin10のCUからでないと有効にならない Win10もアップデート次第でレイアウトが異なることがあるのですね・・・。
ありがとうございます。 テキスト編集ソフトを作ってるんですが、ユーザーが開いたテキストファイルの一覧を、
外部ファイルを使用せずにアプリ自身に保存するにはどうしたらいいでしょうか? GetManifestResourceStream ゲームのカートリッジみたいに読み書き可能な領域がexe内にあると思ってんじゃないのか ネタ質問だと思うけど無理なことは無理と言ってあげた方が C++で似たようなことをやったときは
exe起動→exeのコピーを作成して起動。オリジナルは終了→
メイン処理→オリジナルのexeを書き換えてPEのチェッサムを再計算
とやった これだとexeが増えてしまうが
exeをコピーして起動でなく、CreateRemoteThreadで他のプロセスに寄生してしまえばexeを増やさなくてすむ
いかにもウイルス的だけど javaかじってこっちに流れてちょっと学び始めたけど驚くほどjavaとそっくりなんだね そりゃJava使いならJavaと対応してるものに目が行くから似てるように感じるのは当然だろう
今のC#は拡張に拡張を重ねてC++に匹敵するくらい複雑怪奇な言語だよ >>481
確かに複雑になっては来てるけど、C++に匹敵ってのは大げさだろ。
C++はC++11/14/17と着実に先を進んでるからな。 c#は最近は後発気味
毎回追加される仕様は他の言語から引っ張って来てるものばかり
typescriptの仕様とかそろそろ入れてくるんじゃないかと思ってる タイプスクリプトにあってC#にない機能しないなんてある? TypeScriptの肝とも言える structual type と type guard はC#にはないんじゃないかな。 型関連は TypeScript の方が高度で精密
型消去されるので CLI の仕様に縛られない TypeScriptの型システムは完全なstructual subtypingで、そもそも型に対する考え方が大きく違う
「同名のメンバを一つでも持っていれば、共通する部分については同じ型と見做す」という、
高度で精密という表現からはかけ離れた大雑把な型システムだよ
インターフェイスの明示的実装なんかは原理的に不可能だし 既存の型との相互運用は限定されるだろうけど、一つの言語に両者を混在させるところまでは可能だろうな。
ようは型ヒント付きのVariant。 >>483が言ってるのって構造的型と型ガードのことなの?
他にはないの? uniontypeとか入れたい人がいるようだけど
void aaa(string | int | double a )
{
こんな感じで複数の型を受け入れられる c#始めて少しだけど、最初にデータバインドでつまづいて
今は非同期処理を使いこなせなくて辛い
linqもまだまだだし、1人前になるには少なくとも1年はかかるだろうか >>494
言語に振り回されてる
大事なことはプログラムを完成させることだし
処理を実現すること >>495
その通りなんだけど、そもそもやりたいことを実現するために機能が必要なことが多い
xamlに値を直接書きたくない→データバインド
webリクエストを投げてかえってきた結果をスクレイピングして使いたい→非同期処理
コレクションの処理を簡潔に記述したい→linq
全部使わなくても出来るとは思うけど、
どうせあとで書き換えることになるだろうし、
ちゃんと学んでおいた方が後の手戻りが少なくなると思う 動いてるものを書き換えることは少ないよ
特にlinqへ書き換えは趣味の世界 継続的に開発して変化に対応しやすいようにするならlinqは短いコードだけ
ちょっと複雑なのは普通にforやforeachがいい場合がある
linqは結局一つの列挙しか返さないから要素数が違ったりするものを組み合わせられない >>500
たぶん設計が狂ってるんだろうな
複雑なループってトランザクションスクリプト的な汚いシステム特有の現象だよ
要素数が違うってことは異なるエンティティってことだからそれらを同時に列挙してる時点でなにかがズレてるんじゃないの >>502
誰も複雑なループなんて言ってねーじゃん >>500
>ちょっと複雑なのは普通にforやforeachがいい場合がある
forやforeachってループじゃないのかぁ 理解力が低い自慢はいいよ
使いたい人はなんでもlinq使えばいい
linqは限られた用途で光るもの
上の方のレスにある属性がMaxの要素を取り出すにはlinqでは2回ループがいる
foreachやforでは1ループでいい
それがどうだと思う人は永遠に初心者のまま 複雑さと関係ない例だよねそれ
まあLinqで困るようじゃ区別つかんか 10年前からLINQは糞で遅いから普及しないって言われてた。 >>506
ほう
試しにMaxだと2回ループが走って、foreachだと走らないコード書いてみて 初心者の質問スレなんで質問でも回答でもない「先生方」は別のところに行ってください 関数型言語がなんで廃れてるかがよく分かる。KYなんだよ、彼らは。 「そうそう、アメリカは悪いーヤツなんだよね…」
「あ、俺、最近は洋楽聞いてるんだ…」
「関数型言語がなんで廃れてるかがよく分かる。KYなんだよ、彼らは…」
「コーヒー、砂糖入れなくていいからな…」 >>505
バカ?
複雑な処理はって話で
「複雑」はループにかかってる修飾語じゃねーだろ
プログラム言語の前に日本語なんとかしろよバーカ >>514
あのさ文脈少しは気にしたら?
複雑な処理をLinqでやるかループでやるかって比較してたんだろ
ならここでの複雑な処理っての複雑なループか複雑なLinqのどっちかなんだよ
このロジック君にはLinqより難しかったかな? jsonresultの使い方がよくわからないのですが、Ajaxとかでpostしたら結果を受けることができるって感じなんでしょうか
何故かあんまり解説落ちてない >>515
はぁ?
処理は複雑だけど
複雑なループになる確証はねぇだろ
早く死ねよw Linqで書けないような複雑なコレクション操作を何度も書くのはしんどいよ
仮にループで書くとしても1回書いたらそれをLinq拡張として再利用すべきだろうね [1]
var maxItem=null;
foreach(var item in list){
if(maxItem!=null&&item.Value>maxItem.Value)
maxItem=item;
}
[2]
var maxItem=list.OrderBy(item=>item.Value).Last();
[3]
var max=list.Max(item=>item.Value);
var maxItem=list.Select(item=>item.Value==max).First(); 一般的にLINQコードのほうが少ないワーキングメモリで理解できる 馬鹿らしい勝負だな
適材適所
linqが使い良い場所ならそこで使う
forやforeachが使い良い場所ならそこで使う
汎用性はfor foreachが上 最近書き直された独習C# ってどんなぐあいですか?
C#2.0 から知識は止まっているので、買ってみようと思うときもあるのですが >>520
[2]は悪手
ループが多すぎる
並べ替えで何回ループしてるかわからない
しかも無駄にループする可能性があるので
OrderBy Lastの組み合わせじゃなくてOrderByDescending First使うべき Lastだと最後まで列挙されるからってこと?
だから前の誰かはわざわざ降順にしてたのか 仕様通りに動けば中身はなんだっていいんだよ。(個人ならね) 今のはlistがIListならLastでもいい
しかし全部の内部の処理動作を覚えて
いちいちその違いを認識してコードを書くとは思えないので
どうしたらパッと見早く動くように見えるかロジカルに考える習慣をつけるべき デカいリストの時とか変わったループ処理のときだけ原始的な書き方でやればいいんだろうな そもそも内部構造によって悪手かもしれないなら
普通に[1]を選べばいい
何をやってるかわかるから デカイリストとか変なループ処理じゃないなら直感的なリンクでいいよね 書いたコードでその人が何を考えて書いたのかはわかるだろう
そして弱点があるならその人のレベルを疑うだろう
PGは無駄がなく速く動くコードを書きたいと願うもの
初心者はまだその域に達していないだけ >>535
でも1ってバグってね?
maxitemに値入るの? 1,2,3ってそれぞれ別のモンを掴んで来そうだけど
こんな欠陥コードで比較してて大丈夫なの? >>539
省略してあるんだろと思ったけどバグ入り 1,2,3を同じ結果が得られるコードだと思ってるなら不味いよ
っていうか普通にlinqわかりにくいから使ってる奴死のうねってコード
じゃあ、1の不具合修正版と全く同じ動作をする処理を
2と3の形式で書けよって言われるとあんまりlinq使う意味ないんだろ
捨てちゃえよコレ なに言ってるかわからんが、結局
デカいリストの時とか変わったループ処理のときだけ原始的な書き方でやればいいんだろうな >>527
親を殺されてるのに冷静でいられる奴の方が変だ 要素数が多い場合はDBで処理すればいい
シーケンスの集合演算で容易に解けないようなレアケースは一度だけベタに書いてIEnumerable拡張としてライブラリ化して二度とベタに書いちゃいけない
DRYは基本中の基本 オンメモリで処理できるものをDBみたいに糞遅いものに頼ることはないと思うけど
なんかちょいちょい変なやり方をこれがいいですよみたいな書き方はやめたほうがいいよ それにlinqから複数の要素数の違うシーケンスを取り出せないって書いてあるだけだろ
つまんね >>539
バグ以前にコンパイル通らないだろ
> var maxItem=null; ■ このスレッドは過去ログ倉庫に格納されています