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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/12/15(土) 10:46:07.45ID:Wu4Fx0bU
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
2020/09/30(水) 15:39:11.81ID:mMxFIkOQ
Unity の C# は C# のサブセット
2020/09/30(水) 22:58:13.59ID:88URXoRi
>>232
> WinformもWPFもやったことない人なら、どっちでも楽さは変わらない
ってことは絶対ない
覚える分量もぜんぜん違うし
特にWPFとMVVMと一緒に覚えないといけないのは難関すぎる
c#精通してる人たちでも移行がすんなりいかなかったのにふざけるなよほんと
2020/09/30(水) 23:17:51.70ID:AZmvyllE
>>774
それを言ったらWinformsもサブセットだしWPFもサブセットだし大体がサブセットになるじゃん
2020/09/30(水) 23:32:40.97ID:FlnFD5lW
>>775
MVVMは必須じゃないぞ
MVVMやらないならそんなに差があるとは思わないな
MVVMまで覚えるなら確かに学習量が全然違う

つーか、1年以上前の発言にレスすんなよw
778デフォルトの名無しさん
垢版 |
2020/09/30(水) 23:38:46.92ID:wQcBlxXT
ボタンを置いてダブルクリックするとイベントハンドラが自動的に作られる…
みたいな作りやすいUIが早くできればいいのになー
2020/10/01(木) 00:03:09.65ID:+QSVvI9y
>>778
VSのWinフォームデザイナで出来てるだろうが
2020/10/01(木) 00:56:42.92ID:pTVPs5Kc
>>778
は?
781デフォルトの名無しさん
垢版 |
2020/10/01(木) 02:42:28.23ID:zz0NqDNj
WinFormsを選択する理由がない

