X



ふらっと C#,C♯,C#(初心者用) Part148
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ df89-moxv)
垢版 |
2020/05/27(水) 20:28:41.27ID:Pggemlyq0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part147
http://mevius.5ch.net/test/read.cgi/tech/1582100741/
■関連スレ
C#, C♯, C#相談室 Part94
http://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/index
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
0002デフォルトの名無しさん (ワッチョイ 1389-moxv)
垢版 |
2020/05/27(水) 21:03:44.86ID:Pggemlyq0
978 名前:デフォルトの名無しさん (ワッチョイ 1aad-cFKA)[sage] 投稿日:2020/05/26(火) 23:34:30.32 ID:xP2EobkM0 [2/2]
https://www.sejuku.net/blog/47220#Sum

979 名前:デフォルトの名無しさん (ワッチョイ da89-crVl)[sage] 投稿日:2020/05/26(火) 23:55:57.69 ID:pUNOqgdh0 [2/2]
リンク先の例でいうと、ClassName(やその他の項目もあればそれ)も表示させたい場合はどのようにすればいいですか?

980 名前:デフォルトの名無しさん (ワッチョイ 1389-moxv)[sage] 投稿日:2020/05/27(水) 00:07:17.22 ID:Pggemlyq0
>>979 自己レスですが、以下の記述でいけました
var query = result
.GroupBy(x => new { x.Name, x.ClassName })
.Select(x => new Test() { Name = x.Key.Name, Points = x.Sum(y => y.Points), ClassName = x.Key.ClassName });

foreach (var group in query)
{Console.WriteLine($"{group.Name}の合計点数:{group.Points}点;ClassName{group.ClassName}");}

981 名前:デフォルトの名無しさん (スップ Sdf3-Tvg7)[sage] 投稿日:2020/05/27(水) 00:15:29.78 ID:DUgyxf22d
>>980
キーが1つならGroupbyでわざわざ匿名クラス使う必要ないんじゃね?

989 名前:デフォルトの名無しさん (ワッチョイ 9961-moxv)[sage] 投稿日:2020/05/27(水) 09:37:11.33 ID:sy4nr1lC0 [2/2]
>>981
ClassName引き出すのはどうするんだろ?

990 名前:デフォルトの名無しさん (アウアウウー Sac5-5vhd)[sage] 投稿日:2020/05/27(水) 09:58:43.31 ID:liCJZGAla
必要ない
x => x.Name でいい
--------------
.GroupBy(x => x.Name)
.Select(x => new Test() { Name = x.Key.Name, Points = x.Sum(y => y.Points), ClassName = x.Key.ClassName });
にすると、次のようなエラーがでますが、どうしたらよろしいでしょうか。
CS1061 'string' に 'ClassName' の定義が含まれておらず、型 'string' の最初の引数を受け付けるアクセス可能な拡張メソッド 'ClassName' が見つかりませんでした。
0004デフォルトの名無しさん (ワッチョイ 9961-moxv)
垢版 |
2020/05/27(水) 21:21:00.79ID:k3bnO/0Z0
>>2
正規化されてないからめんどくさいな。
二重ループみたいですげーダサいけど

var query = result
.GroupBy(x => x.Name)
.Select(x => new Test() {
Name = x.Key,
Points = x.Sum(y => y.Points),
ClassName = result.Find(z => z.Name == x.Key).ClassName });
0005デフォルトの名無しさん (ワッチョイ 936a-moxv)
垢版 |
2020/05/27(水) 21:28:41.96ID:r6ZOyYGH0
くこか
0006デフォルトの名無しさん (ワッチョイ 2b2c-HO12)
垢版 |
2020/05/28(木) 00:34:34.48ID:MEC8WK3T0
Ruby では、すべてのクラスの祖先の、Object クラスに、
そのインスタンスのクラス名を返す、class というインスタンスメソッドがあるので、
すべてのクラスで使える

C# には、そういうメソッドが無いの?

p "ruby".class #=> String
p 100.class #=> Integer
0007デフォルトの名無しさん (アウアウウー Sac5-LWf4)
垢版 |
2020/05/28(木) 00:53:29.66ID:ImnqiwTFa
宝石箱や〜まで読んだ
0010デフォルトの名無しさん (ワッチョイ 012d-GttG)
垢版 |
2020/05/28(木) 14:15:46.01ID:fRXC37pG0
タプルやジェネリッククラスに対して、型を代入済みの型を作ることってできないんですか?
(string, string)型とか、List<string>型とか、わざわざクラスを作るまでもなさそうなデータ型って簡単に定義できないのでしょうか
0012デフォルトの名無しさん (ワッチョイ 012d-GttG)
垢版 |
2020/05/28(木) 14:30:21.34ID:fRXC37pG0
>>11
ありがとう!こんなの全然知らなかったわ
0015デフォルトの名無しさん (ワッチョイ 012d-GttG)
垢版 |
2020/05/28(木) 17:08:54.35ID:fRXC37pG0
>>13
ファイル内限定だったのか・・・・ちょっと1ファイルで試してみて使えるものだから、プロジェクト内どこでも使えるんだと錯覚してたぜ・・・・
0017デフォルトの名無しさん (ワッチョイ dbc7-05E3)
垢版 |
2020/05/29(金) 19:22:05.56ID:Cxyf4DSR0
メソッドは変数に入れらないのはなぜですか
0019デフォルトの名無しさん (アウアウエー Sa23-1zQY)
垢版 |
2020/05/29(金) 20:14:15.28ID:2er99IBxa
ActionとかFuncのscopeの外側で定義されてる変数を
中で同じ名前で定義するとローカルのつもりなのに
衝突してるエラーでるけどこのエラーを出さないオプションって何?
0021デフォルトの名無しさん (ワッチョイ 1301-2Amd)
垢版 |
2020/05/29(金) 21:54:10.89ID:lyhnjVvq0
>>17
C#ではメソッドそのものは型として扱われてないから
直接変数に代入したり引数として渡したりすることはできない

変数に入れたり受け渡しするためにはDelegateという型に入れてやる必要がある
var foo = obj.method;は不可だけど
Action foo = obj.method;なら可 (ActionはDelegateの一つ)
0022デフォルトの名無しさん (ワッチョイ dbc7-05E3)
垢版 |
2020/05/30(土) 05:10:09.93ID:fH25FKrr0
ありがとうございます
それ用の型があるんですね
0027デフォルトの名無しさん (ワッチョイ 012d-MVlU)
垢版 |
2020/05/30(土) 11:48:13.28ID:r66lkKC80
型推論が効かないて言えばさあ
スタティックフィールドで型推定が効かないのって、あれはなんか理由があるの?
0031デフォルトの名無しさん (アウアウウー Sac5-LWf4)
垢版 |
2020/05/30(土) 13:36:30.05ID:xslsMmtKa
>>26
匿名型の変数は定義して初期化できるのでそれはちょっと
何か事情があるんだろうね

同じシグネチャーのデリゲートは暗黙変換できる仕様にすると何か問題が起こるのかな
0032デフォルトの名無しさん (ワッチョイ d919-kLWK)
垢版 |
2020/05/30(土) 13:44:43.26ID:xeMFRGky0
>>30
そうそうそんな感じ
省略newは今までvar使えてたところでも使えるから
全部省略new派
var使えるところは今までどおりvar使う派
とかが生まれてきそうな感じしてる

varが使えない理由はこないだufcppの人が喋ってた
0034デフォルトの名無しさん (ワッチョイ 012d-MVlU)
垢版 |
2020/05/30(土) 14:40:59.59ID:r66lkKC80
マウスのポインタを乗っけてると推定された型を出してくれるけどさ
あれ正直、表示しっぱなしにして欲しい時もあるよな
0038デフォルトの名無しさん (ワッチョイ 1301-2Amd)
垢版 |
2020/05/30(土) 15:52:45.80ID:tvhETOJ10
>>31
匿名型はその名前の通り型があるからね

匿名型は型が明示できなくても明確な用途があるけど
メソッドの場合はどこかで型を明示しないとほぼ使い道ない

デリゲート同士の暗黙変換ができれば別だけど
そっちはコンパイラの変更が大きいから労力に対してメリットが見合ってない
0039デフォルトの名無しさん (アウアウウー Sac5-LWf4)
垢版 |
2020/05/30(土) 16:26:32.90ID:xslsMmtKa
メソッド名が匿名のデリゲートの値を生成する式と考えることは可能だと思うけどな
知らんけど

匿名のデリゲートという概念を導入すると何か問題が起こるんだろうか
0041デフォルトの名無しさん (アウアウエー Sa23-1zQY)
垢版 |
2020/05/30(土) 16:45:40.23ID:Gtou79yMa
Hoge[] h = new Hoge[]{a,b,c};
var h = new Hoge[]{a,b,c};
var h = new []{a,b,c};

Hage h = new Hage(){A=a,B=b,C=c};
var h = new Hage(){A=a,B=b,C=c};
var h = new Hage{A=a,B=b,C=c}; ←この()が要らないのはなぜですか?
0044デフォルトの名無しさん (ワッチョイ 53ba-cwJf)
垢版 |
2020/05/30(土) 21:06:55.68ID:gop8thIz0
勉強始めて1か月たつけど、現場のプログラマって普段なにしてんだ
言われた通りコードが書ければ仕事になるの?
0046デフォルトの名無しさん (オッペケ Sr8d-13Zu)
垢版 |
2020/05/30(土) 21:57:43.32ID:Lwi25lSTr
>>44
プログラマーって、もう日本にはいない気がする。ここ5年ぐらい日本人のプログラマー見てない。
0049デフォルトの名無しさん (ワッチョイ 012d-MVlU)
垢版 |
2020/05/31(日) 11:51:52.07ID:tOMQXDTx0
VSCodeでコード内の適当な句を選んで「定義へ移動」をよく使ってるんだけどさ
これ、移動先から元の場所に戻るのって、「参照へ移動」の中から選ぶしかないの?
もっとパッと戻れる技があったら教えて!!!
0053デフォルトの名無しさん (ワッチョイ 012d-MVlU)
垢版 |
2020/05/31(日) 14:08:38.84ID:tOMQXDTx0
ありがとう!
でも戻んなくねえか・・・・?
0056デフォルトの名無しさん (ラクッペペ MM4b-eKGp)
垢版 |
2020/06/01(月) 14:17:57.61ID:uM6TLhYNM
てさ
0067デフォルトの名無しさん (ワッチョイ ca6a-uikQ)
垢版 |
2020/06/05(金) 00:51:13.36ID:1j5/pURw0
usingも勝手に補完してくれるし
条件わかんないけど「この型NuGetから持ってこようか?」みたいなサジェストもしてくれる
あ、はい、お願いしますってつい言ってしまう
0069デフォルトの名無しさん (ワッチョイ 4d01-Alfg)
垢版 |
2020/06/05(金) 08:21:55.32ID:HaKNuQ4Y0
他アプリに表示されてるリストボックスの中身の情報を抜き取る方法ありますか?
例えば株アプリの株価情報取得したり、ニュースtextを抜き出したりしたいのです