C#はXamarin, Unity, WPFでOK
2020/10/01(木) 02:51:18.52ID:D0iMq3L3
>>778
せやな
2020/10/01(木) 03:18:09.94ID:gmn8vEFr
>>778
どういう目的でボタンを配置したのかをAIが忖度して
イベントハンドラーが自動的にプログラミングされるならすごいなー
いや余計なお世話かもしれないから
ダブルクリックでウィザードが起動するくらいなら出来なくもないか!?
ダブルクリックでUnityもXamarinも対象位置に飛ぶだけかな?
if文やトライキャッチはTABキーダブルでテンプレ挿入なるけど、まだまだ物足りない・・・
2020/10/01(木) 16:01:53.74ID:c282b8/j
.net5からはWinUI3でUWPのガワがデスクトップで利用できるようになり
xamarinからunoってのに代替わりもありそう
785デフォルトの名無しさん
垢版 |
2020/10/01(木) 16:17:26.41ID:15Icpaxe
>>776
お前サブセットの意味判ってないやろ
2020/10/01(木) 17:15:28.05ID:Am5BkVHe
>>1が理解できない、守れないやつは他へ行けよ
2020/10/02(金) 00:49:35.05ID:yLHMA8M3
.net coreはまだまだコントロールが足りなくて切り替えは厳しいな
シコシコ作った自家製クソアプリがラズパイ上で踊り狂う日を待ってます
2020/10/02(金) 07:20:55.57ID:0z7X4+Qf
async awaitの原理がよく分かりません。
await以下のコードは実行されないにも関わらずawait中にそのスレッドが固まらないのはどういう原理なのでしょうか?
具体的にはUIのボタンクリックなどのイベント関数内でのawaitの話です
2020/10/02(金) 08:51:18.97ID:kuZFus9w
既に解説してくれてる人が沢山いるから読めば
https://www.slideshare.net/mobile/ufcpp/asyncawait-114647813
2020/10/02(金) 10:35:41.15ID:p0460FPy
async awaitのメソッドはその時点でノーマルメソッドから呼べないので悪手
2020/10/02(金) 10:37:50.75ID:m3jHS+gr
>>790
何言ってんだこいつ
792デフォルトの名無しさん
垢版 |
2020/10/02(金) 11:06:17.65ID:vEIDHK0R
const 汚染とか GPL 汚染とかと一緒で
async await 汚染が広がるってのはある
もちろん回避方法知ってれば回避可能
2020/10/02(金) 11:08:01.96ID:qQOsRvHB
Asyncメソッドは名前がキモい
2020/10/02(金) 12:18:32.20ID:HvZS2dGY
githubでc#製のソースコードみてると
visual studioが吐いたファイルとかが含まれてないんですけど
普通はvisual studioで開発をしないものなんでしょうか?
2020/10/02(金) 12:22:19.93ID:X17mNl8S
普通はvsじゃない?
例えばどのリポジトリ?
796デフォルトの名無しさん
垢版 |
2020/10/02(金) 12:23:44.70ID:vEIDHK0R
無駄なものは要らんので .cs だけで済む場合は .cs だけのプロジェクトの方が好き
2020/10/02(金) 12:25:23.46ID:J9R5Ijdj
makefileを自分で書けっていうのは見るなって言ってるのと同じだよな
2020/10/02(金) 12:30:57.59ID:DER3efA5
自動生成されるようなものをリポジトリに含めてもしょうがないから除外してるだけなんじゃね?
2020/10/02(金) 12:33:28.61ID:X17mNl8S
slnもcsprojファイルも無いってことなんでしょ?
わざわざそんなことする?
2020/10/02(金) 12:41:03.88ID:m3jHS+gr
>>794
どれ?
2020/10/02(金) 17:44:48.62ID:XoOS1pa+
>>790
何故そう思った?
2020/10/02(金) 17:56:06.16ID:p0460FPy
>>801
エラー出たよ
2020/10/02(金) 19:55:46.73ID:H7VjwKcI
本物の馬鹿だったか
2020/10/02(金) 20:20:16.02ID:p0460FPy
え、ショック
2020/10/02(金) 20:42:39.37ID:LbxjABVY
間違った使い方をすりゃそりゃエラーも出るよ
2020/10/02(金) 22:24:30.87ID:p0460FPy
正しい使い方なんてあるのかよ
2020/10/02(金) 22:34:28.61ID:zXx3uGG2
当たり前だろ
2020/10/02(金) 22:48:57.10ID:p0460FPy
でもググって出てくる例っておかしいのばっかりじゃね?
2020/10/02(金) 22:52:20.08ID:SS+YiBnr
道路で逆走している車から見て「車がみんな逆走しているぞ」って言っている感じか
2020/10/02(金) 23:14:47.03ID:p0460FPy
そう言えばこの命令が欲しいときってプログレスバーで進捗状況も更新して欲しいときが99.89%なんだけど
結局while+sleepのが綺麗に書けることが多くて使ってないな
2020/10/03(土) 00:00:37.61ID:YZwmKYAY
正しい使い方を知らないのにも関わらず悪手、なんてよくいい切れるなw
プログレスバーはIProgress使うだけでじゃん
2020/10/03(土) 00:29:25.48ID:5AEEzqRi
>>811
久しぶりに聞いたなIprogress
813デフォルトの名無しさん
垢版 |
2020/10/03(土) 01:07:24.42ID:sQ+SRwj5
「非同期メソッドは、asyncがついた関数内からしか呼べない。」みたいなことが書いてある嘘ブログが結構あるからな
例の大量書き込みの人は、そう言うのを書いてる人か、それかそう言うのを読んで真に受けてる人なんだろう
2020/10/03(土) 02:58:19.24ID:/wA+nWqo
プログレスバーなんて、簡単に動かないだろ。
マルチスレッドなのに、素人ができるわけない

非同期と同じ。
コンテキスト・文脈が異なるから、特別な書き方をしないと動かない
2020/10/03(土) 08:26:53.20ID:sEhX1LxQ
別にasync/awaitがなかった時代でも
GUI操作のときだけForm.Invoke()すればよかっただけじゃない

Rubyジジイは老害みたいなこと言ってるわりにいにしえの当たり前のスキルすら持ち合わせてない
2020/10/03(土) 08:56:04.28ID:rbnJu3Rq
>>814
C#でマルチスレッドじゃないと動かないプログレスバーなんか存在しないからコンテキスト・文脈が異なるスレに帰れ
2020/10/03(土) 10:29:50.07ID:XvRdXCx6
>>789
ありがとうございます。
大雑把に言えば、await以下の同関数内のコードは内部的にはコールバック化されるという理解で良いんでしょうか?
そして待機せずに同関数から抜けるため固まらないと
818デフォルトの名無しさん
垢版 |
2020/10/03(土) 10:49:35.02ID:NjZXoVXL
UnityのC#にTaskが無いのは何故なんです?
2020/10/03(土) 10:58:38.87ID:Rg22Ictw
C++では、クラスの宣言とメソッドを別々にかけるじゃないですか
class A{
 int get();
};

int A:get()
{
}
みたいに。C#でも同様な書き方は出来ますか?
820デフォルトの名無しさん
垢版 |
2020/10/03(土) 11:03:01.12ID:C2ZTF6bo
partial は?
2020/10/03(土) 11:09:15.30ID:/wA+nWqo
JavaScript で言えば、await は、非同期・async を、同期的に書けるもの

例えば、処理A, B, C があり、
Bが非同期なら、コンテキスト・文脈が異なるから、
A, C, B の順番で実行される

await を付けると、下へ行かない。
同期処理と同じ、A, B, C の順番になる

面倒な非同期処理を、同期処理のように、上から書いた順番通りに実行される

漏れは、C# のawait は知らないから、自分で調べて
2020/10/03(土) 11:22:22.57ID:td6OdJ/B
>>821
C#のawait知らないならC#のスレに得意げに書き込むなよ知障
2020/10/03(土) 11:34:05.39ID:nJ/4CJLb
進捗率100%中の100%プログレスバー
2020/10/03(土) 11:36:39.63ID:nJ/4CJLb
1日1%感謝の進捗更新
825デフォルトの名無しさん
垢版 |
2020/10/03(土) 11:44:35.80ID:NjZXoVXL
99% から 100% になるのに 3日かかるんですね判ります
2020/10/03(土) 12:45:54.24ID:7JLpHN6R
>>825
いや、すぐ100%になるよ
その後の

更新したファイルのチェックをしています

に時間かかるけど
2020/10/03(土) 14:54:53.24ID:cvTPWa8P
C#のよりよい書き方を教えてくれるチェッカーってありますか?
シェルスクリプトだとshellcheckみたいなの
2020/10/03(土) 15:07:25.79ID:oPj9Yyz3
定番はStyleCop
2020/10/03(土) 16:25:06.84ID:hETfjJzu
ReSharperはお母さん
2020/10/03(土) 17:10:12.58ID:DOKuHmaU
>>825
単調増加するとも限らない
途中で減るプログレスバーとかあるで
2020/10/03(土) 18:26:08.32ID:NyXscKPR
システム更新系のでそんなのがあった気がしたねw

まあ、処理時間ベースの進捗度なんて出すのはどうせ難しいんだから
フリーズしてる不安だけ感じさせないようにしてくれれば十分だよね。

VS2005の時代のイメージライブラリーにナイトライダーのあれみたいな
gifアニメがあったけどああいうのでいいと思う