SPY++ってのを調べてるんですけど情報すくないし少し違ったり
むずかしいでしょか?
0071デフォルトの名無しさん (ワッチョイ d67c-jjst)
垢版 |
2020/06/05(金) 09:52:15.65ID:7ABcsW+P0
UIAutomationに対応してるならSystem.Windows.Automation名前空間下の諸々のクラスでいける
0073デフォルトの名無しさん (ワイーワ2 FFf2-hy1p)
垢版 |
2020/06/05(金) 16:29:00.95ID:WSRdRexsF
最後の手段はマウスイベント送れ
0074デフォルトの名無しさん (ワッチョイ 5da7-T0NP)
垢版 |
2020/06/05(金) 18:41:37.36ID:G2EzgRxv0
画面全部スクショとって座標指定でいいだろ
全部自前で書かれてたらボタンイベントすらねぇんだから
座標指定とクリック、マウスONOFF、キーイベントだけでやるのが正義だろ
とか偉そうなこと言って
造りの問題かクリックイベントすら動かなかったので試験用コンソールアプリ作ってもらいました(´・ω・`)
0075デフォルトの名無しさん (ワッチョイ 4d01-Alfg)
垢版 |
2020/06/05(金) 19:18:55.79ID:HaKNuQ4Y0
>>70
さんくす、ぐぐったらC++のメッセージ送るやつでてきた、むずい
>>71
UIAutomationに対応してるアプリって一般的なのかな、デフォでみんな
対応してたらいいのに、さんくす

>>73-74
さんくす、座標調べてクリックしたことにするのか
テレビ画面録画するみたいな感じか、でもまあ現実的っぽい

リストボックスの中身取得するのに、スクショとって文字画像認識して・・って
0076デフォルトの名無しさん (ワッチョイ 15f1-GwrY)
垢版 |
2020/06/05(金) 21:58:35.28ID:td6kQI8l0
質問だけど
Windowsアプリ作るにあたり
VisualBasicを使っちゃいけなくて(好まれなくて)C#を使うべきっていうのは
どういう理由からですっけ?
0078デフォルトの名無しさん (ワッチョイ 15f1-GwrY)
垢版 |
2020/06/05(金) 22:35:14.45ID:td6kQI8l0
それ以前にマルチスレ
0080デフォルトの名無しさん (ワッチョイ 15f1-GwrY)
垢版 |
2020/06/06(土) 02:57:58.91ID:9mdgv8nE0
>>79
あなたが自粛警察するタイプ。
ずばりそうでしょう。
そんな人は人生がうまくいってないから人生にうらみがあるんじゃないかな。
悩みがあったら聞くよ。
0083デフォルトの名無しさん (ワッチョイ 15f1-GwrY)
垢版 |
2020/06/06(土) 10:25:01.92ID:9mdgv8nE0
人生に不満な人、人の不幸が好きな人、
こういう人は警察という職業に向いている。
0085デフォルトの名無しさん (ワッチョイ 15f1-GwrY)
垢版 |
2020/06/06(土) 12:35:44.64ID:9mdgv8nE0
人生が超楽しくてしあわせな人は
警察に向かないと思う。
人を笑わせ楽しませる仕事か、あるいは自分の趣味に関わりのある仕事に没頭するか。
0087デフォルトの名無しさん (ワッチョイ 867b-uuwx)
垢版 |
2020/06/06(土) 15:21:40.20ID:1oYratVd0
ワッチョイ 15f1-GwrY
ワッチョイ a919-OO8l
アウアウウー Sa11-gmWH
テンプレ理解できない人はNG
>>82
元のレスがマウスイベントにどう関わるかわからないから別件としてレスするけど
>マウスイベント
たまに勘違いしている人がいるがフォームにフォーカスが無くても(フォームがアクティブでなくても)動く
>キーイベント
C#でグローバルキーフックを作った人がいる
http://hongliang.seesaa.net/article/7539988.html
0092デフォルトの名無しさん (ワッチョイ a9ed-B5RW)
垢版 |
2020/06/09(火) 06:21:44.92ID:UwuOEQTZ0
https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet

ここを見てやってるんですが、最初の1ページ目のサンプルで失敗します。

A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet'.

調べても英語の人の書いたブログしか出てこないのですが、
どうすれば解決できますか
009392 (ワッチョイ a9ed-B5RW)
垢版 |
2020/06/09(火) 06:40:31.85ID:UwuOEQTZ0
VisualStudioをアップデートしたら動きました。。。orz
0094デフォルトの名無しさん (ワイーワ2 FFf2-B5RW)
垢版 |
2020/06/09(火) 09:37:00.46ID:sE3YfRh/F
dotnet を get して最初にすることは dotnet の update
0095デフォルトの名無しさん (JP 0Hf2-Mery)
垢版 |
2020/06/09(火) 13:06:57.31ID:dFHXVz0lH
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

PS malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
0096デフォルトの名無しさん (ワッチョイ 6fc7-Z00E)
垢版 |
2020/06/11(木) 11:07:24.07ID:/xGObRM50
ウルフエディターはC++で作られているようです
2dなのにc++にするメリットはあるんでしょうか
テクスチャの移動程度ならC#でできますよね
0099デフォルトの名無しさん (ワッチョイ 6fc7-Z00E)
垢版 |
2020/06/11(木) 12:40:59.96ID:/xGObRM50
3dならC+しか選択肢がないと思いますが、C#ならopenglは使わないと思います
0102デフォルトの名無しさん (エムゾネ FF1f-MwbW)
垢版 |
2020/06/11(木) 13:00:57.60ID:JpYLw7MRF
WPF
0103デフォルトの名無しさん (ワッチョイ 6fc7-Z00E)
垢版 |
2020/06/11(木) 13:11:12.03ID:/xGObRM50
>>101
へぇ UWPというやつですかね
0105デフォルトの名無しさん (ワッチョイ 6f84-q7/F)
垢版 |
2020/06/11(木) 17:27:54.49ID:yAt1qMQq0
>>96.>99
仕事のなら発注元の指定、趣味ならば好みなのでメリット/デメリットって気にする
ことないと思うよ
複数の言語に堪能でそれぞれの言語特性に合わせてアプリケーション毎に言語を
選定してプログラムを組んだり発注したりするより、一番使い慣れた言語でやるのが
普通じゃないかな
c#でdllimportsてWin32apiを使うなんてアンマネージなコードは邪道だとか
言われてもc#が良いんだって人は普通にいるので、簡単なGUIプログラムもC++が
手っ取り早いってことなんでしょう
0107デフォルトの名無しさん (ワッチョイ c301-tD/8)
垢版 |
2020/06/11(木) 20:49:36.46ID:yGmpvECN0
oracle
0117デフォルトの名無しさん (ワッチョイ a301-EVMN)
垢版 |
2020/06/11(木) 22:58:40.14ID:vRuHoTo/0
みなさんさんくす
>>107
oracle使ってるの?有償で本格的なイメージ
>>108
SQLiteいいですよね、お手軽そうで
>>109
AccessってC#で使えるんですね、Access使い慣れてる人ならよさげ
>>110
Postgreも人気ですね、SQLiteよりもいいのかな
111
SQLServerが一番に名前出てくると思ってました
112
PostgreはC#と親和性高いのかな

見事に割れてるような感じがするのですが、C#.netと相性がいい悪いより
使い慣れてるものを使ってる感じですか
0120デフォルトの名無しさん (アウアウウー Sa67-Qd01)
垢版 |
2020/06/11(木) 23:21:42.50ID:5eBlYw+xa
C#との親和性とか言われてもなあ
いまどき大抵のDBMSでEFも使えるから、極端な話DBMSを途中で乗り換えても
C#で書き換えるのはconfigファイルの接続文字列とNuGetするパッケージだけ
EF使わないならSQLの方言を気にする必要はあるけどそれは組み立てるStringが変わるだけだし
DBMSに応じてC#ソースコードの書き方が変わるようなことは一切ない
0123デフォルトの名無しさん (ワッチョイ ffad-E8/F)
垢版 |
2020/06/12(金) 02:21:54.36ID:opbb+AId0
>>120
親和性は今でも問題になるケースがあるよ
OracleはEF Coreが出てから対応するまでに3年かかったし、EF Core3.0はOracleが対応する前にサポート期間が終わっちゃった。3.1のbeta版が少し前にやっと出たとこで、RTMになるころにはもうEF Core5が出てるw
0124デフォルトの名無しさん (スッップ Sd1f-E8/F)
垢版 |
2020/06/12(金) 03:34:44.54ID:ZwJzd5pPd
>>120
>C#で書き換えるのはconfigファイルの接続文字列とNuGetするパッケージだけ
>DBMSに応じてC#ソースの書き方が変わるようなことは一切ない
これは嘘。DbContextOptionsBuilderの拡張メソッドはDBMSごとに異なるし、そのオプションも変わってくる。当然Migration用のコードは再度生成する必要がある。まあその程度で済むんだけどね。
0126デフォルトの名無しさん (ワッチョイ a301-EVMN)
垢版 |
2020/06/12(金) 10:19:25.67ID:LH1ywJSs0
>>119
これからNOSQLも勉強しないとダメなのかサンクス
>>120
さんくすねDBMSはどれ選んでもだいたい同じですか
>>123-124
なるほどね、細かなところ互換性問題あるけど、それほど困ることもないですか
まあDBMSコロコロ変更したりしないだろし、さんくす

欲をゆえば、これは定番でみんな使ってるし、迷ったらコレみたいのがあったらよかた
0127デフォルトの名無しさん (テテンテンテン MM7f-3sqf)
垢版 |
2020/06/12(金) 10:33:37.51ID:67KMUSUMM
オンプレかクラウドかにも依るだろう
オンプレならできればDBの運用保守はベンダーに丸投げしたいところだが、
そこまでするほどの規模ではないならSQL Serverが比較的楽だろう
クラウドだったら自分でインフラを管理する必要のない完全マネージドなサービスを選ぶべきだ
例えばAWSならPostgresベースのAurora、AzureならSQL Database(SQL Serverベース)になるだろうな
0129デフォルトの名無しさん (ワッチョイ a301-EVMN)
垢版 |
2020/06/12(金) 20:30:56.85ID:LH1ywJSs0
>>127
なるほど、クラウドなら相手先でだいたい決まってるんですね
結局仕事でプログラマやってる人はSQL全部やってそうな、さんくす

>>128
さんくす、Webアプリと連携したりするならPostgreとかMySQLは必須っぽいですね
0130デフォルトの名無しさん (ワッチョイ ff6a-NjyN)
垢版 |
2020/06/13(土) 00:57:45.04ID:bzHb5W4o0
>>122
アノテーション必須なところ
0133デフォルトの名無しさん (ワッチョイ ff6a-NjyN)
垢版 |
2020/06/13(土) 01:13:19.59ID:bzHb5W4o0
間違えた、そう、アトリビュートね
推奨されてないならますます必須なのは困るだろ
0137デフォルトの名無しさん (ワッチョイ ff6a-NjyN)
垢版 |
2020/06/13(土) 02:34:08.73ID:bzHb5W4o0
手厚いなら標準でサポートしろ
0140デフォルトの名無しさん (スッップ Sd1f-E8/F)
垢版 |
2020/06/13(土) 03:28:12.11ID:wwBJVROwd
>>130
なぜ必須だと思いこんでしまったのか…少しググれば↑のプラグインも出てくるというのに。
DBMSによって異なる仕様を全てコアのライブラリに取り込んでしまうのはアンチパターン。拡張可能なエンドポイントを用意して、適切な粒度で分けないと。
0142デフォルトの名無しさん (ワッチョイ 6fc7-Z00E)
垢版 |
2020/06/13(土) 13:23:26.68ID:K/U+GWpl0
rpgツクールみたいなソフトはC#とC+どちらがいいんでしょうか
electronではだめなのですか?
0150デフォルトの名無しさん (アウアウウー Sa67-uznS)
垢版 |
2020/06/14(日) 02:49:46.49ID:elQ0/Qc7a
くだらない質問で申し訳ない

static IEnumerable<char> AToZ()
{
  for (char c = 'A'; c <= 'Z'; c++) yield return c;
}

static IEnumerable<string> AAAToZZZ(int n)
{
  if (n < 0) throw new IndexOutOfRangeException();
  if (n == 0) yield break;
  if (n == 1) foreach (var c in AToZ()) yield return c.ToString();
  foreach (var c in AToZ())
    foreach (var item in AAAToZZZ(n - 1))
      yield return c + item;
}

こういうシーケンスもっと短く綺麗に書ける?
nが負の時の処理はこだわらない。(例外投げずに空のシーケンスを返すのでも可)
どうでもいいけど、yield returnとreturnは混在できなことを今日初めて知ったw
0151デフォルトの名無しさん (アウアウウー Sa67-uznS)
垢版 |
2020/06/14(日) 03:07:11.97ID:elQ0/Qc7a
こうじゃなきゃダメかw

static IEnumerable<string> AAAToZZZ(int n)
{
  if (n < 0) throw new IndexOutOfRangeException();
  switch (n)
  {
    case 0:
      yield break;

    case 1:
      foreach (var c in AToZ()) yield return c.ToString();
      break;

    default:
      foreach (var c in AToZ())
        foreach (var item in AAAToZZZ(n - 1))
          yield return c + item;
      break;
  }
}
0154デフォルトの名無しさん (ワッチョイ 8f02-+Do1)
垢版 |
2020/06/14(日) 13:47:32.96ID:EPf5hgHv0
再起嫌いだわ
難しいことせず素直に書くならこうかな

static IEnumerable<string> AAAToZZZ(int n)
{
if (n < 0) throw new IndexOutOfRangeException();

IEnumerable<string> result = AToZ();
for(i = 1; i < n; i++)
result = Hoge(result, AToZ());

return result;
}

static IEnumerable<string> Hoge(IEnumerable<string> items1, IEnumerable<string> items2)
{
// items1+items2の組み合わせ
foreach (var item1 in items1)
foreach (var item2 in items2))
yield return item1 + item2;
}
0157150 (アウアウウー Sa67-uznS)
垢版 |
2020/06/14(日) 23:20:59.70ID:FMtFwmQda
みなさんありがと
やっぱり劇的に単純化できるような方法はないか

>>154
俺は再帰使った方が簡単に感じるなあ
この辺は人それぞれなんだろうか

>>155
面白いけど可読的かなあ
ビール飲みながら読んでたら頭が痛くなってきたw
ところでこういう処理をCartesianと呼ぶのは一般的なの?
何でデカルト?
n次元の直交座標をスキャンしていくイメージ...?
0159デフォルトの名無しさん (ワッチョイ 4359-lMPZ)
垢版 |
2020/06/15(月) 12:58:53.43ID:G4ousd2n0
プログラムに日本語が使われた物って、日本語がインストールされていない環境でも動きますか?

変数名などに日本語を使って海外へのローカライズ時にはUIのみをその国の言語に差し替える感じで。
0160デフォルトの名無しさん (ワッチョイ a384-q7/F)
垢版 |
2020/06/15(月) 18:13:18.65ID:yRL+7o6a0
>>159
作成したexeのUI(たとえばButtonコントロールのTextに「押しボタン」とか)が
日本語表示でも、文字化けが問題ないならば動くことは動く

プログラム自体の変数名(たとえば「int 合計」みたいな)であればユニコードで
保存されているはずなのでコンパイルは通るらしいけど、日本語の表示が
できない環境では読めないソースになる

プログラム実行時の画面表示でローカライズってどうやるのっていう話ならば
言語ごとのリソースを作って対応するのが普通なので「c# 国際化対応」で
ググると色々サンプルが出てるよ
0161デフォルトの名無しさん (ワッチョイ 4359-lMPZ)
垢版 |
2020/06/15(月) 19:19:37.65ID:G4ousd2n0
>>160
複数パターンの回答感謝です。
ありがとうございます。

回答いただいた2例目が自分のパターンになると思います。
ソースコードを読まれる事を想定していない場合はコンパイルが出来れば、実行ファイルは問題なく動くという事でしょうか?

今ゲームを作っていて、海外にも配布したいです。
enumで管理している状態異常の名前などが英語だと長くてわかりにくいので日本語にしたいです。

例えばapple.pngをりんご.pngにしたりするのも問題ないでしょうか?
0164デフォルトの名無しさん (ワッチョイ 2324-aC9a)
垢版 |
2020/06/17(水) 13:51:06.28ID:e85N0kXp0
エクスプローラーのようなファイラアプリを作っているのですが、DirectoryInfo等を利用してその都度ストレージからフォルダ構造やファイルなどを拾い上げると時間がかかってしまうためこちらでキャッシュしたいと考えています
フォルダツリーやフォルダ下にあるファイルなどの情報をキャッシュするのに適したものってなんでしょうか?
jsonでそのまま多次元配列としてシリアライズするのが最も簡単そうには思えますが、合計ファイル数が1万件近くあるとファイルサイズやパフォーマンス的にsqlite3などを利用したほうが良いのかなと色々迷ってます
0166デフォルトの名無しさん (アウウィフ FF47-HKig)
垢版 |
2020/06/17(水) 15:25:29.42ID:GES6ctGCF
エクスプローラーも1万件あるとあきらかに遅くなる
0167デフォルトの名無しさん (ワッチョイ b602-vBZN)
垢版 |
2020/06/17(水) 15:38:18.73ID:yVuIICiL0
低レイヤのこと詳しくないけどそもそもGetDirectoriesとかGetFilesもMFTから読み込んでるんじゃないの?
FindFirstFileのラッパーなはずだけどFindFirstFileの内部ではそうしてるもんだと思ってたが
0168デフォルトの名無しさん (ワッチョイ e301-gRm5)
垢版 |
2020/06/17(水) 15:46:17.14ID:0xoIejs00
MFTはNTFSにしかないから、
SDカード(普通FAT系)とかネットワーク
ドライブなら
FindXXの高レベルAPIを使用する事に
なるよ。

書籍ならWindows Internals (chap12
なのでpart2)に説明がある

Qiitaで見かけた記憶があるのでこちらを
探すってのもありかと
0169デフォルトの名無しさん (アウアウウー Sa47-7nK8)
垢版 |
2020/06/17(水) 15:56:57.68ID:wCFe9G62a
>>164
そもそも本当に体感できるほど時間かかるかなあw

連番をプリフィクスしたファイル名でデータを保存する、なんて処理を結構書いてて、
その場合は当然ディクトリ内のファイル名を走査して開いてる番号を探すわけだけど、
少なくとも数千件程度のファイル数で体感できるような処理時間を感じたことはないが...
0172デフォルトの名無しさん (ワッチョイ 0b01-oh81)
垢版 |
2020/06/18(木) 07:14:38.56ID:tX12dTLd0
アドバイスでもなんでもないが俺も昔自分用のファイルDB作ってたんだが
起動時に対象フォルダ下のファイルをGetFilesやGetDirectoriesで収集 → DBからタグ等の細かい情報取ってきてくっ付けるってやるとき、sqliteから一つ一つwhere fullpathというように文字列で検索すると約5000件/3分くらいかかったんだよな
そこでwhereを入れず全部取得 → while (reader.Read()) sqFiles.Add();と一旦こちらのリストに全部放り込んでから
愚直にforでリストからフルパスと一致するものを探すって方式に変えたら5000件/500msというアホみたいに高速化された思い出がある
0173デフォルトの名無しさん (ワッチョイ 0b01-oh81)
垢版 |
2020/06/18(木) 07:24:19.57ID:tX12dTLd0
ちなみにこれじゃsqlite使う意味ねえじゃんwって思われそうだが、その初回時の検索でlong型のPrimaryKeyであるUniqueIdも取得するんで2回目以降は一つ一つ検索する場合でも普通に早い
タグ以外にもblob型の多少サイズ大きいバイナリとか色々DBには保持させてるんでな
0174デフォルトの名無しさん (ワイーワ2 FF12-HKig)
垢版 |
2020/06/18(木) 11:07:27.03ID:OoPd9bgDF
forで愚直に検索中にディレクトリの状態やDBの状態が変化していなければ良いねω
0179デフォルトの名無しさん (ワッチョイ aae2-VNxU)
垢版 |
2020/06/18(木) 12:01:47.66ID:LpN/zpxZ0
SQLiteに限らずmatchならまだしも文字列の=って糞遅いでしょ、トランザクションが有効なのって書き込み時だしね
SQLiteのクエリはutf16版を使ったところで結局はutf8への変換が生じるからC#から使うとオーバーヘッドは避けられない
その上でPRAGMA encoding='UTF-16'とかしてたらまたまたキーワード部分を変換しないといけなくなったりともうめちゃくちゃ
だから一回のクエリで全件持ってきてC#上で検索すればそれくらい早くなるというのはまぁ自然
0182デフォルトの名無しさん (ワッチョイ e301-gRm5)
垢版 |
2020/06/18(木) 13:20:40.79ID:h9R/TQ390
トランザクショなるNTFS=TxFとか沼ですな。
※Vistaで導入7から8に変わった時に
デグレした機能w

TransactionalFileMgr
.Net Transactional File Manager がこのスレ
的に正解かな?
0184デフォルトの名無しさん (ワッチョイ db2f-1/Nl)
垢版 |
2020/06/21(日) 13:35:38.83ID:jQi52PAy0
C#のGUIからパイソンを実行してデータ分析させたいんだけど、
すごく簡単に実現できる方法ってありませんか?

1 C#からテキストファイルでデータ出力
2 C#からPython起動し、テキストファイルのパスを渡す
3 Pythonでデータ分析しグラフ出力

みたいな感じです。
PythonからC#に受け渡すデータはありません。
0188デフォルトの名無しさん (ワッチョイ 0f01-5fXH)
垢版 |
2020/06/24(水) 15:59:14.27ID:rxIn+gin0
SQL Server Express LocalDBのSQL文の質問なんですが

CREATE DATABASE myDB;
これはちゃんと成功するんですが

CREATE DATABASE IF NOT EXISTS myDB;
こう書くと失敗します
System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'IF'.
Incorrect syntax near 'myDB'.

このSQL文は使えないんでしょか?かわりの方法はあるでしょか?おねがいします
0190デフォルトの名無しさん (ワイーワ2 FFbf-qwRG)
垢版 |
2020/06/24(水) 16:27:10.24ID:6+kkBVmVF
DROP すると等価ではないな
0192デフォルトの名無しさん (ワッチョイ 3f01-0Hhk)
垢版 |
2020/06/24(水) 17:06:11.29ID:ZBvJ9IFx0
>>190
おお、そうだね
文法しか気にしてなかった

>>191
CREATE DATABASE文にはIF NOT EXISTSとかのオプションは無いから>>188はエラーになる
DROPはIF EXISTSのオプションが用意されてる

188と等価にしたいならT-SQLのIF-ELSE使って存在チェックして
DBが無い場合にだけ作成すればいい
(存在チェックはDB_IDかsys.databasesを読むか)

IF EXISTS ( … )

ELSE
CREATE DATABASE …
0195デフォルトの名無しさん (ワッチョイ 0f01-5fXH)
垢版 |
2020/06/24(水) 20:43:40.85ID:rxIn+gin0
>>192
さんくすです
> IF NOT EXISTSとかのオプションは無いから
なんと、あったら便利なのにね
IF-ELSEでがんばってみます

>>193
SQL文なので若干すれ違いかなっと
似たようなことがLINQtoSQLでできればとおもったのですが
0196デフォルトの名無しさん (ワッチョイ 4f90-l8dZ)
垢版 |
2020/06/24(水) 22:59:21.23ID:G18p0mGY0
Entity Frameworkでデータベースと連携したい場合

public class Book{
. public int Id { get;set;}
. public string Title { get; set;}
}

モデルは↑みたいな感じになるけど
実際には↓みたいな感じに色んなデータとふるまいを持ちたいとする
public class Book{
. public int Id { get;set;}
. public string Title { get; set;}
. public List<Picrture> Picture { get;set;}
.
. (以下振る舞い等)
}

この場合って下のデータモデルからから上のDTOに変換してデータベースに入れる(取り出す時は逆)って考え方でいいのかな?
多くのサイトがEntity Frameworkでのデータベースへの突っ込み方しか書いてなくて
実際に運用する場合のデータの持ち方の考え方がよう分からん
この辺りまで詳しい本とかサイトとかあったら教えてください
0197デフォルトの名無しさん (ワッチョイ 8f01-H7K1)
垢版 |
2020/06/24(水) 23:58:21.16ID:KiDLqidP0
いいんじゃない?DTOは名前の通りデータをDAOと受け渡すためだけに使って、振る舞い持たせるのは違う気がする。
0198デフォルトの名無しさん (アウアウエー Sabf-TKyb)
垢版 |
2020/06/25(木) 00:07:24.74ID:pPMcnwWPa
単純なアプリだとDomainModelも単純だからEntity、DomainModel、ViewModelを同じインスタンスで済ませられる場合が多い
真面目にやるならそれぞれ別のクラスにしてマッピングするんだけどめんどくさいんだよな
0200デフォルトの名無しさん (ワッチョイ 0fa7-eW5c)
垢版 |
2020/06/25(木) 01:37:48.23ID:Q34w5rfS0
>>199
やめた方が無難
拡張したい階層が2-3ズレるのはよくあること
たったそれだけなのに拡張のために付けた処理が邪魔になって
本当にやりたい改修が大きな工数になってしまうことはよくあること
0202デフォルトの名無しさん (ワッチョイ 0fa7-eW5c)
垢版 |
2020/06/25(木) 08:48:00.18ID:Q34w5rfS0
>>201
あるやろ?
色んなリストの表示方法(文字着色、並び替え、フォントサイズ個別指定、背景色着色)を実装できるようにしたけど
客の欲しいのはページングのある印刷機能だけだったみたいな
改修にときノリで入れたフォントサイズの変更や文字や背景色がページング印刷時にうまく出ない
→ああ、無いほうが簡単だったな

っとか
0203196 (ワッチョイ 4f90-l8dZ)
垢版 |
2020/06/25(木) 20:33:53.95ID:42cionTC0
ありがとうございます
勉強になりました
0204デフォルトの名無しさん (ワッチョイ 0f87-plLw)
垢版 |
2020/06/26(金) 07:51:51.47ID:a7mre53d0
c#でアクティブウィンドウがosよりも先にキーボード入力を受けとる方法はありますか?

やりたいことはリモートデスクトップを全画面で繋げている場合、Alt+Tabキーの入力は呼び出し元のosではなく、リモートデスクトップ側が取得しているように見えます。
この挙動を自作のguiでもできればと考えています。

「アクティブウィンドウがosよりも先にキーボード入力を受けとる」の認識が間違っているかも知れませんが、リモートデスクトップのような挙動を実現する方法を教えてください。
0206デフォルトの名無しさん (ワッチョイ 3f52-RSi0)
垢版 |
2020/06/26(金) 09:07:56.65ID:wYfFflLL0
>>204
余計なお世話かもしれないけど、アプリの枠の外にあるOS側での共通の操作を、1アプリの都合で勝手にフックされて違う動作になるのは使う方からするとストレスになるから気を付けた方がいいかも。
リモートデスクトップはある意味OS内OSだし、そういう例外的なケースならばアリだと思うけど。
0207デフォルトの名無しさん (スップ Sddf-plLw)
垢版 |
2020/06/26(金) 09:43:44.08ID:an36r83ud
>205
ありがとうございます。調べてみます。

>206
今回は自分で使いたいものなんで。
将来的に業務で使う機会があれば考慮するようにします。ありがとうございます。
0208デフォルトの名無しさん (ワイーワ2 FFbf-/Fs/)
垢版 |
2020/06/26(金) 13:15:51.31ID:PjbtVFt+F
キーロガー禁止
0210デフォルトの名無しさん (ワッチョイ 8a01-5cl0)
垢版 |
2020/07/01(水) 15:49:13.62ID:BmoMMcjv0
20年ぐらい前からプログラミングやりたいと思い続けてきた文系おじさんだけど
数年前から少しずつ勉強し始めて、
やっとのことでちょっとしたものをC#で作れるようになってきた
おもしろいわぁ
0211デフォルトの名無しさん (ワッチョイ 06c7-QTdV)
垢版 |
2020/07/02(木) 08:48:04.62ID:+yIU1z+T0
https://freesoft-100.com/review/lightbulb.html
色温度をいじれる言語ってなんでしょうか?
pythonを主に使用しているのですが、C#系でないと色温度はいじれませんか?
色温度にもモニタ側、gpu側があると思います。
0212デフォルトの名無しさん (ワッチョイ aa52-16Rz)
垢版 |
2020/07/02(木) 09:03:57.94ID:unw3xiWi0
>>211
詳しくないから間違ってるかもしれないが、そのアプリ単体ではなく他のアプリも含めて画面の色温度を変えるという機能なら、OSがそういうAPIを提供しているということかな。それならそのAPIを利用できる言語ならばC#に限らずなんでもいいと思うけど。
0213デフォルトの名無しさん (ワッチョイ 7f7b-6Rnc)
垢版 |
2020/07/02(木) 09:04:49.65ID:iSJIUTiv0
>>211
スレ違いだからpythonのスレで聞くかそれのソース自分で理解してほしんだが
C#でできるのはWINAPIをラップした.NETの機能を使うか直にDLLのAPIを呼び出すかくらいなんだから
pythonでAPI使えるのなら同じことができるはず
0214デフォルトの名無しさん (ワッチョイ 06c7-QTdV)
垢版 |
2020/07/02(木) 09:51:08.11ID:+yIU1z+T0
ありがとう
c#にはそういうクラスがあるみたい
winのソフト作るにはc#が一番都合がいいよね
0215デフォルトの名無しさん (ワッチョイ 1e63-VQSO)
垢版 |
2020/07/02(木) 11:09:32.81ID:esHBKAii0
質問です
DateTime.Now.ToString(@"yyyy\MM\dd") => 2020\07\02 を期待したいのですが 2020M7d2 になります
今は \\ を別な文字に置換し変換後また置換ってやってますがよい方法あれば教えてください
0219215 (ワッチョイ 1e63-VQSO)
垢版 |
2020/07/02(木) 11:41:12.70ID:esHBKAii0
>>216
なるほど、できました
しかし元の文字列は \ 一文字で決まっているのでどのみち何か手を加えないとならないですね

>>217-218
フォルダ名の生成で日付を含めた任意の書式を扱えるようにするためなのです
0220デフォルトの名無しさん (オッペケ Sr23-OmMV)
垢版 |
2020/07/02(木) 12:25:41.08ID:frMfUtj7r
あー「ファイルパスを作成するとき、年月日ごとのフォルダ階層をつくるため」ってことね
年の中に月だけの名前のフォルダとかセンス的に俺はようやらんけど、理由は理解できたわ
0222デフォルトの名無しさん (エムゾネ FFaa-JCxG)
垢版 |
2020/07/02(木) 17:00:29.84ID:ryu4JvV+F
/でも造れるやろ
0223デフォルトの名無しさん (ブーイモ MM69-SFhf)
垢版 |
2020/08/01(土) 16:52:28.79ID:aC56TYwwM
VisualStudioは糞です。
{}を使うとき

public voidnicemethod
{

}
となるのではなく

public void nicemethod{
}
と自動でなるようにするにはどうしたらいいですか?
0229デフォルトの名無しさん (テテンテンテン MMee-UdrD)
垢版 |
2020/08/01(土) 18:23:48.50ID:dl6F83GvM
簡単な住所録作ろうとしてます。
登録と削除と追加ができればいいだけのやつ。データ保存はデータベース側に。
これのシンプルなオープンソースプロジェクト知っている方いませんか?いたら嬉しい。
0234デフォルトの名無しさん (ワッチョイ 25ad-DBrF)
垢版 |
2020/08/01(土) 20:12:27.90ID:Yannm6rz0
簡単な登録と削除ができるだけでいい住所録にそんなものが必要だとは思わんというか、
何かをカスタマイズしてその程度の住所録にするのは、ちょっとたいそうな気がする。
0235デフォルトの名無しさん (ワッチョイ 7a6a-xE3T)
垢版 |
2020/08/01(土) 20:49:12.61ID:oCALSNxU0
エスパーすると作りたいけど右も左も分からんからお手本が欲しいってことかな
0237デフォルトの名無しさん (ワッチョイ 8ede-akQC)
垢版 |
2020/08/01(土) 21:48:16.20ID:NKcPOHZ30
オープンソースってちょいっと触るには佇まいがでかすぎて流用には向かないことが多い
住所録のどこの部分の機能が必要か知らんけど
単にアドレス帳の登録、削除、編集の基本機能だけだったら1〜2日の内容だから
どっか入門サイトで似たようなの見つけて実装したほうが早いと思う
0238デフォルトの名無しさん (ワッチョイ 4a32-RDrw)
垢版 |
2020/08/01(土) 21:52:38.29ID:+9Q20FKV0
スレ違いだったら申し訳ないです。
C言語をやろうととりあえずmacかったのですが、
どのソフトで開発環境作ったらいいでしょうか?
0242デフォルトの名無しさん (ワッチョイ 4a32-RDrw)
垢版 |
2020/08/01(土) 22:11:32.98ID:+9Q20FKV0
わかりました
ありがとうございます
0243デフォルトの名無しさん (ワッチョイ 7a05-Zvsf)
垢版 |
2020/08/02(日) 06:10:11.27ID:T2MIboAU0
c#で作ったbotからandoroidスマホに通知を送る良い方法はありませんか?
履歴を確認できる方法で。
今まではline-notifyでlineに送っていたのですが、新しいルート証明書をインストールしなくてはならなくなって別の方法を探しています。
0248デフォルトの名無しさん (アウウィフ FF09-QWST)
垢版 |
2020/08/02(日) 16:20:00.33ID:NsDY9jGSF
ここはプログラムを描きたい人造りたい人向けのスレ
フリーソフトダウンロードして使いたい人は相応のスレへ逝くことをお薦めします
0249デフォルトの名無しさん (ワッチョイ 875f-OjAs)
垢版 |
2020/09/03(木) 22:01:35.41ID:RMVHFRAl0
public interface Ixxxxx
{
 int method1(int x);
}

インターフェイスについて質問です。
上ではメソッドの型を定義しているわけですが、
インターフェースの引数定義で、xのように変数を設定するのはどうしてなんでしょうか。
ここでは使われない変数なので、型のみで良いと思うのですが。

それから、publicを省略して、interfaceとだけ定義する理由はどうしてなのでしょうか。
classなら、publicを前置するのに。
0250デフォルトの名無しさん (ワッチョイ 875f-OjAs)
垢版 |
2020/09/03(木) 22:10:50.18ID:RMVHFRAl0
ルート相対的URLを保存するクラスは何が適しているんでしょうか。

String型に、/root/abc/def を文字列として保存しているのですが、
適切な型があれば教えてください。
0253デフォルトの名無しさん (ワッチョイ 5f24-VIJL)
垢版 |
2020/09/04(金) 11:28:01.48ID:M8Oq5rfA0
>>249
引数や戻り値の型をしっかり定義しないといけない理由は、ILやアセンブリといった低レベル知識を学習すればよく分かるよ
機械語レベルだとint、long、float、double〜etcはそれぞれ命令文が違う
だから引数や戻り値がバラバラな値型だとそれぞれの機械語を生成しなきゃならず共用化出来ない

逆に言うと参照型であればポインタだけで済むので実は共用化が出来る
なので参照型であればobjectとして定義をすれば実際に共用化可能(値型もboxingしてobject型にすれば同様)
0257デフォルトの名無しさん (テテンテンテン MM8f-wKT+)
垢版 |
2020/09/04(金) 13:31:45.96ID:Cdgw0eXGM
インターフェイスメンバに引数名が必要なのは名前付き引数のためでもある
名前付き引数ってのはmethod1(x:123)みたいな書き方のこと
正確には名前付き引数がC#に導入されたのは比較的最近なので時系列が逆なんだけど、
.NETはC#に限らずいろんな言語を動かすことを想定して設計されてるので名前付き引数のための要請についても元々考慮されてたというわけ
0263デフォルトの名無しさん (アウアウウー Sa8b-CqCa)
垢版 |
2020/09/04(金) 19:19:04.36ID:Utz5OTUqa
あーインターフェイスのメソッドの仮引数が名無し定義を許す仕様になってたら
名前付きで呼び出せないよって言いたいわけか
確かにその通りだね。

だけど「名無し定義を許さない理由の一つは名前付き引数を想定していたから」は考えすぎじゃないのかな
0266デフォルトの名無しさん (アウアウウー Sa8b-wKT+)
垢版 |
2020/09/05(土) 10:58:29.89ID:JiWof8twa
>>265
それはもちろんその通りで、名前付き引数も当然そのメタ情報を見るわけだけど、
MSが仮に明確な意思をもってインターフェイスメンバに引数名は絶対要らないという設計判断をしたならCLIもインターフェイスメンバには例外的に引数名を持てない仕様にしただろう
CLIの設計としてはわざわざそんな例外を設けるのは不自然だし、C#の言語仕様を考えてもインターフェイスメンバだけ例外的にメソッド宣言の文法が違うのは不自然だ
もちろん、実装には追加コストを払って特別なケアが必要になるだろう
そこまでして引数名を省略したいだろうか?ということだね
0275デフォルトの名無しさん (アウウィフ FF8b-th+2)
垢版 |
2020/09/06(日) 14:33:55.32ID:pKWvrGW4F
省略するとき
hoge(hage,,,,,fuga,,,,kuzu,,,) みたいな言語あったなー
0276デフォルトの名無しさん (ワッチョイ 0701-3NJ+)
垢版 |
2020/09/07(月) 02:57:30.38ID:u0REhpNo0
using var task = Task.Run(() => Do(a, b, c));

このDoを途中で止めることできる?
Doの処理に時間がかかるためキャンセルさせたい場合がある
0281デフォルトの名無しさん (ワッチョイ 0701-3NJ+)
垢版 |
2020/09/07(月) 16:30:38.13ID:u0REhpNo0
Doの改造も不可避みたいですね
ありがとうございました
0282デフォルトの名無しさん (アウアウウー Sa21-3UIE)
垢版 |
2020/09/11(金) 09:13:51.86ID:rDZLwTxXa
VisualC#2019パーフェクトマスター

買ってみた
800ページ近くある
勉強しなおし

Java有償化で、いろいろ特需だな

Javaよサラバ

Javaよサラバ

Why なぜに生きているのか

わからない
0283デフォルトの名無しさん (ブーイモ MM81-az8F)
垢版 |
2020/09/11(金) 10:05:52.91ID:qxFjIo0zM
Java有償本当か?
0285デフォルトの名無しさん (エムゾネ FF32-0ian)
垢版 |
2020/09/23(水) 09:34:34.80ID:hJkRvCZvF
>>1
Part 149
0286デフォルトの名無しさん (アウアウウー Sa43-k+EL)
垢版 |
2020/09/23(水) 19:49:30.91ID:SeN5l4G8a
需要ないと思うけど暇だったので別スレで質問が出てたキー操作のシーケンスで発動する
キーボドショートカットを作ってみた
https://ideone.com/FcOn5C

使い方:
public partial class Form1 : Form
{
  private KeyboardShortcutsDetector mKbsDetector = new KeyboardShortcutsDetector();
  public Form1()
  {
    InitializeComponent();
    mKbsDetector.AddKeyBinding(Keys.Control | Keys.K, Keys.Control | Keys.L, () => Console.WriteLine("Ctrl + K, L"));
    mKbsDetector.AddKeyBinding(Keys.Control | Keys.K, Keys.Control | Keys.M, () => Console.WriteLine("Ctrl + K, M"));
    mKbsDetector.AddKeyBinding(Keys.Control | Keys.J, Keys.Control | Keys.U, () => Console.WriteLine("Ctrl + J, U"));
  }

  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
  {
    return mKbsDetector.ProcessKey(keyData) ? true : base.ProcessCmdKey(ref msg, keyData);
  }
}
退屈なコードだからたぶん見るだけ時間の無駄だと思うw
0288デフォルトの名無しさん (ラクッペペ MMde-T5KC)
垢版 |
2020/09/24(木) 12:42:20.92ID:gbWGo5W3M
ボタン押したあとに結果リストにフォーカス移動させるのは
viewでやってええのか?
0290デフォルトの名無しさん (ワッチョイ 1201-nSIs)
垢版 |
2020/09/26(土) 17:13:06.01ID:xSRIB2Tf0
windowsフォームアプリでHttpClientを使ってhtmlを取得しようと思っていますがうまくいきません。ステップ実行すると※の部分で処理が終わってしまいます。エラーに関する表示が何もでないため行き詰まってます。非同期処理に関する理解が浅いからだと思っていますが、壁を乗り越えられません。
このようなコードではなぜうまくいかないのでしょうか?

@
private void button1_Click(object sender, EventArgs e)
{
 var url = "http://www.google.com";;
 var t = GetHtml(url);
 t.Wait();
 this.textBox1.Text = t.Result;
}
async Task<string> GetHtml(string url)
{
 var client = new HttpClient();
 var html = await client.GetStringAsync(url);//←※
 return html;
}

(続く)
0291デフォルトの名無しさん (ワッチョイ 1201-nSIs)
垢版 |
2020/09/26(土) 17:13:28.26ID:xSRIB2Tf0
>>290の続き


ためしにコンソールアプリで似たコードを書いてみましたがうまくいきます。
A
static void Main(string[] args)
{
 var url = "http://www.google.com";;
 var t = GetHtml(url);
 t.Wait();
 Console.WriteLine(t.Result);
}
static async Task<string> GetHtml(string url)
{
 var client = new HttpClient();
 var html = await client.GetStringAsync(url);
 return html;
}

フォームアプリでもハンドラに全て突っ込めばうまくいきます。
B
private async void button1_Click(object sender, EventArgs e)
{
 var url = "http://www.google.com";;
 var client = new HttpClient();
 var html = await client.GetStringAsync(url);
 this.textBox1.Text = html;
}
0296デフォルトの名無しさん (ワッチョイ 4b2c-ozis)
垢版 |
2020/09/27(日) 04:46:18.27ID:6sIZ9RBB0
Android, Electron などは、スレッドが2つある。
UI(描画)スレッドと、サーバー(バックグラウンド)スレッド

だから、2つのコンテキスト・文脈をまたがって、非同期などはできない。
異なる文脈の処理を呼び出すには、文脈を切り替えるような、特別な書き方がある

まあ、Windows のGUIアプリが、2つの文脈でやっているかどうかは知らないけど
0298デフォルトの名無しさん (ワッチョイ d684-b+lb)
垢版 |
2020/09/27(日) 16:39:54.69ID:BMd/NSoW0
>>290
多分非同期処理って調べるとasyncの例ばかりで自分で戻り制御する方法がよく
分からなくてTaskクラスでWaitすれば出来るとかって結論に達したんでないかと
思うのだけど・・・

まず、async指定されたメソッドは呼び出されるとメソッド全体を別スレッドとして
起動して処理を元のスレッド(この場合STAスレッド)に戻します
asyncメソッドの中でawaitを指定すると、メソッドの内容に関係なく元のスレッドに
戻るのは変わらないですが、asyncメソッドの中でawaitで指定されたメソッドが
終了するまでasyncメソッドのスレッドだけが待ち状態になり、awaitから返って
くるとawait以降を実行しasyncメソッドの最後まで行くとasyncメソッドのスレッド
だけが終了されます

検証してないので予想なのですが、Taskクラスで管理するスレッドを起動して
いない(Task.Run)状態でWaitをかけるとSTAスレッドを待つためにsleepして
しまいますがSTAスレッドはループスレッドなので当然いつまで待っても終了
しません
asyncスレッドではawaitの処理が終わって復帰しようとしても元になるSTA
スレッドがsleep状態なので、こちらもawaitから返ってこないみたいなことが
起こっているのだと思います

2のコンソールアプリの場合にはループスレッドではないのでMainの処理が
終了した時点で続きが動くのではないかと

3は正しい使い方で、STAスレッドは動かしたままbutton1_Clickメソッドが別スレッドで
動作する際にclient.GetStringAsyncの処理を待っているので普通に動作します

button1_Clickの中で待つのであればasyncメソッドを作る意味がないですし、async
メソッドで裏で動かすのであればbutton1_Clickで待ってはいけないので3の様な
形で実装するか、asyncメソッドの返却値をただのstringにして、textBox1.Textに
メソッドの返却値が入る形式に変える(こっちは試してないので嘘かも)のが正解じゃ
ないかな
0302296 (ワッチョイ 4b2c-ozis)
垢版 |
2020/09/28(月) 02:24:40.60ID:QIpyCS2B0
JavaScript が難しいのは、非同期が基本だから。
コンテキスト・文脈が異なる。
時間の進み方が異なる世界で、同期を取らないといけないから

Ruby が簡単なのは、同期が基本だから。
非同期の方がオプション

Android, Electron がややこしいのも、2つの文脈の同期を取る必要があるから。
1つのアプリ内に、GUI・非GUI の文脈がある

例えば、Electronなら、Main は、Node.js のCUI スレッドで、
Renderer は、GUI のChromium スレッド

双方は、決められた書き方をしないと、同期・通信できない
0303デフォルトの名無しさん (ワッチョイ 1201-nSIs)
垢版 |
2020/09/28(月) 06:18:20.07ID:ii9XSMYC0
>>290です
>>296
コンテキスト・文脈という概念がまだ把握できてないのでそこが課題だと思ってます
>>298
自分は独習C#という本をテキストにして勉強しています。
その中で、>>291のAと似たコードが記載されていて、
これを使ってasync/awaitの基礎が説明されています。
そこで、フォームアプリで真似してみたんです。
デッドロックについてはいろいろ調べてみて基本的な理屈は理解できました。
ただ、Aのコンソールアプリでデッドロックが起きない理由がわかりません。
コンソールアプリはループスレッドではないからとのご指摘が重要だと思っていますが
まだ理解が浅くてモヤモヤしてます。
あと、
>まず、async指定されたメソッドは呼び出されるとメソッド全体を別スレッドとして
起動して・・・
の下りですが、スレッドが3つあると考えればいいのでしょうか?
a.STAスレッド(2のスレッドを呼び出したスレッド)
b.async指定されたメソッドを処理するスレッド
c.client.GetStringAsync(url)を処理するスレッド

これはAのコンソールアプリでも同じですか?
bについては独習C#には書かれていなかったので
aとbは同じスレッドだと思い込んでいました。

調べてみてよく分かったのですが、理解できていない概念が多すぎますね。
今の時点で安易に触ってしまうと変に誤った先入観を持ってしまいそうです
この辺をわかりやすくしっかり説明している書籍等、ご存じないでしょうか?

結論としては
基本的にフォームアプリの中でWaitを使うな
使いたいならConfigureAwait(false)で回避しろ
ということなのかなと思っています
0307296 (ワッチョイ 4b2c-ozis)
垢版 |
2020/09/28(月) 08:52:18.25ID:QIpyCS2B0
>>303
コンテキスト・文脈が異なるとは、全く別世界・異次元。
時間の進み方も異なるし、全く感知できない。
通信・同期もできない

未定義の動作と同じ。
あらゆる仮定・推測ができない

だから、双方が連絡するには、特別な書き方をしないといけない

普通の言語では、例外も補足できない。
他方で例外を投げても、伝わらない

だから、ストールするのは、文脈が異なる場所で、例外が起こっている可能性もある。
起こっていても分からないから

本を買うよりも、検索して調べた方がよい。
こういう説明が載ってる本は、まずない。
余程、マニアックな本だけだろう
0309デフォルトの名無しさん (ワッチョイ 2f33-EUyz)
垢版 |
2020/09/28(月) 08:59:13.21ID:Zg0P7tB00
>>303
C#による マルチコアのための非同期/並列処理プログラミング
ttps://gihyo.jp/book/2013/978-4-7741-5828-0

C#によるWindowsシステムプログラミング 第2版
ttp://www.cutt.co.jp/book/978-4-87783-468-5.html

この2冊しかしらん
もっといいのを知ってる人いたらよろしく
0310296 (ワッチョイ 4b2c-ozis)
垢版 |
2020/09/28(月) 09:04:53.56ID:QIpyCS2B0
確かに、GUI の根幹には、永久のイベント(メッセージ)ループがある。
イベントドリブン

ずっと、ユーザーからのマウスイベントなどが、キューに入るのを待っている。
キューにイベントが入ると、それを処理する。
それを永久に続ける

一方、CUI では、そういうイベントドリブンは聞かない。
マウス操作で、何かをするというのも聞かない。
Ctrl + C を押して、割り込み処理を発生させることはできるが

でも、こういうアプリの終了などのソフトウェア割り込みも、イベントループで拾うけど
0311296 (ワッチョイ 4b2c-ozis)
垢版 |
2020/09/28(月) 09:08:06.54ID:QIpyCS2B0
そんな難しい本を読んでも、理解できないから無駄だと思う

検索した方がよい
0312デフォルトの名無しさん (ワッチョイ 2f33-EUyz)
垢版 |
2020/09/28(月) 09:11:10.60ID:Zg0P7tB00
>>305
用意した画像の一部だけが表示されている
たとえば、
pb.SizeMode = PictureBoxSizeMode.StretchImage;
といった感じでPictureBoxSizeModeを指定してみると何が起こってるのか何となくわかるんじゃね?
0315296 (ワッチョイ 4b2c-ozis)
垢版 |
2020/09/28(月) 10:20:17.53ID:QIpyCS2B0
結局、GUI・CUI も、どちらもイベントドリブンなのか

大部分は同じなのかも
0323デフォルトの名無しさん (ワッチョイ ca4a-E04M)
垢版 |
2020/10/10(土) 10:58:06.91ID:RvE6O+PE0
.NET Coreでコンソール画面に
「こんにちは、WORLD!」と表示させようとすると
なぜか「こんにちは、WORL!」のように表示されます

コンソール画面のメニューからフォントを変更すると正しく表示されますが原因が分かりません
0329323 326 (ワッチョイ ca4a-E04M)
垢版 |
2020/10/10(土) 19:40:42.12ID:RvE6O+PE0
>>327 >> 328
試してみましたが改善しません

出力をコピーしてメモ帳にペーストしてみると正常なので
どうも文字化けではないようです

文字の表示位置がずれて重なっているような感じです
0335デフォルトの名無しさん (アウアウウー Sa2f-DH51)
垢版 |
2020/10/10(土) 21:17:43.96ID:RlZbVDXEa
何にもアドバイスできないのに恐縮だけど、

>コンソール画面のメニューからフォントを変更すると正しく表示されますが
だったら具体的にどのフォントで問題が発生してどのフォントで発生しないか
確認した範囲で書いた方がいいのでは

あと、普通テキスト変えていろいろ試さないか?
0337デフォルトの名無しさん (ワッチョイ 1b02-tHo0)
垢版 |
2020/10/10(土) 23:23:35.42ID:wgBcrtZd0
>>320
Typeで事足りそうなものだが…

あるいは設計の問題かも。
どんな設計なのかも書き込んでみたら?
0338デフォルトの名無しさん (ワッチョイ 5b49-fMdf)
垢版 |
2020/10/20(火) 10:49:57.27ID:N2Y7+9Dy0
ローカルでiTextSharpを利用して、
Json形式のデータからPDF帳票を作る・・てのつくったんだが、
(サーバ上で、APIコールとかファイル読込でPDFファイルを返したかった。
 イメージ的にはページごとにTextとかLineを指定したJsonデータ)
いざ業務に転用できるかなってフェーズにきて
iTextSharpのライセンス(AGPL)がやだなあ、って思ってる。
PDFSharpは日本語がなんかうまくいかない。

今のC#で、PDFを作るの、皆さんはどうやってる?
0340デフォルトの名無しさん (ワイーワ2 FF3f-Vszw)
垢版 |
2020/10/20(火) 10:59:00.80ID:pHiz9StDF
PDFSharp使ってるけど問題無し
0342デフォルトの名無しさん (ワイーワ2 FF3f-Vszw)
垢版 |
2020/10/20(火) 11:13:59.21ID:pHiz9StDF
日本語不安ならグラフィック直接PDFに張り付けろ
0344デフォルトの名無しさん (ワイーワ2 FF3f-Vszw)
垢版 |
2020/10/20(火) 12:50:06.87ID:pHiz9StDF
>Json形式のデータからPDF帳票を作る

これが折り返しするかどうかだな
0345デフォルトの名無しさん (ワッチョイ 5b49-fMdf)
垢版 |
2020/10/20(火) 13:46:22.13ID:N2Y7+9Dy0
皆さんありがとうございました・・・
方針としてはPDFSharpをもっかいいじくり倒して、他にもいろいろ試してみます・・・
プレプリント紙への印刷やめたい

>>339
そんなソフトあるんですね!サーバ版たけぇ・・

>>341
クライアントサイドのレンダリングはちょっときついです、環境バラバラなんで

>>342
自分にはグラフィックをちょうどよくテンプレにはめる設計力がなさげ

>>344
折り返しするんですよね。。
まあそれ以前使うフォントが特殊でつまずいたっていうのがありましたが
0349デフォルトの名無しさん (ワッチョイ ef02-pZTf)
垢版 |
2020/10/20(火) 16:09:37.19ID:CqCKSidt0
C♯が現在最強言語らしいので勉強したいのですが
マイクロソフトはVB6の開発を打ち切ってプログラマを裏切った過去があるそうで
なかなか踏み切れずにいます。。。
C♯は20年後も開発が続いてると思いますか?
教えてエロい人
0350デフォルトの名無しさん (スップ Sdbf-H+yj)
垢版 |
2020/10/20(火) 16:14:23.52ID:Nb9oJ8Mwd
そんな先のことなんざわからん
確実に言えるのは今勉強している技術を20年後も変わらずに使い続ける前提でいるような技術者は居ない(と信じたい)
生き残ってるなら初期学習がない分少し楽かもしれないけど、新しいのが台頭してくりゃそちらを新たに学習するだけ
0356デフォルトの名無しさん (アウアウウー Sacf-0T0S)
垢版 |
2020/10/20(火) 17:16:01.37ID:nipGGPAZa
>>353
勉強が1ヶ月続くかどうかも怪しい奴が20年後の心配をするのは馬鹿げているぞ。
そんなことじゃ、何かを勉強し始めたとしてもことあるごとに足踏みして前進できない未来しか見えない。
0361デフォルトの名無しさん (ワッチョイ ab5f-UsEC)
垢版 |
2020/10/20(火) 21:29:38.81ID:j1S9Ds0j0
それIronPythonと何が違うの?
0366デフォルトの名無しさん (ワッチョイ 65e4-xMNm)
垢版 |
2020/10/21(水) 00:36:52.32ID:0KDGF23Y0
なんかうろ覚えなんだが
こういう非同期処理の書き方ってちゃんと動いたっけ?

if(!locked){
 locked = true;
 await xxx.Task;
 locked = false;
}

async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無いって昔判断したような記憶はある
0369デフォルトの名無しさん (JP 0H22-pYMh)
垢版 |
2020/10/21(水) 09:43:40.30ID:eNSg6QZpH
四捨五入の結果がおかしいのって自分だけかな・・・

decimal v = -0.0195m;
decimal rounded = Math.Round(v, 2, MidpointRounding.ToPositiveInfinity);
Console.WriteLine(rounded);
ってすると、小数点2桁までになるよう(小数点3桁目を)四捨五入するので
-0.02になるはずなのに、結果が-0.01になっちゃうんですけど・・・
0371デフォルトの名無しさん (ワッチョイ 1d1a-8DiG)
垢版 |
2020/10/21(水) 12:02:28.19ID:sg7OOy0L0
>>366-368
awaitで同期取ってるから問題ない

>>369
To Positive Infinityだから正数寄りになる
ゼロを基準にしたければMidpointRounding.AwayFromZeroを指定する

await(待つ)もそうだが、変な日本語のリファレンスよりも明快な解説が変数名に詰まってるんだからお前らはまずその単語をGoogle翻訳に掛けるべきだと思うわ
0373デフォルトの名無しさん (JP 0H22-pYMh)
垢版 |
2020/10/21(水) 13:03:41.62ID:eNSg6QZpH
>>371
-0.01と-0.02の中間(MidPoint)である-0.015のときの丸め方(Rounding)として
「MidpointRounding.ToPositiveInfinity」を指定したつもりだったのですが・・・
MidPointじゃないときにも「ToPositiveInfinity」が適用されちゃうんですね・・・

JavaScriptのMath.Round()とおなじような(四捨五入される桁の数字が5の場合に
正の無限大の方向で丸める)四捨五入をしたかっただけなのですが、
関数を自作しないとだめみたいなので自作します。
お騒がせしました。
0377デフォルトの名無しさん (ワッチョイ 1d1a-8DiG)
垢版 |
2020/10/21(水) 14:15:10.32ID:sg7OOy0L0
>>373
それならこんな感じで簡単に作れるから頑張れ

static decimal[] table = new decimal[]{1E0m, 1E1m, 1E2m, 1E3m, 1E4m};
static decimal Round(decimal num, int pow) => Decimal.Floor((num * table[pow]) + 0.5m) / table[pow];

decimal num = Round(-0.015m, 2); // -0.01

>>372
普通にメインスレッドから叩いていればこうなるからな

if(!locked){ // thread 1
 locked = true; // thread 1
 await xxx.Task; // thread 2
 locked = false; // thread 1
}
0386デフォルトの名無しさん (ワッチョイ 1d1a-LA9s)
垢版 |
2020/10/21(水) 17:36:18.89ID:sg7OOy0L0
>>385
つまりこういうのを危惧してるのか?

Task.Run(() => {
 if(!locked){
  locked = true;
  await xxx.Task;
  locked = false;
 }
});

だとしたらこんなのは仮定に持ち出すのがそもそも間違い
それ言い出したらフィールド操作するあらゆるメソッドで「並列で呼び出される可能性がある」とlock()で括らなきゃいけなくなってしまう
0388デフォルトの名無しさん (ワッチョイ 022f-MACq)
垢版 |
2020/10/21(水) 17:55:56.87ID:5E7rZ8hS0
元の質問がマルチスレッドでのロックに関する質問だと思うのだがな

このコードはスレッドセーフですか?
いいえ危険です

みんなが回答してるのはそういう事
このスレの趣旨や質問者のレベルを考えると妥当な仮定と回答だと思うぞ
0390デフォルトの名無しさん (ワッチョイ 1d1a-LA9s)
垢版 |
2020/10/21(水) 18:02:52.19ID:sg7OOy0L0
元の質問って>>366だろ?

> async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無い

「同じスレッドに戻る」を認識してるなら疑いなくtrueやん
ここで「でも別スレッドで動かしたら危険」と言うのは質問の前提を崩してる
0392デフォルトの名無しさん (ワッチョイ 022f-MACq)
垢版 |
2020/10/21(水) 18:19:06.78ID:5E7rZ8hS0
そのawaitしてるのはasyncメソッドだから、メインスレッドからのみ呼ばれるとは限らん
つまりもどるのがメインスレッドだとは限らん

というの理解しているのならまあ大きなお世話だと言えなくもないが
あとフォームアプリじゃなければ、もとのスレッドに戻るも保障されないけどな
0393デフォルトの名無しさん (ワッチョイ c201-45kF)
垢版 |
2020/10/21(水) 19:06:44.50ID:lxmGvu010
>>389
なるほど
ロックって言葉でちょっと意図を勘違いしてた
タスクが実行中ならもう1回呼ばれても実行しないようにしたいってことだったのか

タスクの中には他のスレッドと競合する処理はなく
ifブロックはUIスレッドでのみ実行されるという前提ならいいんじゃねって気がする
0394デフォルトの名無しさん (ワッチョイ 895f-ojc3)
垢版 |
2020/10/21(水) 19:15:16.66ID:/GjtxlMb0
そもそも呼ばれないようにしろ
0400デフォルトの名無しさん (ワッチョイ c201-45kF)
垢版 |
2020/10/24(土) 21:50:33.27ID:878uww5f0
MoreLinqのIndex()がKeyValuePair<int, TSource>を返してくれる
簡単だから自分で実装してもいいけどライブラリ使うほうが管理含めて楽

foreach (var (i, x) in foo.Index()) {
Console.WriteLine($"{i}: {x}");
}
0407デフォルトの名無しさん (ワッチョイ eea7-qdaq)
垢版 |
2020/10/25(日) 00:24:48.70ID:lDlwJ32m0
そもそもforeachなんて作ったやつの脳みそ腐ってんだから仕方ない
何回回すのかもコードからわかんねーし
どう回したいのか変わると一気に産廃
そもそもforeachなんて産廃コード使うなよ
変更に激弱だろ

あ、インデックスN番目は処理したくない
→産廃
あ、後から処理しないと
→産廃
あ、奇数と偶数で処理変えないと
→産廃
あ、こっちの配列もみながらいっしょに処理しないと
→産廃

もうあれね
コードレビューでforeachを見つけたら
修正させるぐらいでいい
0408デフォルトの名無しさん (ワッチョイ e1ad-gqeA)
垢版 |
2020/10/25(日) 07:44:18.56ID:yVRP623B0
インデックスを考えるような用途でforeach使うほうが悪いだろ。
偶数と奇数で処理変えるのも意味わからんし、イテーレタを一つずつって変更に強いと思うけど。
全部Linqでなんとかなることだけどさ。
0410デフォルトの名無しさん (アウアウクー MMd1-AKl2)
垢版 |
2020/10/25(日) 09:10:32.90ID:WAUUQolqM
偶数の場合こう処理します!
プログラム解説サイトとかでありがち。
実務でそういうのに出くわしたことほぼない。
0414デフォルトの名無しさん (スフッ Sda2-gqeA)
垢版 |
2020/10/25(日) 09:36:22.60ID:w//Xf3xfd
>>411
それはデータ行に対してやることじゃない。
行に対して表示非表示の制御加えるだけで破綻する。
表示中の画面の描画関数でやることであって、行をイテレートしてやることじゃない。

>>412
2行1セットなら、そのクラスを作って、1インスタンスごとに制御するのが王道でしょ。

どんだけ空想上の「組んだこと」で話してんの?それともボンクラなの?
0416デフォルトの名無しさん (スフッ Sda2-gqeA)
垢版 |
2020/10/25(日) 09:40:44.86ID:w//Xf3xfd
>>415
必要じゃないし、パース時点ではパーサ使うし、中では極力foreach使うよ。
2行で1アイテムが3行で1アイテムになったときにModulo全部変えてくの?
頭悪すぎるコーディングでしょ。
0418デフォルトの名無しさん (ワッチョイ e1ad-gqeA)
垢版 |
2020/10/25(日) 10:01:32.46ID:yVRP623B0
>>417
画面側でやること。
描画関数には何行目かそもそも渡ってくるからループなんぞする必要もないだろ。

それを客が言ってるからってデータでやるのは手早くて汚い方法取ってるか、それしか知らないって事じゃん?
0422デフォルトの名無しさん (アウアウイー Sad1-y5oF)
垢版 |
2020/10/25(日) 10:36:49.62ID:MD0uz1BLa
最近のC#ならTupleで書けるからindexつきSelectのほうが短く書けて楽かな
foreach (var (item, index) in items.Select((x, i) => (x, i)))
{
Console.WriteLine($"{index}: {item}");
}

for (var index = 0; index <= items.Length; i++)
{
var item = items[i];
Console.WriteLine($"{index}: {item}");
}
後者の書き方に仕込まれてるバグを目視だけで見つけるのはやっぱりしんどい


ていうかDataGridViewなら奇数行・偶数行のスタイルをそれぞれ別に設定できたはず
なんでそれ使わないでロジックで制御するんだろう
0423デフォルトの名無しさん (アウアウクー MMd1-AKl2)
垢版 |
2020/10/25(日) 10:46:49.59ID:WAUUQolqM
>>411
そんな偶数奇数で色変えるとかはコントロール側で制御して、各機能では意識せずに作れるようにしてる。
有償のものは標準でそういう機能ついてる。
あなたのところは各機能でそんなことさせてるの?

ほとんどのシーンでforeachは使えるしforより可読性も高い。

C上がりのひとは頑なにfor文つかうよね。
0424デフォルトの名無しさん (アウアウクー MMd1-AKl2)
垢版 |
2020/10/25(日) 10:48:09.55ID:WAUUQolqM
とか書いてたら話終わってた…
0426デフォルトの名無しさん (ワッチョイ ee2f-3XbD)
垢版 |
2020/10/25(日) 11:43:12.08ID:6wSnm1o40
フォームアプリを作成していて、
作ったタブページを一時的に表示させないようにしたいのですが
(開発者用なのでユーザーから隠したいタブページ)
invisible設定とかないのでしょうか?
0428デフォルトの名無しさん (ワッチョイ fd5f-Naer)
垢版 |
2020/10/25(日) 13:16:25.56ID:FzqccguI0
elisp上がりだとdolistか
0430デフォルトの名無しさん (ワッチョイ c201-45kF)
垢版 |
2020/10/25(日) 13:20:19.02ID:M7kzCKlu0
>>405
拡張メソッドの問題ではないような・・・

それはいいとして順番だけど
map/reduce系のAPIはindexがオプショナルなので引数の順番は(value, index)が一般的で
index付きのtuple的なもの返す場合は(index, value)で返すほうが一般的
自分の知ってる言語はどれもそうなってるよ
0432デフォルトの名無しさん (スフッ Sd33-5Eci)
垢版 |
2020/10/28(水) 08:05:19.87ID:68kYXJV6d
>>431
ポート開けて通信する。
プロセス間通信する。
のどっちかかな。
Core化するなら、ポート開けて通信したほうが良いかも。
embedIOとか使うとhttpサーバがびっくりするほど簡単に立てられるよ。既存アプリの上に。
0444デフォルトの名無しさん (オッペケ Src5-oSKY)
垢版 |
2020/10/29(木) 21:27:35.00ID:fAmed0Klr
動的なJsonを作成したいのですが、いい方法ありませんか?
今考えてるのは
1. Jsonシリアライズ用クラスを用意(複数)
2. 処理部で使用するタイミングで1.クラスnew
3. 2.でnewしたクラスのみ匿名型オブジェクトに突っ込む
4. 3.をシリアライズ

これで一応は出来るんですが、3.で分岐多くなるのが非常に汚くて。
0451デフォルトの名無しさん (ワッチョイ 1340-mlHN)
垢版 |
2020/10/30(金) 05:36:06.93ID:Of4L3rez0
スタティックライブラリーを使うためDLLにしているのだが、関数ポインタを引数にする関数があって困っています。
C#の関数をその関数ポインタに結びつける方法ありますか?
0452デフォルトの名無しさん (ワッチョイ 1324-XCPW)
垢版 |
2020/10/30(金) 07:28:47.86ID:NoXL5vik0
>>451
関数ポインタ引数に対してはdelegateをそのまま渡せばいいよ
LPCTSTR引数に対してstringをそのまま放り込んでも成立するのと同様にdelegateもPVOIDとして解釈される
つまりそのDLLで使う関数の型のdelegate型を作って渡せば良いだけ
0456デフォルトの名無しさん (ワイーワ2 FF63-L1Xi)
垢版 |
2020/10/30(金) 12:16:19.25ID:7MkyV1CpF
>>444
msgpack
0460デフォルトの名無しさん (アウアウエー Sae3-qHab)
垢版 |
2020/10/31(土) 20:35:43.78ID:jPO/JqMva
最近最新版がプレリリースされたwebView2って、C#ではまだ使えないんでしょうか?

https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/gettingstarted/winforms
上記サイトに習ってnugetからインストールし、1日いろいろ試して全く動作しませんでした。
ソリューションエクスプローラーの参照の、webView2をダブルクリックすると、「このプロジェクトは利用不可能き、またはビルドされていないため、オブジェクトブラウザで表示できません」と表示されます。
webView2もVisualStudioもMicrosoft Edgeも最新版をインストールしてもダメでした。
0465デフォルトの名無しさん (ワッチョイ 1324-XCPW)
垢版 |
2020/10/31(土) 21:00:33.78ID:1joLaKYt0
>>462
それでも良いと思うけどConsole.WriteLineみたいに強制改行関数作っといたら?
あとC#自体のアドバイスになるけど、"処理しています……" + "\r\n"は+いらないから"処理しています……\r\n"で良いし
変数挟むときは$を付けて{}で囲む$"あと{i}秒\r\n"って書き方は各プログラミング言語の中でもトップクラスに便利だから覚えておいた方が良い
0466デフォルトの名無しさん (ワッチョイ 8b7b-ZVtx)
垢版 |
2020/10/31(土) 21:34:45.65ID:2P+i0kOV0
>>462
>>465の言うように文字列とか送るだけで表示するメソッド作っておくといろいろ後付けで改変しやすくなる
RichTextBox使えば状況に応じて文字列ごとに色やフォントを変えることもできるし
あとAppendTextは自動でTextBoxをスクロールしてくれる便利なものだけどメソッドの先頭で念のためFocus()かSelect()しておくと確実
フォーカス当たってないと自動スクロールしてくれないので
0469デフォルトの名無しさん (ワッチョイ fb42-Y3Cl)
垢版 |
2020/10/31(土) 22:21:19.47ID:4IwElBvx0
>>463
ありがとう。使ってみる

>>464
今回やりたい事は違うけどこれはこれで知りたかった事だ。ありがとう

>>465
改行用の関数をForm1の方で作っといてdelegateかfuncで処理用クラスに渡す感じかな?
$マークのやつそういう使い方だったんかサンクス
あと改行だけ分けたのは元のコードで「str + “¥r¥n”」の形だったのを直した名残だわ

>>466
フォーカス当たってないとスクロールしてくれないのか
なんか動いてくれないと思ってたんだよな
0470デフォルトの名無しさん (ワッチョイ 2b2d-yS8S)
垢版 |
2020/10/31(土) 22:39:35.75ID:syXSgGXN0
>>469
積極的にコンソールを使う意図が無いのであれば、AllocConsoleよりも
System.Diagnostics名前空間のDebug.WriteLine()やTrace.WriteLine()を勧める
VSのデバッグ出力画面やDebugView++等のアプリで見れる
0472デフォルトの名無しさん (ワッチョイ 136a-Wesc)
垢版 |
2020/11/01(日) 00:44:45.18ID:TS2lQNKS0
>>460
本当に書かれている通りにやったの?
・WebView2はプレリリース版でなければならない(今だと1.0.674-prereleaseかな?)
・EdgeはCanary版でなければならない
なんとなく、WebView2のプレリリース版でなく安定版の方を入れてそうな予感
0473デフォルトの名無しさん (アウアウエー Sae3-qHab)
垢版 |
2020/11/01(日) 08:45:28.58ID:R1ZyiuLQa
>>472
ありがとうございます!
通常版のedgeをアンインストールして、edgeのcanary版をインストールして、再度通常版のedgeをインストールしたらできました!
2種類のedgeがインストールしてないと動作しないんですね。

webview2を使う場合は、全ユーザーも、canary版のedgeをインストールしていないと使用できないんでしょうか?
0476デフォルトの名無しさん (アウアウクー MM45-S7XH)
垢版 |
2020/11/02(月) 07:35:20.34ID:kZXAdCJzM
クラスの自動プロパティについて質問
自動プロパティがない頃は、頭にアンダースコア(_hogeHoge)をつけたprivate変数を用意しておいて、
コンストラクタやメソッドではそちらを読み書きしていた。

でも自動プロパティができたら、アンダースコアのprivate変数は不要になった。
これまで何も考えずに、コンストラクタやメソッドではプロパティそのもの(HogeHoge)に対して読み書きしているんだが、これでいいんだろうか…

それともクラス内部で読み書きが発生する場合は自動プロパティ使わないほうがいい?
0478デフォルトの名無しさん (アウアウクー MM45-S7XH)
垢版 |
2020/11/02(月) 08:54:07.90ID:kZXAdCJzM
>>477
何も考えずにpublic string HogeHoge{get;set;}しか書いてない
0479デフォルトの名無しさん (アウアウエー Sae3-vExa)
垢版 |
2020/11/02(月) 12:37:17.75ID:NZsZuJ1ia
>>476
何を悩んでるのか分からない。

同じ機能なら簡潔に書けるほうがいいに決まってるので
自動実装プロパティーで必要な機能が過不足なく実現できるなら
自動実装プロパティーを使わない理由はないんじゃないの?

別にpublicやinternalなメンバーにクラス内からアクセスしてはいけないなんて変なルールはないよw
0480デフォルトの名無しさん (アウアウクー MM45-S7XH)
垢版 |
2020/11/02(月) 12:39:05.37ID:kZXAdCJzM
>>479
そのそんなルールはないよというのが聞きたかった。
ありがとう。
0482デフォルトの名無しさん (ワッチョイ a95f-pubH)
垢版 |
2020/11/02(月) 17:57:45.09ID:9N3uvmex0
どんどん言語がアップデートされていってるからなあ
0487デフォルトの名無しさん (オッペケ Src5-3TaV)
垢版 |
2020/11/02(月) 22:06:56.80ID:8/l8UOwbr
ガチの素人で趣味でプログラミングを始めました
フォントファミリー名を取得してフォントファミリー名一覧コンボボックスを作成、そのあとコンボボックスで選んだフォントファミリーの名前で横においてるテキストブロックのフォントを変えるプログラムを作ってるんですけど、選択したコンボボックスからフォントファミリー名の取得はできてると思うんですがテキストブロックのフォントが変わりません
どうすればうまくいきますか?
0489デフォルトの名無しさん (オッペケ Src5-3TaV)
垢版 |
2020/11/02(月) 22:31:57.70ID:8/l8UOwbr
もしかしてフォントファミリーは文字型変数じゃ指定できないの?
0491デフォルトの名無しさん (アウアウエー Sae3-vExa)
垢版 |
2020/11/02(月) 22:54:08.63ID:NZsZuJ1ia
>>487
適当にやってみた
public Form1()
{
  InitializeComponent();

  cboFont.DropDownStyle = ComboBoxStyle.DropDownList;
  cboFont.DisplayMember = "Name";
  cboFont.Items.AddRange(FontFamily.Families);
  cboFont.SelectedIndex = 0;

  cboSize.DropDownStyle = ComboBoxStyle.DropDownList;
  for (int i = 6; i < 81; i++) cboSize.Items.Add(i);
  cboSize.SelectedIndex = 0;

  EventHandler eh = (sender, e) => textBox1.Font = TextFont;
  Load += eh;
  cboFont.SelectedIndexChanged += eh;
  cboSize.SelectedIndexChanged += eh;
}
0493デフォルトの名無しさん (オッペケ Src5-3TaV)
垢版 |
2020/11/02(月) 23:36:41.20ID:8/l8UOwbr
ありがとうございます
今日はもう遅いので明日やってみます
0498デフォルトの名無しさん (ワッチョイ 515f-j5Tt)
垢版 |
2020/11/04(水) 13:54:59.77ID:MUmomvCg0
GUIはXAMLが基本です
0502デフォルトの名無しさん (アウアウエー Sada-SD8k)
垢版 |
2020/11/07(土) 12:59:34.40ID:t7w6OMp4a
>>500
応答なしと表示されても問題ありません。ボタンを押した後、プログラムの一部区間だけユーザーの操作を無効化したいです。
理由は、ダイアログボックスが表示されてからSendKeysで文字を入力する際に、他の操作によりプログラムが正常動作しない時があるためです。SendKeysしか方法がなかったのでそうしています。
0507デフォルトの名無しさん (ワッチョイ 9224-DjYi)
垢版 |
2020/11/09(月) 13:06:44.87ID:YQs0Gheb0
.NetCore3.1のWPFアプリってエントリポイント変えられないの?
WPFのエントリポイント変更でググるとApp.xamlのビルドアクションを「アプリケーション定義」から「ページ」に変更してMainメソッド作ればいいって書かれてるけど
.NET Coreだとまずそのビルドアクションを変えられない
0511デフォルトの名無しさん (ワッチョイ b19b-t1Nk)
垢版 |
2020/11/10(火) 14:36:59.32ID:gS6kMlPu0
.NET5でVisual Studioはどう変わるの?
我々はこれまで通り「プロジェクトのプロパティ」から「対象のフレームワーク」で3.5を選んどけばいいんでしょ?
0514デフォルトの名無しさん (ワッチョイ 1261-4vwL)
垢版 |
2020/11/10(火) 21:54:25.94ID:whduyV8l0
4.0だろ当然
0515デフォルトの名無しさん (ラクッペペ MM96-0qd5)
垢版 |
2020/11/10(火) 22:16:39.16ID:HXXQLae8M
4.0はサポートされていないの?
3.5のほうがいいわけ?
0518デフォルトの名無しさん (ワッチョイ d55f-tE7G)
垢版 |
2020/11/11(水) 01:37:56.99ID:foWqNnZI0
>>511
我々は先(.NET 5)に行く、君は3.5を頼む!
0525デフォルトの名無しさん (ワントンキン MMab-SRQc)
垢版 |
2020/11/11(水) 10:44:10.46ID:QZePbwpJM
できるわけないでしょ
WebFormsとWCF廃止の時点で半数くらいのアプリは事実上移行不可能
そうでなくても変なサードのライブラリ使ってたりして移行できないケースも多いだろうね
0527デフォルトの名無しさん (ワッチョイ 2324-PC2A)
垢版 |
2020/11/11(水) 19:44:06.91ID:96Q/I0na0
あれ、.NET5ってWindowsアプリからコンソールアプリに変更できないの?
プロジェクトプロパティから出力の種類をコンソールアプリに変えてもコンソール出てこないんだが
プロパティ開きなおすとWindowsアプリに戻ってるし
0534デフォルトの名無しさん (ワッチョイ cbda-sZPU)
垢版 |
2020/11/12(木) 05:54:42.02ID:6+k25fjF0
WinUIとMAUIの区別が曖昧にしか認識できてないんですが、
具体的な違いを説明してくれてる情報源があれば教えてください。
0536デフォルトの名無しさん (ワイーワ2 FF93-NSHw)
垢版 |
2020/11/12(木) 12:00:28.21ID:f5BAQJxFF
>>533
めっちゃ判ります
画面キャプチャしてpdfに製本するアプリ造ったら捗った
0537デフォルトの名無しさん (ワッチョイ dd9b-Y0tO)
垢版 |
2020/11/12(木) 14:31:20.02ID:s2LM5erN0
C#で小数点の倍精度演算をするには自分で作るしか無いの?

整数はBigIntegerで出来るのに
0539デフォルトの名無しさん (ワッチョイ dd9b-Y0tO)
垢版 |
2020/11/12(木) 15:01:22.45ID:s2LM5erN0
倍精度じゃ無くて多倍長だった
めんご
0540デフォルトの名無しさん (ワイーワ2 FF93-NSHw)
垢版 |
2020/11/12(木) 15:16:14.73ID:f5BAQJxFF
BigInteger
0543デフォルトの名無しさん (ワッチョイ dd9b-Y0tO)
垢版 |
2020/11/12(木) 17:45:20.41ID:s2LM5erN0
>>542
Math.Gmp.Native.NET
有効桁数20桁じゃん

メモリが許す限りの桁数の小数点数を扱いたいときはどうするの?
0549デフォルトの名無しさん (アウアウエー Sa13-PW4O)
垢版 |
2020/11/12(木) 19:52:59.46ID:OqW4/kLba
ググってみたらdoubleの仮数部は52ビットらしけど、52ビットの分解能じゃ
不足する分野って何なんだろうねw

地球の赤道に1ミクロン単位で目盛りを振っても余裕でおつりがくる分解能みたいだけど
0552デフォルトの名無しさん (ワッチョイ 4b63-RL7t)
垢版 |
2020/11/12(木) 21:28:06.03ID:+Hg40DyF0
めんどくさいから整数で演算して結果の小数点を動かすわ
ってかみんなそうやってやんないの?
そりゃ高パフォーマンスで多倍長浮動小数扱えるならそれが一番だろうけど
0556デフォルトの名無しさん (ワッチョイ 4bbb-6GPh)
垢版 |
2020/11/12(木) 21:59:49.04ID:4tCV4GAu0
すまんが、↓こう言う時の「=>」ってどう言う意味なの?
string asdf => $"jkl";

この画面の11行目でそんな感じのが出てきたんだけど・・・・
https://youtu.be/wTmZCu16LNU?t=1094
0560デフォルトの名無しさん (ワッチョイ 459b-Y0tO)
垢版 |
2020/11/13(金) 11:17:32.36ID:d7Iu7DLU0
>>559
単なる道楽なんだけどね

昔の放送大学でUBASICを使った自然対数の底と円周率の演算をやってたから
同じことをC#でやろうと思ったけどIEEE754の倍精度実数では桁が足りなかった

BigIntegerがあるならBigFloatも欲しかったなと
0561デフォルトの名無しさん (ワッチョイ 159b-NSHw)
垢版 |
2020/11/13(金) 11:21:41.58ID:RWm0omqa0
放送大学アーカイブズ
懐かしの名講義
再放送中毒
0565デフォルトの名無しさん (ワッチョイ 159b-NSHw)
垢版 |
2020/11/13(金) 14:18:25.76ID:RWm0omqa0
「作るしかない」
の方が最近の新しい人は逃げる傾向にあるからな
0566デフォルトの名無しさん (スップ Sd43-RL7t)
垢版 |
2020/11/13(金) 15:13:21.55ID:od/5f45td
作るしか無いってことはほぼ世の中にはそんなものは求められていないってこと
そんなものを要求するのは根本が間違ってるか何でも周りに頼り過ぎか
真に有益なものならむしろ作って公開すりゃ良い実績になる
0567デフォルトの名無しさん (スッップ Sd43-QgmP)
垢版 |
2020/11/13(金) 15:22:11.67ID:WOWtwvuFd
>>566
なんかそれがもうずれてんだよね。
「作るしかないの?いいのないの?」って聞かれてるんだから
「ないよ。作るしかないよ」って答えればいいのに。
世の中で求められてないとか質問に関係なくない?
有益云々も今ないから作ったら公開してくれって言えば利益にもなんのに。
残念
0569デフォルトの名無しさん (スップ Sd43-RL7t)
垢版 |
2020/11/13(金) 15:29:35.13ID:od/5f45td
>>567
質問への回答じゃないのにズレてるとかいうレスがそもそもズレてるって思わないの?
というか悪魔の証明はできないんだから無いよ、なんて軽々しく言えないという前提がわかってる?
ついでに誰にも求められていないものを公開して利益になるロジックを教えて
0570デフォルトの名無しさん (ワッチョイ 4bbb-6GPh)
垢版 |
2020/11/13(金) 16:12:04.51ID:/kJTTxU10
>>557
>>558
ありがとう!
記号系はググりづらくて、本当助かったぜ!
0571デフォルトの名無しさん (スッップ Sd43-QgmP)
垢版 |
2020/11/13(金) 16:31:13.21ID:WOWtwvuFd
>>569
そうなの。質問への回答じゃないの。

悪魔の証明とかかたっ苦しく考えなくていいのに。
知らないなら知らないで、「俺はしらんなぁ、作るしかないんじゃない?」で答えるか黙ってればいいじゃない。知ってる人がいれば答えればいいし。

>ついでに誰にも求められていないものを公開して利益になるロジックを教えて
これは
>真に有益なものならむしろ作って公開すりゃ良い実績になる
ここからね。
ないものができるんだから利益でしょ。使う使わないは人それぞれ。少なくとも質問者には必要なんだから。

なんかすまんね
0572デフォルトの名無しさん (ワッチョイ 257c-89Yn)
垢版 |
2020/11/13(金) 16:42:13.42ID:907SkV9V0
>>564
欲しいものの要件をハッキリ言わないからだよ
>>539で多倍長って言いながら、>>543では小数って言ってる
小数求めてるのに>>560ではBigFloat求めてる
Bigは大数の接頭辞
自分で欲しいものを理解してないのに人に探してもらうことは難しいよ
0573デフォルトの名無しさん (ワッチョイ 257c-89Yn)
垢版 |
2020/11/13(金) 16:47:50.11ID:907SkV9V0
精度の高い計算をするためのツールがUBASICなわけ
あえてそれを使わずにC#でやるのは本人の自由だけど、
要件をハッキリさせずにいながら出てきた案はダメ出し
そりゃ顰蹙も買うさ
0574デフォルトの名無しさん (スップ Sd43-RL7t)
垢版 |
2020/11/13(金) 17:05:08.44ID:od/5f45td
>>571
だから答えようがないから質問を見た感想を述べているだけなんでしょ?
それをなんで、その回答はズレている!なんて突っ込むの?

質問者が求めてるなら
誰にも求められていない
に該当しないじゃんw
質問者は世の中含まれていないの?
0575デフォルトの名無しさん (ワンミングク MMa3-Y0tO)
垢版 |
2020/11/13(金) 17:39:01.74ID:j87fJt3YM
>>572
多倍長と小数は相反する概念じゃ無いぞ
BigFloatも普通にJuliaとかである型だし

このスレ理系がいなさすぎだろ

多倍長浮動小数点演算求められてんのに
「そんなものは誰にも必要じゃ無いから存在しない!自分で作れ!」とか

普通にGMPとかあるし普通はそれを奨める
0576デフォルトの名無しさん (スッップ Sd43-QgmP)
垢版 |
2020/11/13(金) 17:41:05.56ID:WOWtwvuFd
>>574
前半はこっちがはやとちったね。ごめんね。

後半はなんか文脈から言葉遊び以上の君が言ってること理解できないから俺の頭がおかしいんだな。
君が正しいよ。


>>572
>要件をハッキリさせずにいながら出てきた案はダメ出し
>そりゃ顰蹙も買うさ
そりゃそうだな。すまんね
0577デフォルトの名無しさん (ワッチョイ 237b-E7wB)
垢版 |
2020/11/13(金) 18:28:33.10ID:qE0lneeB0
ワッチョイ dd9b-Y0tO ワッチョイ 459b-Y0tO ワンミングク MMa3-Y0tO 質問の仕方も使う言葉も不正確で調べた回答者にダメ出しの上にワッチョイコロコロ
NGでいいよ
0578デフォルトの名無しさん (ラクッペペ MM4b-sA6t)
垢版 |
2020/11/13(金) 18:33:46.11ID:lrdHTx5AM
BigFloatって 10÷3 するとメモリ喰らい尽くしてくれるの?
0581デフォルトの名無しさん (スップ Sd43-RL7t)
垢版 |
2020/11/13(金) 18:46:10.29ID:od/5f45td
え?普通にgmp勧めてそれじゃ精度が足りん!ってなったんじゃないの?
中身の詳細までわからんが…
C++に有効桁数100桁の演算とかあるみたいだけど要求はメモリたくさん使うレベルなんだから兆オーダーレベルの桁数なんでしょ?
0583デフォルトの名無しさん (ワッチョイ 0566-RL7t)
垢版 |
2020/11/13(金) 18:59:56.02ID:WXkqFeV00
やろうとしたこと無いから知らんのだけど例えば円周率を何兆も計算するのあると思うけど、そういう演算ってその桁数の小数点演算必要になるの?
普通にdouble程度で十分だと勝手に思ってたけど
0585デフォルトの名無しさん (ワッチョイ 4d33-Y0tO)
垢版 |
2020/11/13(金) 22:07:03.28ID:KPuGe7Gc0
>>583
整数演算だけで出来るぞ
というかすべての小数点演算は整数演算の組み合わせで出来る

>>581
GMPのデフォルト精度は64ビットだから20桁くらいしかいけない
precに大きなビット数設定してやれば何万桁でもいける
0593デフォルトの名無しさん (アウアウクー MM41-2xue)
垢版 |
2020/11/15(日) 09:55:21.46ID:zLhs1absM
業務アプリで1/3することってあるよ
0597デフォルトの名無しさん (ブーイモ MM6b-eZDb)
垢版 |
2020/11/15(日) 12:58:30.49ID:TbjZIaKaM
分数型を作るのは面白そうやん。約分や通分の機能を持たせておけば素敵。てかMS考えてくれ。
0598デフォルトの名無しさん (アウアウイー Sa41-5TVo)
垢版 |
2020/11/15(日) 13:20:31.23ID:ttHD4odoa
>>594
ファイル読み書きやネットワークアクセスが一切なくて100%CPUパワーを使うだけのプログラムなら差が出るかもしれないけど
そうでなければ処理時間の差などI/Oにかかる時間に比べればごくわずかで塵にも等しい
ので気にするだけ無駄

というかCPUパワーを極限まで使い倒すなら、C#でマルチコア並列実行できるよう処理を書いたほうが
C/C++のシングルスレッド処理よりよっぽど早いかもしれない
よほど低性能なマシンで実行するならともかく、今どきの環境なら全部C#で書くほうが無難だと思うけどね
0600デフォルトの名無しさん (ワッチョイ a37c-WW/G)
垢版 |
2020/11/15(日) 16:21:09.71ID:d0/9SCdg0
>>594
どうしてもC++のライブラリをC#で使いたいとかじゃないかぎり
そのマーシャリングの処理が何気に重い気がするので
関数を何度も呼び出すみたいな使い方するなら
ベンチマーク取ってみるとC#のみの方が速いかも知れないぐらいの差じゃないかな
0601デフォルトの名無しさん (ワッチョイ 2324-PC2A)
垢版 |
2020/11/15(日) 16:38:42.28ID:alkL58xG0
>>600
マーシャリングが重いって言うと例えば
extern IntPtr GetProcAddress(IntPtr hModule, [MarshalAs(UnmanagedType.LPStr)] string procName);
とする場合、のprocNameをAnsiに変換するときってヒープ使われるの?
ヒープ使われるんだとしたら自前でstackallocしてbyte*として渡そうと思うけど
0603デフォルトの名無しさん (ワイーワ2 FF93-NSHw)
垢版 |
2020/11/16(月) 10:53:58.92ID:sF1WJXNTF
GCは何時発動するか判らんのが欠点だけど
C#のGCはタイミングは常に判ってるのかな
0604デフォルトの名無しさん (ワッチョイ 7501-mYn1)
垢版 |
2020/11/16(月) 11:05:41.67ID:qYJ3Dm/90
タイミングがわかるわけじゃないけど引き起こす可能性のある手続きはわかっている
コーディングでそれを避けられる余地があるからUnityとかでまだ採用されてるんじゃない?
0607デフォルトの名無しさん (オッペケ Src1-RsxR)
垢版 |
2020/11/16(月) 12:05:22.31ID:g+EUxdXIr
GC連打しまくればいいよ
0609デフォルトの名無しさん (ワイーワ2 FF93-NSHw)
垢版 |
2020/11/16(月) 13:24:47.04ID:sF1WJXNTF
生き残りは強毒化するのか
0612デフォルトの名無しさん (ワッチョイ 2324-5Hij)
垢版 |
2020/11/16(月) 15:48:59.14ID:eppT6X190
むしろVC++に絶対的なGUI決定版が出たら個人開発のデスクトップアプリでC#使う事なくなるだろうな
個人開発程度の規模だとマクロのあるC++の方が返って開発速度早くなることも多いし
0613デフォルトの名無しさん (ワッチョイ d55f-g/iO)
垢版 |
2020/11/16(月) 17:13:00.16ID:VrPIfzyD0
GCSettings.LatencyModeで選べるよ
0614デフォルトの名無しさん (ワッチョイ ed5f-Y0tO)
垢版 |
2020/11/16(月) 18:58:34.38ID:ZSbSJvSB0
フォーム上に設置したボタンを表示したいのですが、
フォームだけ非表示もしくは透過0%にする方法を教えてください
フォームのopacityいじるとボタンも非表示になってしまいます
0620デフォルトの名無しさん (アウアウエー Sa13-RMlb)
垢版 |
2020/11/17(火) 01:43:59.23ID:lN0UCm9Ya
ファイルの日付時刻を比較したいんですがどうしたら良いですか?
0623デフォルトの名無しさん (アウアウエー Sa13-PW4O)
垢版 |
2020/11/17(火) 13:16:45.53ID:GB1Hm8K4a
>>614
WPFなら普通にできたはずだけどFormでは簡単にはいかないと思うよ。
不完全だけど一番簡単にそれっぽいのを作る方法はButtonを乗せるためだけの別のform2を作って
form1をそれの親にすること。

public Form1()
{
  InitializeComponent();
  var loc = new Point(100, 100);
  var form2 = new Form2();
  Action a = () => form2.Location = PointToScreen(loc);
  form2.Show(this);
  Load += (s, e) => a();
  Move += (s, e) => a();
}
0624デフォルトの名無しさん (ワッチョイ cd9b-Y0tO)
垢版 |
2020/11/17(火) 15:43:12.61ID:WBCoLdBR0
WPFで作る利点ってのはクロスプラットフォームに出来るってこと?
Formしか作ったことないんやけど
0626デフォルトの名無しさん (ワッチョイ d55f-g/iO)
垢版 |
2020/11/17(火) 16:58:38.50ID:RncVdZGd0
利点というか世界的に見たらWPFのほうが主流だから
むしろ今なぜFormなのかという感じだな
0634デフォルトの名無しさん (ワッチョイ 4ba7-1Ypv)
垢版 |
2020/11/17(火) 19:34:04.55ID:cGx3KuHJ0
>>632
全くその通りで結局開発が進んで行くうちに帯に短し襷に長しみたいな中途半端力凄い

>>633
そういうのは絶対Webアプリのが使い勝手いいんだよなぁ
ログインしたらどこでもどのPCでも同じって強過ぎるよね
0635デフォルトの名無しさん (ワッチョイ 4ba7-1Ypv)
垢版 |
2020/11/17(火) 19:37:52.56ID:cGx3KuHJ0
あと何気に困ったのが音
後ろで音楽かけてボタンとか押したら音鳴らしてってのが
わりかしできんかったっていうかなんかあやしいライブラリ使う羽目になったっていうか
まあ、色々動く画面作りたいときはいっそunity考えた方がいいと思う
0642デフォルトの名無しさん (ワッチョイ 0d42-WW/G)
垢版 |
2020/11/17(火) 22:28:01.75ID:Rs8mNRLj0
そして来年からはWinUIというWPF紛いのものが登場する、と
Win10ぽいルックスとx:Bindでコンパイル時にバインドエラー発見ってのはかなり大きい
そのうちAOTコンパイルもサポートされるそうだ
0647デフォルトの名無しさん (ワッチョイ a790-xKON)
垢版 |
2020/11/18(水) 00:03:39.25ID:MO86P+zt0
maui期待しないほうがいい
ただの名前変更レベルの予感
Microsoftはなぜxamarinが失敗したか総括したのか?
表面上何もかわってないように見える

技術的にはSlimRenderアーキテクチャだかようしらんが
0648デフォルトの名無しさん (オッペケ Srdf-sWCu)
垢版 |
2020/11/18(水) 15:05:11.31ID:7Ekft4aVr
VScodeで成功してるんだがElectronでいいじゃん
Electron.Netを正式サポートしろよ
0650デフォルトの名無しさん (ワッチョイ cf5f-MoyO)
垢版 |
2020/11/18(水) 15:39:37.23ID:P3jn+KK20
Electronは失敗だよな
VSCodeだけだし
0651デフォルトの名無しさん (ワッチョイ 5701-n9sk)
垢版 |
2020/11/18(水) 15:46:24.24ID:UaAov2o20
>>76
C#というのは前身がDelphiという言語なんだ
そのDelphiはVBとの死闘の末敗れてしまった

だからC#(Delphi残党)がVBを憎んでいるのは当然なんだ

ガンダムで例えるとC#はネオジオンでVBは連邦軍なんだよ
0654デフォルトの名無しさん (ワッチョイ eff1-ZOa4)
垢版 |
2020/11/18(水) 16:11:46.00ID:YM9VgCd+0
>>637
わたしは中国人あるよ
0660デフォルトの名無しさん (ワッチョイ e224-08mV)
垢版 |
2020/11/19(木) 10:08:06.32ID:fvT6uEqW0
StringBuilderのパフォーマンス目的で使う割には最終的なToString()で再Allocが発生するという矛盾に嫌気がさして
アンセーフなstringラッパー作って
public Length => { fixed (char* p = str) *(int*)(p - 2) = value; }みたいなことしてマニュアルで長さ変えたりしてるんだけど、こういうことしてるとGCに影響あったりする?
初期バッファとしてstr = new string('\0', 0x1000);として0x1000文字分のメモリを頂戴したのに、上記の動作で長さを5に変えたりしてると、GCによる解放時に5文字分しか解放されずに残りがリークするって事にはならないんだろうか?
0661デフォルトの名無しさん (ワッチョイ 367c-yvYW)
垢版 |
2020/11/19(木) 11:07:34.05ID:xT43LVbE0
> StringBuilderのパフォーマンス目的で使う割には最終的なToString()で再Allocが発生するという矛盾
そもそもそこは別に矛盾じゃないだろ
「結合のたびにアロケーションが発生する」のを防ぐもんなんだから
0663デフォルトの名無しさん (ワッチョイ e224-08mV)
垢版 |
2020/11/19(木) 11:31:10.28ID:fvT6uEqW0
>>662
良く知らないけどそれもその都度string生成してるんじゃないの?
スレッドアンセーフで良いから生成は初回かキャパ更新程度に留めて使いまわしたいんだよね
そのキャパ更新の際に捨てるときにstring.Lengthを弄ってるとメモリリークの原因になるのではないかと
0665デフォルトの名無しさん (ワッチョイ 4240-b6az)
垢版 |
2020/11/19(木) 13:58:51.49ID:5X7qze6C0
NameValueCollectionをコピペすると自動整形がうまくいかなくてかっこの位置がおかしくなるので
各行ごとにDelete→Enter→Endを繰り返して手動で整形しなおしてるのですが、ちゃんと整形してくれる方法ってあるんですか?
↓みたいになったりする。

   NameValueCollection vals = new NameValueCollection
   {
{ "hoge","hage"},
{ "fuge","hage"},
   };
0667デフォルトの名無しさん (ワントンキン MM92-rnDP)
垢版 |
2020/11/19(木) 15:26:56.05ID:3nmF1AP8M
>>660
いやそもそもStringBuilder.ToString()は再アロケーションしないぞ
内部のバッファをそのまま引き継ぐ実装だ
その後StringBuilderの方に追加の変更が加えられた時点で再アロケーションが発生する
0668デフォルトの名無しさん (ワッチョイ 4240-b6az)
垢版 |
2020/11/19(木) 15:52:44.75ID:5X7qze6C0
>>666
1行というのはこういうことですか?
NameValueCollection vals = new NameValueCollection{{ "hoge","hage"},{ "fuge","hage"},};

実際には{ "hoge","hage"},が50行とかあったりするので↑では視認性やエラーチェックが面倒になります。
0669デフォルトの名無しさん (ワッチョイ 0614-Cu+U)
垢版 |
2020/11/19(木) 16:13:28.80ID:XTntku/z0
>>667
StringBuilderはchar[]であってstringではない
たとえStringBuilderのCapacityがLengthと丁度良く=であったとしてもToStringで別途string用にアロケーションされる
StringBuilderはLengthを自由に変更出来て任意のインデックスからappendできるので、内部バッファがそのまま返されるようならstringは不変という法則が簡単に崩れ去れることになり>>660がやってるunsafeと何ら変わらなくなる
0670デフォルトの名無しさん (ワッチョイ c766-G3Z5)
垢版 |
2020/11/19(木) 16:33:47.05ID:wGypJVfq0
>>668
そういう長いものに自動整形を期待しない
そういう長いものを人間が視認する必要性を排除する
この手の自動整形をしようとすると負荷が半端ないことになって実用性に欠けるのですっぱり切っているのだと思う
0671デフォルトの名無しさん (アウアウエー Sa3a-VuZ6)
垢版 |
2020/11/19(木) 16:48:49.64ID:k15rqtpOa
>>669
そんな馬鹿な実装するはずがないと思うよw
そもそもイミュータブルとは状態を変更する方法を外部に提供しない、という意味以上でも以下でもない。
そこのところを勘違いしている気がする
0674デフォルトの名無しさん (アウアウエー Sa3a-VuZ6)
垢版 |
2020/11/19(木) 17:26:57.34ID:k15rqtpOa
.NETのStringが機械語レベルでどう実装されてるか勉強したことはないが、
普通に考えればパスカルストリングとCストリングのあいの子みたいな単純な構造でしょたぶん。

ごにょごにょした後のバイト列を普通にstringと「みなす」だけにするよね。
わざわざ別のメモリ確保してベタコピーする馬鹿な実装をする人がいるだろうか。
その必要性ができてからで遅くないと思うんだけど。
0675デフォルトの名無しさん (ワッチョイ e224-08mV)
垢版 |
2020/11/19(木) 18:08:19.31ID:fvT6uEqW0
>>674
C#のstringはBStrというoffset0にlength、offset4からcharの配列、そのoffset4へのポインタがstringとなる
末尾がnull文字じゃなくても問題ないが基本は末尾にnull文字が入ってるためconst wchar_t*としても扱える

そんなことはどうでもよくてマネージド内で上記の内部バイナリを書き換える方法は一切無いからわざわざアンセーフstringラッパーを作ったんだよ
一見書き換えられてるように見えるstring操作は全て新stringとして生成されてるだけだからな
+連結は長さが変わるから想像できるだろうけど、Substringすらも切り取り参照をしている訳ではなく新たにstringを生成してる(それを解決しうるマネージドな手段としてReadOnlySpanというのも一応あるが)
0676デフォルトの名無しさん (ワッチョイ cf5f-MoyO)
垢版 |
2020/11/19(木) 19:50:48.14ID:nKYhLbF50
細かいことを気にしてまでC#を使う矛盾をどう解決してるのか気になるわ
0678デフォルトの名無しさん (ワッチョイ cf5f-MoyO)
垢版 |
2020/11/19(木) 21:03:40.41ID:nKYhLbF50
StringBuilderを使えというのは学ぶでしょ
そこまででいい
それ以上やるならもうC#使う意味ない
0680デフォルトの名無しさん (ワッチョイ e26a-Am47)
垢版 |
2020/11/19(木) 21:28:29.15ID:A4wcMVuA0
>>662 が挙げてたZStringの解説記事
個人的にはそこまでパフォーマンス気にするような物作ってないから「へー」って感じで読んだだけだけど

ZString – Unity/.NET CoreにおけるゼロアロケーションのC#文字列生成
ttps://tech.cygames.co.jp/archives/3383/
0681デフォルトの名無しさん (スップ Sd02-G3Z5)
垢版 |
2020/11/19(木) 21:32:12.66ID:s0VdR5fOd
国内C#erで有名どころだしstringはパフォーマンス絡みでよく上がるから割と有名な方じゃないかな?
あんなにパフォーマンス気にする人が知らないのには驚きだけどw
0685デフォルトの名無しさん (ワッチョイ 5f01-i8bA)
垢版 |
2020/11/21(土) 08:27:18.63ID:WoKZFdST0
手段が目的と化している人達にそんなこと聞いても無駄だよ
0688デフォルトの名無しさん (アウアウエー Sa3a-VuZ6)
垢版 |
2020/11/21(土) 13:04:44.65ID:Ny+zGkjNa
まあちょっと前の数値演算の話と同じだよ。

純粋な学問として円周率の桁数を追求することを否定する人はいないけど、
実用上必要ないのにそれを追求するのはただの馬鹿なフェティシズム
0689デフォルトの名無しさん (ワッチョイ e77b-3Yk1)
垢版 |
2020/11/21(土) 13:16:59.22ID:QfF2kXL70
こだわっている当人が>>662を提案されているのに
>良く知らないけどそれもその都度string生成してるんじゃないの
って見もせずに切り捨てているのがわけわからない。自分の作ったunsafeメソッド誉めてほしかったの?
0693デフォルトの名無しさん (ワッチョイ e224-08mV)
垢版 |
2020/11/21(土) 19:15:26.59ID:pEQG3awY0
>>689
ライブラリ教えてなんてレスは一度もしてないし主題とは違う返信に対して検索や外部リンクまでチェックする義務が発生する理屈の方が訳わからない
提案してくれた>>662には感謝するけど、あくまで自分の質問は660のレス内容
C#の質問をしたつもりだけど言語の質問とは違うということであればスレチと言われても仕方ないが
0694デフォルトの名無しさん (ワッチョイ e201-MoyO)
垢版 |
2020/11/21(土) 20:16:31.79ID:WQW9Bpg70
>>668
編集してるXXX.csファイルを読み込んで
NameValueCollection vals = new NameValueCollection行の次の
{行からそのあとの};行の間の行に先頭スペースを揃えて挿入して
ファイルを上書き保存するミニアプリを作って実行すればいい
テキストの平文ファイルだから編集は簡単

VSで編集中にそのような外部エディタで編集がされると
編集を反映しますかって即座に聞いてくるからはいすれば位置がそろう
0696デフォルトの名無しさん (ワッチョイ ab1a-7G0V)
垢版 |
2020/11/22(日) 02:05:01.90ID:eyJ/0uPg0
>>693
@マジレスするとメモリリークはしない。こんなのはGC.Collectしてメモリ使用量を見比べるだけで分かる
Aでも>>660の使い方ではインターンプールで潜在的なバグを抱えるからやめた方が良い
Bやりたいこと汲み取るなら先人が同じ悩みから到達したソースを使うべき
CZStringいいよ

余計な遠回りをしないようにこの結論から言ってくれてるんだよ
>>662は優しい奴だよ、まったく
0699デフォルトの名無しさん (ワッチョイ e224-08mV)
垢版 |
2020/11/22(日) 08:48:28.54ID:VTf/cbNB0
>>696
マジレスすると今のところはヘッダオンリーならぬ単ソースオンリーで済ませたいのであんまり外部ライブラリには乗り気じゃないというのもあるが
とは言えZStringを拝見したところu8stringをC#で実装出来てる凄いライブラリであるようなのでtext系ファイルやらwebやらdbのクエリやらで利用したい構想立ちまくったのでありがたくスターポチって記憶させていただく

確かにただのバッファとして作ったものの実態はstringに違いないので何かの拍子にstring.Internしてしまうと結構不味いことになるね
とりあえずGCに影響ないと教えてくれて大分スッキリしたのでありがとう
0704デフォルトの名無しさん (ワッチョイ 9f07-78y3)
垢版 |
2020/11/28(土) 16:25:59.35ID:Msb6oswN0
c# プログラマは goto でコロナを拡散してるから、ウィルス作成罪とかで刑務所にぶちこむべき。

もちろん、実質的に goto と同じ if文 、swich case とか使ってるc# プログラマも有罪。

swift や Pythonプログラマは goto 使ってないから無罪。
0706デフォルトの名無しさん (ブーイモ MMdb-bcw7)
垢版 |
2020/11/28(土) 17:18:49.30ID:qYAW4hVUM
705は死刑
0708デフォルトの名無しさん (ブーイモ MMdb-bcw7)
垢版 |
2020/11/28(土) 17:57:32.34ID:qYAW4hVUM
>>707
このハゲェ!
0709デフォルトの名無しさん (ワッチョイ d776-OOND)
垢版 |
2020/11/28(土) 18:38:36.41ID:pMGwV9fR0
Windowsの ini ファイルの内容を Section, Key, Value の順で
List<Dictionary<string, List<Dictionary<string, string>>>> ini;
ini = new List<Dictionary<string, List<Dictionary<string, string>>>>();
として取り込んだものから Section の一覧(Delphi の ReadSections 相当)を
得たいのですが方法がわかりません。
教えていただけませんでしょうか。
0712デフォルトの名無しさん (ワッチョイ d776-OOND)
垢版 |
2020/11/28(土) 19:14:35.24ID:pMGwV9fR0
>>710
説明が下手ですいません。
セクション名の一覧が下記のような考え方で取得できないかと考えていました。
public void ReadSections(ref string[] sections)
{
Array.Resize(ref sections, ini.Count);
var i = 0;
foreach (var dic1 in ini)
{
sections[i] = セクション名
i++;
}
}

書き込んだ後、下記のようにしたら希望の動作をしました。
public void ReadSections(ref string[] sections)
{
Array.Resize(ref sections, ini.Count);
var i = 0;
foreach (var dic1 in ini)
{
dic1.Keys.CopyTo(sections, i);
i++;
}
}
0713デフォルトの名無しさん (ワッチョイ 1745-C0hB)
垢版 |
2020/11/28(土) 19:41:10.86ID:7NcH7NyO0
>>709
自分もList使う意味が見いだせない
var ini = Dictionary<string, Dictionary<string, string>>とかで良いんじゃないの?
これならvar value = ini["セクション名"]["キー名"]で取り出せる
if (ini.TryGetValue("セクション名", out var keys) && keys.TryGetValue("キー名", out var value)) とやったほうが良いと思うが
代入はini["セクション名"]["キー名"] = value;
0715デフォルトの名無しさん (ワッチョイ d776-OOND)
垢版 |
2020/11/28(土) 20:33:03.95ID:pMGwV9fR0
>>713,714
.NET 5 が出たのを機に c# を始めたところなのでよくわかっていません。
勉強がてら自作の Delphi7(Lazarus) の自作ライブラリと同じ物の作成に挑戦中です。
ini ファイルの読み込みもネットからダウンロードしたものをベースに
改造して動きを勉強しているところです。
ですので List になっている理由もまだ理解できていませんし、Dictionary も
今日初めて見た状態です。一応 List を外してみると
foreach (var dic1 in ini)
{
if (dic1.ContainsKey(section))
{
foreach (var dic2 in dic1[section])
{
if (dic2.ContainsKey(key))
{
return dic2[key];
}
}
}
}
のような場面で ContainsKey がエラーとなりました。
とりあえず Delphi の TMemIniFile と同じ程度までできました。
0716デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/28(土) 21:13:18.17ID:M3lV8yHm0
>>715
Listを外してforeachする場合はこう変える必要がある
foreach (var dic1 in ini)
{
if (dic1.Key == section)
{

foreach (var dic2 in dic1.Value)
{
if (dic2.Key == key)
{
return dic2.Value;
}
}
}
}

もっと簡単な方法は>>713に書かれてる通り
if (ini.TryGetValue(section, out var keys) && keys.TryGetValue(key, out var value)) return value;
0717デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/28(土) 21:20:41.11ID:M3lV8yHm0
pascalのiniなんてもう遥か昔に使ったきりだからあんまり覚えてないがそれっぽいの作るとしたらこんな感じか
Dictionary<string, Dictionary<string, string>> ini = Dictionary<string, Dictionary<string, string>>();
string ReadString(string section, string key)
{
if (ini.TryGetValue(section, out var keys) && keys.TryGetValue(key, out var value)) return value;
else return null;
}
これだとnullチェックが必要になるから、Tryメソッドの方が便利だったりする
bool TryReadString(string section, string key, out string value)
{
value = null;
return ini.TryGetValue(section, out var keys) && keys.TryGetValue(key, out value);
}
0720デフォルトの名無しさん (ワッチョイ 5701-xdSs)
垢版 |
2020/11/29(日) 00:02:00.65ID:agHPEKHb0
string GetValue(Dictionary<string, Dictionary<string, string >> ini, string section, string key){
if(! ini.ContainsKey(section)) return null;
if(! ini[section].ContainsKey(key)) return null;
return ini[section][key];
}

c#に限った事ではないが、何をしたいのか分かりやすいコードを目指そうな。
0722デフォルトの名無しさん (ワッチョイ 1f3e-++yk)
垢版 |
2020/11/29(日) 06:31:38.45ID:kNuJF9Ar0
datagridviewにユーザーコントロールを埋め込みたいんですけどどうすればいいですか?
windowsformアプリです
ていうかdatagridviewじゃなくてもユーザーコントロールをリストで表示できれば何でもいいです
どなたか教えて下さい
0726デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 09:40:01.71ID:yrxBBFH+0
>>720
section取り出す説明は昨日一番最初のレスで書いたからもう脱線して話すけどなんでここまでTryGet使わない奴って多いんだろうな
どうせ後々インデクサアクセスするならTryGetValueの方がよっぽど分かりやすいと思うんだが
0729デフォルトの名無しさん (ワッチョイ d740-qZd/)
垢版 |
2020/11/29(日) 17:32:18.08ID:MpNpLm4W0
>>720>>726
ConstainsKey → []は、まずContainsKeyの内部でFindEntry走らせて存在確認し、存在したらインデクサアクセスして再度内部でFindEntry走らせて取り出すという2度手間してるIQ低いコード
TryGetValueは存在確認時にFindEntryしたついでに値も取り出すというスマートな関数
そもそも前者で済むならTryGetValueは存在意義ないから、上記の仕組みを想像できずとも「なんでTryGetValueってあるんだろう?」と疑問に思わなければいけない

ま、C#は多様性受け入れてる言語だから個人開発なら好きに書いたらいいが
0730デフォルトの名無しさん (ワッチョイ 771a-nc77)
垢版 |
2020/11/29(日) 18:14:07.88ID:o/YPVzQP0
そういう値をローカル変数に代入するのを無駄と言い張って勝手にワンライナーに書き直すような地雷プログラマの振りをするのはやめろよ……初心者が本気にしたらどうするんだよ
0732デフォルトの名無しさん (ワッチョイ 771a-nc77)
垢版 |
2020/11/29(日) 18:52:20.22ID:o/YPVzQP0
>>731
明確にガード節で判定が切り分けられているのに、
「TryGetValueなら判定と取得を同時に行える」と言い出すのはまさしくワンライナー君の物言いだぞ

ifをあえて二つ用意してContainsKeyを使ってる時点で
「ははーん、論理重視のコーディングスタイルか」と察してやるのが有能なプログラマってもんだ
0733デフォルトの名無しさん (ワッチョイ d740-qZd/)
垢版 |
2020/11/29(日) 18:58:47.11ID:MpNpLm4W0
>>732
???
2連続で全く不必要に同じ処理を挟むような奴がとても論理重視とは思えないんだが、ContainsKey + []とTryGetValueじゃ2倍以上パフォーマンス変わってくるって知ってる?
さっきも言ったけどContainsKeyでも内部的にFindEntryが走り、インデクサアクセスでも再度FindEntryが走るという無駄がある
再度言うがMSがなんでTryGetValueというメソッドを公式でわざわざ用意したかって疑問に思わない?
簡潔さ全振りならそもそもLinq使えばいい話
0734デフォルトの名無しさん (スフッ Sdbf-a5dV)
垢版 |
2020/11/29(日) 19:01:28.82ID:tRrXGfded
メソッドの戻り値を一回判定するだけなら
一行で書かないほうが変じゃね?
それをわざわざ一旦保存とか逆になんの意図があるのかと
たまにはデバッグやらログで出したいからと言うのはあるがそれは2回利用に当たるから入れて当然やしな
0736デフォルトの名無しさん (ワッチョイ ff63-ykbH)
垢版 |
2020/11/29(日) 20:16:26.39ID:EVjNfLc/0
判定と取得を行いたいんじゃなくて取得を行いたい
なのに判定しないとプログラム上まずいことになるので判定機能付きの取得メソッドを使う
読む上でわざわざ判定と取得を別に書いてるならそこにあえての理由があるんだろうな、と推測しないといけない
今回のケースならあえてのケースなど無いので可読性を下げる要因でしか無い
0739デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 20:31:48.44ID:yrxBBFH+0
>>736
これのどっちが可読性良いかなんて個人の感想レベルだろ
実際俺は100%下のほうで書いてるけど一度もコードレビューで指摘されたことないしな
そして>>733が言うように実行効率は下の方が2倍近く良いので下を選択すべき理由はある
一方で上を選択すべき理由は見当たらない

if(! ini.ContainsKey(section)) return null;
if(! ini[section].ContainsKey(key)) return null;
return ini[section][key];

if (!ini.TryGetValue(section, out var keys)) return null;
if (!keys.TryGetValue(key, out var value)) return null;
return value;
0740デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 20:43:57.67ID:yrxBBFH+0
一応言っておくけどここでは713や720に合わせて書いてるだけで実際には1行で書いたりこんなに複数retは使わない
returnは一つにしろというレビューは受けたことあるんでな
0743デフォルトの名無しさん (ワッチョイ ff63-ykbH)
垢版 |
2020/11/29(日) 20:56:55.50ID:EVjNfLc/0
無理に一行にするな、が通るならreturnを1つにしなくていいのでは?
数十行あるメソッドのいろんな箇所でreturnしてると気持ち悪いと思うが、こういうタイプなら複数returnで良い

可読性が個人レベルなのはそのとおり

文字の並びが似通っている、ではなくどういう機能を呼んでいるか?という意味
判定付き取得メソッドが標準で用意され、しかもメジャーな内容でパフォーマンスも良い
それでもあえてそれを呼ばないのは特殊な事情があるのでは?と読み手の思考を止めることにつながるという意味
0744デフォルトの名無しさん (ワッチョイ 771a-nc77)
垢版 |
2020/11/29(日) 21:06:40.39ID:o/YPVzQP0
>>739
上のコードを採用する理由は何の値を戻しているか即座に分かるところ、と俺は判断した

return ini[section][key];

この一文で読解に要する数秒を削る為だけに2倍程度のパフォーマンスを許容するのは普通にありだよ
0746デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 21:36:16.22ID:yrxBBFH+0
>>743
returnについては可読性に関わる納得できた理由はちゃんとあるんだが自分やチームが使わないというだけで別にうちのコーディング規約を議題に上げるつもりはない(ツッコんでくる人いそうだったから一応書いただけ)
まぁもう好きにしたらええんやない
C#メインで使っていきたいなら言語として用意されてるものは出来る限り利用すべきと思うけど
そこまで学習コスト払いたくないってことなら一つの方法を出来る限り使いまわすというのも利に適ってるしな
0747デフォルトの名無しさん (ワッチョイ ff63-ykbH)
垢版 |
2020/11/29(日) 21:49:34.68ID:EVjNfLc/0
チーム内でのローカルルールがどうなってるかはどうでも良いんですよ
そのチームで合意が取れてるならなんの問題もない
ローカルルールを隠した状態で突っ込まれてローカルルールなんです!って言われても知るかよ、という感想しか出ない

ローカルなものでないなら、基本的には標準に準拠すべきで標準がわざわざtryメソッドを回避している書き方をしていない限り公の場でもそれに準じたほうが良いのでは?というだけ
0748デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 21:53:07.17ID:yrxBBFH+0
>>747
いやだからTryGetValueに関してはそれが標準だろっていうのが一貫した俺の意見であってローカルルールなのは>>740で書いた事
実際にギブハブなんかで数多くのプロジェクト参考にしてきたけどLinqで手っ取り早く書く事は多くてもTryGetValueを使わずにContainsとインデクサとかいう非効率な方法採用してる人なんて見た記憶ないしな
0749デフォルトの名無しさん (ワッチョイ ff63-ykbH)
垢版 |
2020/11/29(日) 21:58:49.11ID:EVjNfLc/0
>>748
なんで突っかかってくるかわからんけど747の前半は複数retの話、後半はtryの話
わざわざローカルの話である複数retのことなんざ話題に上げんで良いよ、try使うのが標準なんだからそれに習ったほうがよくね、
後半は君と同意見なんだよ
0751デフォルトの名無しさん (ワッチョイ ff63-ykbH)
垢版 |
2020/11/29(日) 22:11:12.12ID:EVjNfLc/0
>>750
前提として標準に準拠したほうが良いよね、という主張がある
標準では複数retなんて当たり前に使ってる
それをなぜか否定しているので突っ込んだらローカルルールだ!と言われる
そういうローカルルールがあるのは構わんが、それならそう明記しなきゃ標準に準拠しようという主張とズレてブレブレなだけでは?
まさかレビューを受けたことがある、がうちにはそういうコーディング規約があるんです、の意味だったの?
0752デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 22:16:38.50ID:yrxBBFH+0
>>751
だから本気で否定したいなら739でもそうやって書いてるって言ってるやん
740で書いたのは「沢山return書いてる時点で可読性低い」みたいなツッコミが入るかなーと予測して"一応"と前置きして書いたと言っただろ
そこを議論するつもりはないと書いたのに異様に拘るんだな
0754デフォルトの名無しさん (ワッチョイ 771a-nc77)
垢版 |
2020/11/29(日) 22:22:55.87ID:o/YPVzQP0
>>748
正直俺も見たことないが、>>720が書いてるんだからいるところにはいるんだろ
肝心なのはそいつが何を思ってそういうスタイルにしたのか察して評価してやることで、
>>729みたいに重箱の隅突いて喜ぶのはただの地雷コーダーだからやめるべきだよ

例えば誰かが「ギブハブ」とか言ってても、わざわざ「ギブハブってなんだよバカかよ」と噛み付く必要はないだろ?
GitHubなのは分かるし話は通じてるんだからこいつの中ではこうなのかと納得して「ほーん、ギブハブがどうした?」と聞き返すのが有能なんだよ
0757デフォルトの名無しさん (アウアウイー Sacb-VDAt)
垢版 |
2020/11/29(日) 22:42:09.42ID:T9vV3uABa
なんとも不思議な世界があるんだなあ・・・・
TryGetValueを使うのが今どきの常識的なコーディングだと思ってた自分としては
老害(あるいは悪意があって不適切なコーディングを押し付けようとしてる人)が世迷言をほざいてるだけにしか見えないや
0758デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 22:53:33.81ID:yrxBBFH+0
>>754
その理屈で行くとコードレビューなんて出来なくなるな
(これ明らかに意味のない文だけど何かスピリチュアル的な深い意味があるのだろうか…?配慮して指摘すべきではないか…?)なんて一々考察しなきゃいけないのかよ
0761デフォルトの名無しさん (ワッチョイ b7e4-nc77)
垢版 |
2020/11/29(日) 23:14:22.90ID:iy3zNsHi0
>>758
レビュー受けてるような新人はそんなこと考えなくていいと思うよ
多次元辞書でアクセスそのまま返す利点が分からないならまだお勉強段階なんだから、そういうやり方もあると素直に学んでおけば良い
とりあえずチューニングはベテランがもっと後でやる仕事だから、パフォーマンスがーとか言い出すのは十年早い
0762デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/29(日) 23:30:20.42ID:yrxBBFH+0
そう主張するのであれば具体的な利点を述べろよ
TryGetValue派は俺以外にもメリット述べてる奴いるけどContainsKey派は「そのほうが見やすい」程度の個人の感想以上は出てきてない
勿論それもメリットではあるがTryGetValueの方が見やすいと言う人もいるのでそこでは差は付かない
0765デフォルトの名無しさん (ワッチョイ b7e4-nc77)
垢版 |
2020/11/30(月) 00:00:33.52ID:n5NKB6GR0
>>762
しょうがないな
こういうケースは極端化すれば明確になる

dic.TryGetValue(a, out var dic2)
dic2.TryGetValue(b, out var dic3)
dic3.TryGetValue(c, out var dic4)
dic4.TryGetValue(d, out var dic5)
dic5.TryGetValue(e, out var value)

vs

var value = dic[a][b][c][d][e]

とりあえず値の取得を比較した場合こうなる
非常に馬鹿げたコードだが後者の方が察しやすくバグりにくいのは分かるはず
これは分岐を差し込んでも同じこと
こんなコードは現実にあり得ないから無効と言い張るなら、所詮はその程度のレベルなんだから黙るべき
0766デフォルトの名無しさん (ワッチョイ d742-P4WK)
垢版 |
2020/11/30(月) 00:20:59.97ID:9x2/PpIx0
TryGetValue vs ContainsKey+[]の争いでしょ?
なら下はちゃんと一つ一つにContainsKey挟むべき
そして後者の方がバグりにくい理由が全く分からない。まず何のバグを対象としているのか明確に
0770デフォルトの名無しさん (アウアウエー Sadf-WCF9)
垢版 |
2020/11/30(月) 00:39:46.85ID:qXuQLmTVa
どうせ過疎スレだからスレ消費するのは問題ないと思うけど
あまりに下らな過ぎる論争で萎えるねw

よく読んでないので素っ頓狂なこと言ってるかもしれないけど、
iniファイルぐらいなら馬鹿正直にDictionaryをネストなんかしなくても
section+keyをキーにして平坦化しても良いような気もする
0775デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/30(月) 08:57:23.41ID:8S8hZPx60
>>770
そもそもini直接操作するならWin32APIにセクション名とキー名と無かった場合の規定値を突っ込むだけで良いからDictionaryすらも何もいらない
pascalにはMemIniみたいな基本はファイルには書き込まないクラスがあるからそれを実装しようと思ったらDictionaryがベストなんじゃない

>>774
section一覧を返す方法は一昨日の一番最初のレスでしたって昨日言ったはずだが無視してるのはお前の方だろ
0776デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/30(月) 09:04:32.51ID:8S8hZPx60
>>772
そのプロジェクト見た感じTryGetValueを一度も使ってないから恐らくJavaか何か出身で存在知らないんだろうな
ContainsKeyは割と色んな言語にあるからこっちの方が認知度高いのは間違いない
なので昨日も言ったが一々C#に学習コスト払いたくないって人もいるだろうからそういう場合は好きにしたらいい
0780デフォルトの名無しさん (ワッチョイ 771a-nc77)
垢版 |
2020/11/30(月) 10:45:42.20ID:0LXXOsdO0
>>776
お、ようやく自分の間違いを認めたか
まあContainsKeyの方が可読性高いのは当たり前なんだが

762 名前:デフォルトの名無しさん (ワッチョイ 9f24-GtYN) [sage] :2020/11/29(日) 23:30:20.42 ID:yrxBBFH+0
そう主張するのであれば具体的な利点を述べろよ
TryGetValue派は俺以外にもメリット述べてる奴いるけどContainsKey派は「そのほうが見やすい」程度の個人の感想以上は出てきてない
勿論それもメリットではあるがTryGetValueの方が見やすいと言う人もいるのでそこでは差は付かない
0781デフォルトの名無しさん (ワッチョイ 9749-R9ZN)
垢版 |
2020/11/30(月) 11:16:43.36ID:o8riI3080
>>780
可読性と認知度は全然違う意味だと思うけど、っていうのは置いといて
>>732とか>>765とかさすがに釣りでしょって思わせるレスがちらほらあるから、喧嘩両成敗はちょっと可哀想な流れ
0783デフォルトの名無しさん (アウアウカー Sa2b-u/yY)
垢版 |
2020/11/30(月) 11:58:06.51ID:UK/ABAdxa
認知度と可読性が別物か
職場で宇宙人って呼ばれてそう
0786デフォルトの名無しさん (ワッチョイ 771a-nc77)
垢版 |
2020/11/30(月) 12:15:09.00ID:0LXXOsdO0
TryGetValueを使うことに拘りすぎててアスペ臭しか感じない
好きにしろと言いながら必死で反論してんのが特にな

多様性を許容するっていうのは>>754みたいなスタンスなんだよ
ここまで言われて「何言ってんのか分かんない」と騒ぎ続けるのは感情で理解を拒んでるだけの地雷君
「そういうの嫌われるからやめよ?」って指摘されてるのに「なんで? 俺が正しいじゃん?」って返すのは馬鹿を通り越した何かだわ
0796デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 16:36:59.20ID:r8rQ87Qr0
関数の出口が、複数ある奴か。
危険だから、MISRA-C の禁止事項

一方、Linux では関数の冒頭で、処理しない場合は、即リターンするとかやってる。
関数の出口に、goto で例外処理をまとめたりとか

MISRA-Cを守らない場合は、逸脱手続きが必要。
トヨタなどは、MISRA-Cで、4/100 しか点数を取れなかったとか聞いたw

MISRA-C研究会にも、トヨタのベテランが加入してるのに
0798デフォルトの名無しさん (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 16:53:06.40ID:r8rQ87Qr0
辞書のキーが存在しないのは、例外じゃない。
最初から想定内の事で、予想がつくから

例外はファイルが存在しないとか

Go では例外を嫌って、複数の戻り値で、エラー値を返す
0799796 (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 16:56:08.66ID:r8rQ87Qr0
漏れは、戻り値を変数に入れておいて、return は1つだけにしてる

if 条件
result = 1
else
result = 2
end

return result
0801デフォルトの名無しさん (ワッチョイ 9f24-GtYN)
垢版 |
2020/11/30(月) 17:08:29.73ID:8S8hZPx60
複数returnとかワンライナーとかはそれこそ正解の無い事だから各々好きにしてくれよ
TryGetValueとContainskey+インデクサは正解があると思ってるからこっちはつい反論し続けてしまったが
0803デフォルトの名無しさん (ワッチョイ d75f-OOND)
垢版 |
2020/11/30(月) 17:15:26.09ID:3PLmCTmV0
ヌルチェックやりはじめてから一刻も早くreturnすることを考えて書くようになった
階層が深くならないので見やすいし、上の部分だけである条件にあてはまった処理が完結してるので読みやすい
0806デフォルトの名無しさん (ドコグロ MMdf-hU1l)
垢版 |
2020/11/30(月) 18:30:53.38ID:n+7nNLssM
>>800
さすがにMISRAとかが言ってるのはそう言う低レベルな話じゃなくて途中脱出でのリソース開放漏れとかを心配してる
なのでC#なら例外とかusingとかを適切に使えばそれほど問題にならない
クラス継承させた時のIDisposeのコーディングが面倒なのがたまにキズだけど
0810デフォルトの名無しさん (ワッチョイ 9f01-1+jW)
垢版 |
2020/11/30(月) 21:11:29.21ID:a85534SW0
少し調べてみたけどMISRAがsingle returnを推奨する根拠に上げてるIEC 61508には
”subprograms should have a single entry and a single exit only;”と書かれているだけ

そこに参考文献としてヨードン/コンスタンティンの「ソフトウェアの構造化設計法」を上げてるが
ヨードンやダイクストラが提唱したsingle exitは時代的にも意味が違うのでルール自体の根拠が薄い
https://softwareengineering.stackexchange.com/questions/118703/

1993年出版のCode Completeでも今回のようなケースはmultiple returnが推奨されてるくらいなので
single returnはリソースクリーンアップが必要だけど
他の方法がどうしても取れないような特殊なケースでしか意味がないと思って良さそう
0812796 (ワッチョイ b72c-OOND)
垢版 |
2020/11/30(月) 21:56:17.24ID:r8rQ87Qr0
Cプログラミングの落とし穴
C Traps and Pitfalls, Andrew Koenig, 1989

ここから、Lint, MISRA-C などが出来た
0817デフォルトの名無しさん (アウアウエー Sadf-WCF9)
垢版 |
2020/12/01(火) 12:14:20.95ID:k3h/30i7a
そんな流派の人に会ったことないけど、意図はたぶん古典的なぶら下がり問題対策だろうね
俺はこんなミスしたことないしIDEの時代には杞憂だと思うけど

if (true)
  if (false) {}
else Console.WriteLine("来ないはず");
0820デフォルトの名無しさん (ワッチョイ fb54-9rBX)
垢版 |
2020/12/02(水) 01:47:00.65ID:HjUyDubp0
Dispose()しないといけない条件がいまいち分からないんですが、
コンポジションとして参照を保持しているメンバーがDispose()メソッドを持ってたら、Dispose()を実装しないといけない、ていう理解でいいんでしょうか?
0821デフォルトの名無しさん (JP 0H70-rBWM)
垢版 |
2020/12/02(水) 10:14:54.41ID:ebqkblVHH
>>820
たとえばファイルを開いて中身を書き換える処理をFileStreamでするじゃん
開いてる間は他の人やプログラムがそのファイルを使えない状況になるから
使い終わったらちゃんとDisposeで閉じましょうねって事
0823デフォルトの名無しさん (ワッチョイ 4624-onDa)
垢版 |
2020/12/02(水) 12:32:26.40ID:/5AdVnEZ0
>>820
基本はYes
内部でそのメンバをDisposeする仕組みが他にあるなら別に実装しなくても良いが、とは言えIDisposableを実装しておけばそのラップクラスでもusingステートメント使えるから分かりやすいしね
IDisposableはコードでDisposeせずともGCによる破棄タイミングでDisposeしてくれるから最悪し忘れても大丈夫だが(GCによるオートDisposeはパフォーマンスが悪いので出来れば避けるべきだが)
0824デフォルトの名無しさん (ワントンキン MM3b-fAcm)
垢版 |
2020/12/02(水) 12:51:23.41ID:VuN4nxV5M
>>820
そうとは限らない
たとえば外部のAPIを使っていて、使い終わったら必ずある処理を最後に呼ばなければならないという決まりがある場合
たとえばある一連の処理の間は一時ファイルを作り、最後に消す必要がある場合
そういったユースケースをクラスにするならDisposeを実装することになるだろうな
Disposeってのはつまり、最後に特定の処理を必ず呼ばなければならないという規約に他ならない
0825デフォルトの名無しさん (アウアウエー Sa6a-JhWO)
垢版 |
2020/12/02(水) 18:14:26.77ID:w77bbFvMa
>>820
エンジニアは教条主義的に考えてはいけない。
何も難しくない。

オブジェクトが自分のメンバー(フィールドかプロパティ)のDisposeを呼ぶべきタイミングを
自分で判断できるならわざわざDisposeを実装して他人にそれを任せる必要はない。
できないならDisposeを晒して他人にお願いする。

それだけでしょ。
でも「Disposeを呼ぶべきタイミングを自分で判断できる」のはメソッド呼び出しが
完了した後も別のスレッドで動作を続けるタイプのオブジェクトだけなので
そうは多くないはずだよね。
0826デフォルトの名無しさん (エアペラ SD03-uu7w)
垢版 |
2020/12/02(水) 19:47:17.83ID:o81q9kO+D
>>1
> なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#, C♯, C#相談室 Part94
http://mevius.5ch.net/test/read.cgi/tech/1553075856/

ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1469538912/

テンプレも読めない奴らがする議論は、
もはや議論ではなくマウンティング合戦
0827デフォルトの名無しさん (アウアウエー Sa6a-JhWO)
垢版 |
2020/12/02(水) 20:41:49.29ID:w77bbFvMa
>>826
君がやってるのもそのマウンティング合戦のうちなのは自覚して欲しいよねw
もはや5ch全体がそうだけど特にここは過疎スレなわけで、そんな目くじら立てることないと思うよ
誰か困る奴いるの?w
誰もいないって。
0833デフォルトの名無しさん (ワッチョイ 4601-XXx1)
垢版 |
2020/12/03(木) 07:07:12.64ID:UmUyqAch0
今更訊きづらいけどgoto文のラベルの命名ルールって

     goto maki;
hirohisa:
     System.Console.WriteLine("誰だよ");
     goto hell;
maki:
     System.Console.WriteLine("知ってる");
     goto hirohisa;
hell:
     System.Console.WriteLine("そうだな");

こんなんでいいの?
0834デフォルトの名無しさん (ワッチョイ ca7c-64Es)
垢版 |
2020/12/03(木) 09:22:44.20ID:Mqqeu2dm0
>>830
webView2.CoreWebView2.CookieManagerはどう?
0838デフォルトの名無しさん (ワッチョイ c09b-jrSk)
垢版 |
2020/12/04(金) 16:12:00.25ID:ZsgfFad40
nugetからインストールしたライブラリですが
別のパソコンから同じプロジェクトを開けるとusing句がエラーになってしまい
ライブラリを一度アンインストール→インストールし直さなくてはなりません

複数のパソコンで同一プロジェクトを編集するときnugetは使えないのでしょうか
0842デフォルトの名無しさん (ワッチョイ f084-jrSk)
垢版 |
2020/12/04(金) 16:55:13.19ID:edWfS5jb0
>>838
nugetのライブラリって各PCっていうかVS毎に管理しているから、ソースを別の場所に
持っていったらその環境で指定されているライブラリを拾わないとダメなんじゃ
なかったっけ?
>>839が言ってるみたいなことがnugetの管理ツールだかメニューにあったような
0843デフォルトの名無しさん (ワッチョイ b0f1-xTiW)
垢版 |
2020/12/04(金) 17:04:36.37ID:ZLeuk8KN0
>>838
チキンマックナゲットは
セールのときは5個入り200円だから
そのときに買うのがベストだと思うよ。
0844デフォルトの名無しさん (ワッチョイ b0f1-xTiW)
垢版 |
2020/12/04(金) 17:05:31.23ID:ZLeuk8KN0
ソースは必ずバーベキューを。
バーベキュー以外は糞まずくハズレ。
0845デフォルトの名無しさん (スップ Sd02-dwcT)
垢版 |
2020/12/04(金) 17:25:30.91ID:0hbyHhKrd
CIでビルドするとき、確実にnugetの修復が必要になるから構築したことあるならわかるはず
コマンドラインからnugetにsln渡してやればDLしてくれる

つうかオンラインからいつでも好きなversionを落としてこれるのがnuget等ライブラリ管理ソフトの強みなんだからプロジェクト内にファイルなんて置いたらメリットが減る
外部ライブラリを編集しないのにバージョン管理下においてプロジェクトを肥大化させる意味がない
0851デフォルトの名無しさん (ワッチョイ 6e01-zLCK)
垢版 |
2020/12/04(金) 22:05:08.94ID:9AUT9QCq0
新潟から週2回東京に出勤、サイボウズの複業採用社員に聞く複業ライフのリアル。
https://www.businessinsider.jp/post-166126
兼業でフリーライター、サイボウズ社員・明石悠佳に学ぶパラレルワーク術
https://www.wwdjapan.com/articles/752575
「複業を解禁しなければ人も企業も成長しない」複業全面OKのサイボウズ社長と実践社員の本音対談
https://www.businessinsider.jp/post-33893
育休は最長6年、副業もOK! サイボウズはなぜ「100人100通りの人事制度」を作ったのか
https://logmi.jp/business/articles/50252
超異例「週休4日制」の導入をSMBC日興証券社長が決めた理由
https://diamond.jp/articles/-/223832
週休3日制をさらに進めた週休4日制
https://www.k-society.com/recruit/why-four-days-off-a-week/
採用情報(週休3日制を超えた週休4日制の正社員求人 | 副業OK
https://www.k-society.com/recruit/
2020年4月より「週休3日制」を導入。テックカンパニー化に向け、好循環を生み出すエンジニアリング組織へ
https://prtimes.jp/main/html/rd/p/000000096.000016431.html
0852デフォルトの名無しさん (ワッチョイ aee9-+Jo+)
垢版 |
2020/12/05(土) 09:07:58.88ID:7mh3qGhb0
ライブラリの話ですみません
SevenZipSharpにてSolid圧縮ファイルを[STAThread](FormやWPFのメインスレッド)にてExtractArchiveするとフリーズしてしまうのは私だけでしょうか?
別スレッドやTask化したり、そもそもSTAThreadが使われないConsoleアプリでは同期でも全く正常にSolid圧縮も解凍されるのですが
0853デフォルトの名無しさん (ワッチョイ 0e68-9rBX)
垢版 |
2020/12/05(土) 10:37:20.60ID:kSej4vti0
List<List<List<int>>>→List<List<int>>
List<List<int>>→List<int>
にする方法ってLINQでは不可能ですか?
並び順は変えないとします。
for使うしかないですか?
0854デフォルトの名無しさん (ワッチョイ 0e68-9rBX)
垢版 |
2020/12/05(土) 10:38:07.01ID:kSej4vti0
後者が
{1,2,4}{3,9,8}→1,2,4,3,9,8って感じ
0857デフォルトの名無しさん (ブーイモ MMfd-xTiW)
垢版 |
2020/12/05(土) 11:31:13.29ID:CCPlFK06M
>>856
なぐるわよ
0858デフォルトの名無しさん (ワッチョイ 0e68-9rBX)
垢版 |
2020/12/05(土) 11:42:56.05ID:kSej4vti0
>>855
順番変わりますか?
0864デフォルトの名無しさん (ブーイモ MM5e-JQIg)
垢版 |
2020/12/05(土) 15:30:56.23ID:OcFAL7DuM
手元では大丈夫でもリリースした先でダメでした、というオチがたのしそう
0869デフォルトの名無しさん (ワッチョイ ec6a-l3pW)
垢版 |
2020/12/06(日) 11:07:39.97ID:GAck2gc00
recordは便利だけど勉強しなおさなきゃいけないレベルでもない
新しいこといくつか覚えればいいだけ
0875デフォルトの名無しさん (ワッチョイ ec6a-l3pW)
垢版 |
2020/12/06(日) 12:41:32.76ID:GAck2gc00
https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-9#record-types

レコード型を使用すると、変更できない参照型を .NET で簡単に作成できます。

従来、.NET 型は、参照型 (クラス型と匿名型を含む) と値型 (構造体とタプルを含む) に大別されています。
0878デフォルトの名無しさん (オッペケ Sr10-ta7A)
垢版 |
2020/12/06(日) 13:08:42.54ID:a+vxG21/r
多分今後recordを使ってないコードを見るとイライラするようになるでしょう
今すぐにじゃなくてもそのうち確実に

古いコードは全部打ち捨てられるでしょう
ただMVVM命の人には関係ないでしょう
0881デフォルトの名無しさん (オッペケ Sr10-ta7A)
垢版 |
2020/12/06(日) 13:23:50.76ID:a+vxG21/r
どうせrecordで既存のコード捨てられるから言語ごと最初から作り直したほうが良いかもしれない

最初から作り直せるとしたらデリゲートはなくなるのかどうか
C#+F#のような言語ができたら非常に面白い
0894デフォルトの名無しさん (アウアウエー Sa6a-JhWO)
垢版 |
2020/12/06(日) 17:09:37.16ID:L/mxF/rBa
>>875
このスレのレスだけ見てたらそんなの何が嬉しいんだと思ったが、
なるほどそれなりに便利そう

ただ、MSのドキュメントに列挙されてる

- 値ベースの等価比較のためのメソッド
- GetHashCode() のオーバーライド
- コピー メンバーとクローン メンバー

これらが自動実装されるのは確かに嬉しいが、これを実現するために何でイミュータブルにする
必要があるのかいまいちよく分からない
0900デフォルトの名無しさん (ワッチョイ b9ab-jrSk)
垢版 |
2020/12/06(日) 18:49:40.35ID:Cw8pwO+X0
勘違いしてた。わざわざ書いてたいつものコードを書かなくて済むようになるのがメリットか
ところで、「record Person」の例で同姓同名の別人を区別したくなったらどうすればいいのん?
0902デフォルトの名無しさん (ワッチョイ 732c-RsF0)
垢版 |
2020/12/06(日) 19:03:18.97ID:atqZF9NJ0
「Effective 何々」とかによく書いてある、3種の神器だろ

Ruby なら宇宙船演算子、<=> で比較関数を再定義する。
ハッシュ関数を再定義する。

p 関数を再定義する。
こういう謎のようなインスタンスID ではなく、分かりやすい表示を再定義する

class A
end

p a = A.new #=> #<A:0x00000000031c2f98>
0903デフォルトの名無しさん (オッペケ Sr10-l3pW)
垢版 |
2020/12/06(日) 19:10:34.23ID:a+vxG21/r
recordはプロパティが基本publicになった
今まではprivateで隠蔽されていて外部から変更されなかった
これはカプセル化なんだけどこれがpublicになっただけじゃ意図しない変更をされる場合がある
非常に困る

だいたいのケースでは参照されても変更されなければ問題がないのでイミュータブルにするじゃねーかなと
0905デフォルトの名無しさん (オッペケ Sr10-l3pW)
垢版 |
2020/12/06(日) 19:18:27.50ID:a+vxG21/r
世の中もイミュータブルが求められていると言うのもその通り

ValueObjectはいったん値を設定したら変えない
値を変えたくなったら新しいValueObjectをnewして挿げ替える
0912デフォルトの名無しさん (ワッチョイ 1a63-dwcT)
垢版 |
2020/12/07(月) 02:42:51.99ID:FMWF8Lcl0
9に限らず今までのversion upはどれも影響度が大きい
8のnullable、7のtuple、6の自動実装プロパティ、5の非同期、4のdynamic、3のlinq
他にもいっぱいあるけど
どれも現状のC#にとって超重要な内容
0915デフォルトの名無しさん (ワッチョイ 6e61-JQIg)
垢版 |
2020/12/07(月) 06:24:24.79ID:AjKIX7D20
バージョン9が話題らしいですがc#のバージョンてどこ見りゃわかるの?
0916デフォルトの名無しさん (ワッチョイ fb54-9rBX)
垢版 |
2020/12/07(月) 07:20:40.19ID:VGjx4xxr0
>>915
VS2019なら、ソースの適当なとこに、
#error version
って書いて、versionにマウスカーソル合わせると表示される。
あと、9かそうでないかの判断だけなら、setの代わりにinit使ったプロパティが認識されるなら9。
int Hage{get; init;}
0917デフォルトの名無しさん (ワッチョイ 6e61-JQIg)
垢版 |
2020/12/07(月) 07:27:50.50ID:AjKIX7D20
>>916
ありがたう。言語バージョン7.3て書いてあった。
保守的な現場だから簡単にバージョンあげたりはしないのだろうな。
recordか。仕事で使ってみたかった。
0919デフォルトの名無しさん (アウアウクー MMd2-Jjlp)
垢版 |
2020/12/07(月) 07:47:15.09ID:B8tartMNM
Record型って最初聞いた時に、データベースのレコードを突っ込む型と思ってたわ…

更新できないってことは
中身書き換えてEFに投げてデータベース更新することができないってことだよな。
俺もいまいち使い道がわからんわ。
どういうシステムで使うんだろ。
0921デフォルトの名無しさん (ワッチョイ ec6a-l3pW)
垢版 |
2020/12/07(月) 09:15:00.72ID:5xO4uxgk0
>>917
.NET Frameworkだと7までしか使えないんじゃなかったかな
8も設定すれば使えるけど一部機能に制限あったはず
0922デフォルトの名無しさん (ワッチョイ 215d-jrSk)
垢版 |
2020/12/07(月) 10:31:45.42ID:mtQ69pRI0
.NET Core〜.NET5でWindows用アプリをビルドするとexeやdllやjsonが生成されてそれら全て必要なようですが、.NET Frameworkのようなスマートな出力には出来ないんでしょうか?
丸々exe一本にしたい訳ではなくライブラリは別にしたいので単一ファイル化とはちょっと違うのですが
0937デフォルトの名無しさん (ラクッペペ MM34-xfUJ)
垢版 |
2020/12/08(火) 12:35:05.35ID:f+ofKIWhM
全く関係ないが昔ログインの事を略してログと呼んでいる奴がいて
それに気が付くまで話が全く理解できなかった
0943デフォルトの名無しさん (ワッチョイ 0c01-zWK8)
垢版 |
2020/12/08(火) 15:12:08.46ID:L/fvSJtl0
>>935
「更新」の意味を古い記録を新しい記録で差し替えるという意味にとるか
古い記録自体を変更して最新状態にするという意味にとるかの違い
前者はイミュータブルで後者はミュータブル
0944デフォルトの名無しさん (ワッチョイ bc5f-RsF0)
垢版 |
2020/12/08(火) 15:23:20.07ID:0ctxmOmz0
>>922
必要ないのも混ざってるよ
0948デフォルトの名無しさん (ラクッペペ MM34-xfUJ)
垢版 |
2020/12/08(火) 19:03:10.97ID:f+ofKIWhM
デビュー前にレコード大賞を盗った場合はどうなるの?
0953デフォルトの名無しさん (ワッチョイ 7fb0-kRr2)
垢版 |
2020/12/11(金) 09:52:21.87ID:xnlTyNu60
エンディアンのバイトスワップめんどくせー
0954デフォルトの名無しさん (ワッチョイ df40-orE1)
垢版 |
2020/12/11(金) 11:23:36.63ID:RmJd06BU0
あるウェブサイトにWebrequestを使ってアクセスしようとしたところ、
「ご使用のブラウザはCookieまたはJavaScriptの設定が無効です」
と出てウェブブラウザでは表示されるページが取得できませんでした。
webrequestは今まで何度も使っていますがこんなことになったのは初めてです。
↓のようにどこの解説サイトでも掲載されているような普通のやり方でやっているだけなのですが、回避する方法はあるのでしょうか?

CookieContainer myCC = new CookieContainer()
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = myCC:
0956デフォルトの名無しさん (オイコラミネオ MM7b-oVOe)
垢版 |
2020/12/11(金) 12:28:58.18ID:e2z+8YzhM
プロジェクト内で定義された派生クラスを全てリストする方法ってあるでしょうか?
例えば動物という基底クラスがあり、
派生クラスに猫、犬と2つ作ったとします。
基底クラスには鳴き声メソッドがあるとします。
猫の鳴き声メソッドは「ニャーニャー」と返します。
ある関数で「ワンワン」という文字列が来た際に
プロジェクト内の動物派生クラスを個別に生成して鳴き声メソッドを叩き、
ワンワンと鳴く派生クラスを特定する逆引きのような処理をしたいです。
if文で全派生クラスを書けばいいですが、派生クラスはガンガン増えていくので、派生クラスを定義するたびににそのif文をメンテするのはメンテ漏れのバグのリスクがあるので
プロジェクト内に現在定義された動物派生クラスを全部取ってくる事が出来れば、それをグルグル回せばメンテナンス不要のコードにできるのですが
0957デフォルトの名無しさん (スップ Sd7f-H4RV)
垢版 |
2020/12/11(金) 12:46:55.66ID:VHLzC15hd
SourceGeneratorならできるだろうけど、何の情報もなしにclass探すのは無理じゃない?
テーブル内のclassに対して全部処理するとかはできるだろうから編集箇所は最小限で済ませられるけど
0959デフォルトの名無しさん (アウアウエー Sa9f-5lnE)
垢版 |
2020/12/11(金) 13:03:11.90ID:exUCYAAha
>>956
動的にサブクラスを列挙するのはたぶん無理じゃないの?
public abstract class Animal
{
  public Animal(Animal a)
  {
  ...
  }
}
こういう風にAnimalのコンストラクタでthisを渡すことを強制しておけば
少なくともインスタンス化されたものは把握できるね。
0960デフォルトの名無しさん (ワッチョイ ff7c-kRr2)
垢版 |
2020/12/11(金) 14:37:47.39ID:m/dnIqsS0
typeof(Animal).Assembly.GetTypes().Where(_type => _type.IsSubclassOf(typeof(Animal)))
型の列挙自体はこんなんでできるけど
インスタンスどうするの?っていう
全部の型にpublicな引数なしコンストラクタが必ずありますならなんとかなるけど
0961デフォルトの名無しさん (ワッチョイ 7fbb-Drbj)
垢版 |
2020/12/11(金) 15:40:59.87ID:69jKb/QY0
そういやクラスに、静的に実行される静的イニシャライザを書けるようにしてくれたらいいのにと思うことあるな
0964デフォルトの名無しさん (アウアウエー Sa9f-5lnE)
垢版 |
2020/12/11(金) 19:31:50.50ID:exUCYAAha
>>963
意味が分からんけど
public class Cat:Animal
{
  Cat():base(this){ ... }
}
これはNGみたいだね。
別にこれで良かったのか
public abstract class Animal
{
  private static List<Type> Animals = new List<Type>();
  public Animal()
  {
    var t = this.GetType();
    Animals.Remove(t);
    Animals.Add(t);
  }
}
0965デフォルトの名無しさん (ワッチョイ df2f-Goa5)
垢版 |
2020/12/11(金) 19:37:25.05ID:PS9oWtr00
>>960
自分のインスタンスを返す静的メソッドって作れないのか
それを親クラスかインターフェイスで規定しておけばよいんじゃ

つかわざわざインスタンス生成しなくても、鳴き声が自分かどうか判定する静的メソッドで事足りる気がするな
0967デフォルトの名無しさん (ワッチョイ 7fbb-Drbj)
垢版 |
2020/12/11(金) 21:16:51.65ID:69jKb/QY0
>>962
ま、まじで?
なんて機能名でググれば出てきそう?
0980デフォルトの名無しさん (ワッチョイ df01-1sNk)
垢版 |
2020/12/13(日) 14:07:55.69ID:3XNF+7/F0
.NETNative をちゃんと作ればC#でもネイティブコードにコンパイルできるだろうし、そもそも性能がたいして必要ないならインタプリタでもドライバを書くことはできるだろうけどGCに依存してる言語はタイミングが読めないから難しいわな
0982デフォルトの名無しさん (ワッチョイ 4768-Goa5)
垢版 |
2020/12/14(月) 19:47:40.61ID:EY+baBGY0
WEBの写真ダウンロード処理をしてるのですが、出来るものと出来にくいものがあります。
出来にくいもの(EDGEブラウザで開けるとすぐ見れるがダウンロードでは20秒くらいかかる)
https://i.dailymail.co.uk/i/pix/2013/05/09/article-2321812-19B162BA000005DC-124_634x449.jpg
出来るもの(すぐにダウンロードできる。EDGEブラウザでもすぐ見れる)
https://i.imgur.com/bnUR6en.png

System.Net.WebClient client = new System.Net.WebClient();
client.DownloadFile("https://i.dailymail.co.uk/i/pix/2013/05/09/article-2321812-19B162BA000005DC-124_634x449.jpg";, @"D:\tmp.jpg");
こういうのはサーバー側でアクセス種類がブラウザかプログラムか見分けられて
対策されてるのでしょうか?
0983デフォルトの名無しさん (ワッチョイ a724-S/l1)
垢版 |
2020/12/14(月) 20:29:19.80ID:w+atsEVh0
出来る出来ないなら、サーバー側でUserAgentやクッキーやその他ヘッダを見てブロックするというのは普遍的な手法だからよくある事だけど
出来るものと出来にくいものはよくわからないが、一応ダウンロード前にこれ挟んで試してみるといい
client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36");
0985デフォルトの名無しさん (ワッチョイ 4768-Goa5)
垢版 |
2020/12/15(火) 10:35:58.18ID:md2wlUIm0
>>983
やってみましたら止まらずすぐにダウンロードできるようになりました。
サーバー側でUSERAGENTが入ってるか入ってないかでプログラムアクセスかどうかの選り分けをして
USERAGENTが空のものには20秒くらいわざとジラシが入ってるようです。
一括ダウンローダーとかの対策かなんかかもしれませんね。
ありがとうございました。
0987デフォルトの名無しさん (ワッチョイ a724-S/l1)
垢版 |
2020/12/15(火) 13:14:41.01ID:fP0YYSyi0
>>985
ちなみにChromeはかなり小まめにアプデ入る訳だが
Botは往々にして"Chrome/87.0.4280.88"の部分が古いままという特徴があって最新版一つ手前よりも前のバージョンだと弾くって言う対策してる鯖もある
まぁここまで対策してくるのは稀だから放置でも大方問題にはならないが、インスコフォルダやレジストリや最悪webなどからバーション取得する方法あった気がするから暇なら最新版のUAにするロジックも入れておいた方がいい
0988デフォルトの名無しさん (テテンテンテン MM8f-/5tz)
垢版 |
2020/12/15(火) 21:23:57.67ID:2D6p9tgnM
規模のでかいプロジェクトを開発してるといつもどのファイルを開いてるのかわからなくなったり、目的のファイルが見つからなかったり大変なんですけどどうしたらいいですか?
目的のフォルダに対してブックマーク的なものが設定できたりしたら迷子にならなくてすむんですがそんなのないですか?
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 204日 0時間 25分 55秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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