10段階の処理のnフェーズ目を処理中、みたいな表示はあってもいいかもしれんが
スレ違いなのでこの辺で
2020/10/03(土) 18:31:52.94ID:IvIQIb1V
最近のソシャゲはいい感じでメーター出しとるやん
833デフォルトの名無しさん
垢版 |
2020/10/04(日) 10:09:30.72ID:WrglaOe5
確かにファイルのダウンローダー系のは残り時間表示が減ったり増えたりするな
2020/10/04(日) 10:12:08.66ID:8hNgrfXT
.NET5っていつから正式版使えるの?
俺の中の作りたいプログラムキューが結構溜まってきてるんだけど
2020/10/04(日) 10:43:30.53ID:k8KFSdqF
>>834
もうGAでサポートありでは?
2020/10/04(日) 10:47:17.82ID:lIfIRwKF
>>833
ファイルがたくさんあるときは、一つのデータに固めて送れば変な変化しないと思う
2020/10/04(日) 12:58:55.35ID:eUP8i5sY
>>835
GAという表現は使ってないね。まだRC1だけどGo Liveライセンス有り。
2020/10/04(日) 14:59:03.87ID:0bpWQCgk
>>837
なるほど、ありがとう。
2020/10/04(日) 17:41:26.92ID:OuBWvyJw
C#でアプリケーションを作ってVisualStudioInstallerをSetupファイルを作ってインストーラーを使ってます
アプリで参照しているdllのバージョンが上がってSetupファイルをビルドして再配布しようとしているんですが
どうも配布先で実行しても該当のdllだけ差し替わらないのです
VisualStudioInstallerの方では該当のdllを参照しているバージョンはプロパティで確認しても最新ですが
同名dllの該当ファイルはアップデート後も書き換わらず上書きされない状態です
何か解決方法ありますでしょうか?
2020/10/04(日) 17:43:55.75ID:OuBWvyJw
補足です
配布先で、一旦アンインストールしてSetupを実行する限りは
新しいバージョンのdllが入り問題なく動作しています
2020/10/04(日) 17:54:40.72ID:h2vHNKtG
>>839
該当のdllがファイルバージョンを上げ忘れてると思われる
msiは対象のファイルのバージョンが上がっていないと上書きしない余計な仕様があって、これに引っかかる(無視する設定は無いはず)
まずはdllファイルのプロパティからバージョン情報を確認して、新旧で変わっていないようなら配布元に更新をお願いするしかない
2020/10/04(日) 18:02:38.99ID:OuBWvyJw
>>841
レスありがとうございます

該当のdllのプロパティを除くと、製品バージョンは確かに新しいものですが
ファイルバージョンが1.0.0.0と触ってないような値です
おっしゃられるmsiがチェックするのは、このファイルバージョンという理解であっていますか?
そのメーカーさんが最近nugetでアップデートを配布するようになって
アップデートする度に配布先でバージョン不一致のトラブルで悩まされてるのですが
もしかしてこのせいなのかな・・・
2020/10/04(日) 18:10:42.63ID:lIfIRwKF
仮想環境入れてやってみろや
2020/10/04(日) 18:20:31.24ID:iE//6OtY
窓から投げ捨てろ
嫌ならGUID再発行して見るべし
2020/10/04(日) 18:29:28.20ID:OuBWvyJw
>>843
一応、仮想環境入れてやっておりまして、そこで調べていてdllのバージョンが変わってないのに気づいた次第です

>>841
同メーカーの別のアップデートされているdllのプロパティを見たら
ちゃんとファイルバージョンも製品バージョンと一致させて更新されていました
トラブルが起きたdllはファイルバージョン入れ忘れの可能性が高そうなので
メーカーさんに問い合わせてみます
2020/10/04(日) 19:29:22.35ID:h2vHNKtG
>>845
少し訂正
解決方法としては、REINSTALLMODEプロパティ※を変更する方法もあるそうだ
※VisualStudioInstallerのプロパティではない
結構手間がかかるみたいだから、dllを修正して貰うのが一番だと思うけど一応
2020/10/04(日) 19:59:56.73ID:7zaljJEm
どぼんさんのとこにREINSTALLMODEを設定する方法が書いてあるので
これが一番簡単だね
http://dobon.net/vb/dotnet/deployment/overwrite.html

これはどぼんさんのところには記事がないと思うが、
MSIのプロパティは外部ツールで手動でやらなくてもPostBuildEventで
自動的に変更する方法があって、ググれば出てくると思う。

しかしMSIってそんな仕様があったんかw
っていうかもうVS10年ぐらい使ってないんだけど
今MSの推奨するインストーラーって何なの?

MSIは廃止されるはずだったよね?
2020/10/04(日) 20:08:17.90ID:h2vHNKtG
>>847
そんなに単純じゃないからちゃんと調べて
2020/10/04(日) 20:53:10.83ID:7zaljJEm
>>848
何が?
2020/10/04(日) 21:15:52.12ID:h2vHNKtG
>>849
初回インストールと2回目以降で処理を変える必要があるのだけど、>>847のページからのリンク先に説明があったね
失礼しました

https://dobon.net/vb/dotnet/deployment/upgrades.html#section6
2020/10/04(日) 21:47:36.10ID:OuBWvyJw
アドバイスありがとうございます
とりあえずメーカーさんには問い合わせをだしつつ
簡単そうなOrcaを使ってamusにし、強制的にdllを上書きするようにしてうまくいきました
今回分は手動でmsi書き換え対応、あとはメーカーさんの対応待ちというところでひとまず解決です
ご教授いただき感謝です
2020/10/05(月) 02:38:37.53ID:nd84XqHd
>>847
msixかな
2020/10/05(月) 14:34:55.98ID:q4O9ogxl
ボタンクリックでpingを並列処理(guiでparallel.for)させてるのですが、並列処理が終わった後に何らかの処理をさせたいのですが、終わる前にさせたい処理が始まってしまうのは何故でしょう?
854デフォルトの名無しさん
垢版 |
2020/10/05(月) 15:16:41.19ID:e+L/idp9
終わるまで待たずに始めてるからだろう
2020/10/05(月) 16:03:32.02ID:q4O9ogxl
>>854
すいません、結果表示の所でデリゲートしてました。
デリゲートしてたら抜かされるんですね。
856デフォルトの名無しさん
垢版 |
2020/10/05(月) 17:21:36.72ID:yAAG+Ftq
やってること、機能の理解、用語の理解、みんなめちゃくちゃすぎて、まるでQiitaをみている気分だ
2020/10/05(月) 17:35:16.52ID:Xbvrw4me
デリケートだからな
2020/10/05(月) 17:41:37.83ID:gVc00iwv
class myDAT { 
 public int no;
 public double[] data = new double[5];
}
public static void Main(string[] args) {
 myDAT[] mydata = new myDAT[10]; //★
 for (int i = 0; i < 10; i++){
  mydata[i] = new myDAT();
}

クラスを配列にしたとき★の箇所の"myDAT[10]"を10固定じゃなく動的にしたいのですが
どうすればよいですか?
2020/10/05(月) 17:56:17.90ID:KVy+kNYk
普通に変数入れたらええやん
2020/10/05(月) 17:56:55.51ID:OgnTy5dE
コレクションじゃあかんの?
861858
垢版 |
2020/10/05(月) 18:34:00.09ID:gVc00iwv
最初[10]と宣言した後、[20]とかには・・・・変更できますか?
っと追加で質問してもいいですか?
2020/10/05(月) 18:37:48.75ID:nd84XqHd
>>861
普通の配列は固定長
可変長の配列が欲しいならList< T >
2020/10/05(月) 18:45:03.21ID:jLRpmu5w
Resize() があるけど、これは新しいarrayを作って中身をコピって置き換えるので
期待しているようなものとはちがうかもしれない
https://docs.microsoft.com/ja-jp/dotnet/api/system.array.resize?view=netframework-4.8
arrayは要素数が変わらないのが前提というか、そういう伝統なので
要素数が変わるのが分かっているのならコレクション系のものを使いましょう
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/collections
2020/10/05(月) 20:08:01.60ID:CqQ7ITSE
>>856
スマヌ…足を突っ込んだばかりで良く分からずに始めたもので…別スレ案件でしたか…
2020/10/05(月) 21:19:26.58ID:rQ89lJX/
>>858
static void Main(string[] args)
{
  const int defaultCount = 10;
  var count = defaultCount;

  for (int i = 0; i < args.Length - 1; i++)
  {
    var arg = args[i];
    if(arg == "-n" || arg == "/n")
      if (int.TryParse(args[i + 1], out count)) break;
  }

  var chars = new char[count];
  for (int i = 0; i < count; i++) chars[i] = (char)('A' + i);
  Console.WriteLine(new string(chars));
  Console.ReadKey();
}
2020/10/05(月) 22:04:35.42ID:ToydrsKO
質問です
イベントは、購読する側が寿命が短い場合自分で登録解除しないと開放されず、リークするのは分かるのですが、
イベントを発生させる側が寿命が短い場合はそのインスタンスをフィールドで持っておかないと
購読されていても途中で開放されてしまうのでしょうか
その場合、例えばコンストラクタでイベントを発生させるオブジェクトを受け取って購読するだけのような処理(以下)
public class Subscriber {
 public Subscriber(Publisher publisher) {
  publisher.ValueChanged += Publisher_ValueChanged;
 }
}
の場合、subscriberはpublisherを持っていないので、subscriberが生きている間にpublisherが開放されて購読も解除されるといったことは起こりますか?
これは設計が悪い?
2020/10/05(月) 22:23:53.32ID:rQ89lJX/
>>866
>subscriberはpublisherを持っていない
これが分かってるなら答えは自明でしょ
設計が悪いかどうかは何を実現したいか次第
でも普通は発行側の寿命を購読側に合わせたいことなんてあるのかなと思う。
2020/10/05(月) 22:36:15.65ID:ToydrsKO
>>867
ありがとうございます
UI(コントロール)のイベントを加工してロジックに伝えるアダプターのようなものを実現したいです
設計を見直してみます
2020/10/06(火) 22:21:36.32ID:0ZJ/y4Ey
パラメータをPOSTしてウェブサイトのHTMLソースを取得しています。
POSTするデータが普通の配列形式の方法は以前から知っているのですが、JSON形式でPOSTするサイトに出くわしました。
いろいろなウェブサイトを見てPOST自体はエラーせずにできるようになったようなのですが、レスポンスもJSON形式のデータしか取得できずに困っています。
欲しいのはウェブサイトのHTMLソースです。
どうしたらいいでしょうか?
2020/10/06(火) 22:21:52.52ID:0ZJ/y4Ey
   var jsonParameter = new JavaScriptSerializer().Serialize(new
   {
    hoge1 = new
    {
     hoge2 = new
     {
      fuga1 = "0",
      fuga2 = "1",
     },
     hoge3 = new
     {
      fuga3="3",
     }
    }
   });

   // リクエストの作成
   HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
   req.Method = "POST";
   req.ContentType = "application/json; charset=utf-8";
   req.Accept = "application/json, text/plain, */*";

   using (var streamWriter = new StreamWriter(req.GetRequestStream()))
   {
    streamWriter.Write(jsonParameter);
   }

   var httpResponse = (HttpWebResponse)req.GetResponse();
   using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
   {
    string result = streamReader.ReadToEnd();
   }
2020/10/06(火) 22:26:11.86ID:UOuIyfzj
にゅにゅにゅにゅにゅ〜
872デフォルトの名無しさん
垢版 |
2020/10/06(火) 22:26:56.84ID:3gNx1ZB7
過去ログ抜こうとしてるんかな
2020/10/07(水) 04:05:43.46ID:qlNjOdYh
curl, wget でも出来る。

Windows 10 なら、C:\Windows\System32\curl.exe
が入っている。
これは、PowerShell のcurl alias とは異なる

漏れは、VSCode の拡張機能、Rest Client を使ってる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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