X



ふらっと C#,C♯,C#(初心者用) Part146
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 9f0b-Fgt1)
垢版 |
2019/12/11(水) 22:12:11.28ID:d09CciDz0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part145
https://mevius.5ch.net/test/read.cgi/tech/1570446977/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
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
0591デフォルトの名無しさん (ワッチョイ 7f63-FqWS)
垢版 |
2020/01/25(土) 14:46:40.30ID:r9Vw3y6V0
>>583
使い道がないのはお前の存在も同じだから
中央線にでも飛び込んで死ね
0592デフォルトの名無しさん (アウアウウー Sa4b-2gyN)
垢版 |
2020/01/25(土) 14:56:41.64ID:GuCewVbja
プログラミングに限らずどのフィールドでもそうだけど、
イキってる系の連中の主張は話半分に聞いておくのがいいと思うよw
0593デフォルトの名無しさん (ワッチョイ 5f01-oRbG)
垢版 |
2020/01/25(土) 15:17:19.02ID:m3Nt4oA+0
>>583
条件文をマッピングテーブルで置き換えるという古典的なリファクタリング方法の一つ
どちらかが常に優れてるわけではなく状況に応じて選択するもの

C#のバージョンや分岐の数によっては
コンパイラがswitch文をdictionaryのlookupに変換してる
0596デフォルトの名無しさん (ワッチョイ 5f01-oRbG)
垢版 |
2020/01/25(土) 18:16:56.04ID:m3Nt4oA+0
>>594
Roslynから変わったのは文字列で分岐される場合のみの話

文字列比較でhash tableをlookupするんじゃなく
数値比較で事前にハッシュしたsort済みarrayをlookupするようになってる
細かい部分を抜きにすると数値をキーにしたSortedDictionaryのlookupと同じ
でこういうのは今の>>583には不必要な知識
0597デフォルトの名無しさん (アウアウウー Sa4b-kxbL)
垢版 |
2020/01/25(土) 22:26:55.47ID:wDceYoyFa
流れよく分かんないんだけど
つまりenumで分岐して処理呼び出す場合はswitchと配列のどっちが何倍くらい速いの?

public static int Execute(this Test type, int value){
 // 無難にベタ書き
 switch(type){
  case Test.One: return Method(value);
 }

 // 配列からメソッドを呼ぶ
 return methods[(int)type](value);
}

こんな風にenumに処理持たせてやりたいんだ俺
0601デフォルトの名無しさん (ワッチョイ 0763-Lndp)
垢版 |
2020/01/26(日) 00:22:55.28ID:P1M2Ekec0
配列はちゃんと理解してないと境界値チェックが入って意外に遅くなることがあるよ
だいたい気にならんレベルだけど競技プロとかやるようなら結構影響してくる
0602デフォルトの名無しさん (アウアウウー Sa4b-2gyN)
垢版 |
2020/01/26(日) 00:30:35.09ID:1Qgc/rXOa
>>597
仮に配列使う方が効率的だとしてもenumの値に依存するような実装は論外でしょうw
やってはいけない、の見本みたいなもの
0603デフォルトの名無しさん (ワッチョイ 0763-Lndp)
垢版 |
2020/01/26(日) 01:00:25.24ID:P1M2Ekec0
俺もCから入ったから配列にして呼び出す処理は昔はよく書いた
enumを配列の添字にするのもよくやった
処理速度気にする開発することは多少あるけど基本的にどっちもC#ではやらんな

enumに処理持たせたいって要件ならそれぞれの値ごとにclass作って継承させるかな?
詳細仕様次第ではあるけど
そんなんめんどくせってなるようなレベルならぶっちゃけどっちだって変わらん話なんだから好きにすれば?って思う
0605デフォルトの名無しさん (アウアウウー Sa4b-2gyN)
垢版 |
2020/01/26(日) 02:46:23.95ID:1Qgc/rXOa
過去に散々既出だと思うけどdelegate自体がもともと重いんだろうね。
単なる関数ポインタとは違うから
0608デフォルトの名無しさん (アウアウウー Sa4b-FkkX)
垢版 |
2020/01/28(火) 19:46:47.61ID:eMbEeMz/a
>>585
内部的なロジックミスにならんようにすればいいだけ
プログラムが長大になる原因はテキストを利用しないからだと思いますよ
1万行のプログラムが果たしてそれだけ必要なのか?って思います
0609デフォルトの名無しさん (アウアウウー Sa4b-FkkX)
垢版 |
2020/01/28(火) 19:48:39.10ID:eMbEeMz/a
>>589
俺も思いますね
というか文法的な事でももっと改善してよって事多いですよね!

0<input<&&input<5→うぜー
0<input<5→これでいいだろうが
0611デフォルトの名無しさん (アウアウウー Sa4b-FkkX)
垢版 |
2020/01/28(火) 20:54:23.00ID:eMbEeMz/a
>>610
何で?ググるの面倒なので
0612デフォルトの名無しさん (ワッチョイ 5f52-zhKY)
垢版 |
2020/01/28(火) 20:56:03.48ID:ciqR13vi0
>>609
もうID変わってるだろうけど>>589なのだが、皮肉のつもりで言ったのが通じてないようだ。
switchの用途として>>583みたいなのでいいのではなんて言うのは圧倒的に経験が少ない証拠だろう。ちょっと慣れて自分でコードを書けるようになればそんなバカな発想はしなくなるよ。
そんな段階で>>609みたいな文法にケチつける前に、なんでその文法が必要なのか、何でそういう形式になってるのか理解する努力をしなよ。
C#のような後発の言語が生まれる過程では、君みたいな初心者が考えるようなことはとっくの昔に議論済みでそれらを踏まえた上で今の形がある。疑問を持つのは多いに結構だけど、往々にして言語の仕様が悪いのではなく、単に自分が無知なだけだから。
0616デフォルトの名無しさん (ワッチョイ 47a7-zUmo)
垢版 |
2020/01/28(火) 21:23:16.25ID:q5l9JsKl0
JavaScriptとPHPに慣れたら多次元連想配列無い言語がオワコンに見えるようになった
しかし

var obj = getExExBigData();

↑超絶巨大データ(フォーマット・ドキュメント不明)
勘弁してくれよってのも事実
c#の未来はどうなるのか?
0617デフォルトの名無しさん (ワッチョイ 7dda-mRwA)
垢版 |
2020/01/29(水) 04:42:05.41ID:9DDwBhYq0
DataGridViewで、Cellに不正な値が入力された場合はフォーカスの移動を禁止するようにしたいのですが、
以下の方法では、移動してしまいます。
移動させないようにするにはどうすればよいでしょうか。

private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (String.IsNullOrEmpty(this.dataGridView[e.ColumnIndex, e.RowIndex].Value as string))
{
e.Cancel = true;
}
}
0621デフォルトの名無しさん (ワッチョイ 667b-UZ8j)
垢版 |
2020/01/29(水) 17:28:02.98ID:HGA4G3kr0
>>617
この人だけじゃないけど、まずこういうところに質問投げる前に分岐がきちんと機能しているか確かめた方がいい
それの場合は this.dataGridView[e.ColumnIndex, e.RowIndex].Value as stringの内容確認
直接の回答としてはhttp://dobon.net/vb/dotnet/datagridview/cellvalidating.htmlを参考にして書き直せ
解説を入れると
DataGridViewでセルに直接値を入力した場合はフォーカスが変わるか.EndEdit()などしないと入力された値が反映されない
そのイベント自体そのために用意されているはず
だからそのメソッドの中で「dataGridView[e.ColumnIndex, e.RowIndex].Value」は入力する前のセルの値で
入力された値を参照したかったら「e.FormattedValue」を見ないといけない
0622デフォルトの名無しさん (アウアウウー Sa21-0Ybi)
垢版 |
2020/01/29(水) 20:53:31.76ID:2z1gsFLxa
>>612
この言語って文字列操作に特化してるからテキストを利用するのって
全然普通だと思いますけどね。

後0<input&&input<10じゃないとだめなのは、何となくですが
数式はポーランド記法によって処理されることに関係しますか?
分かりませんけど。
0627デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/29(水) 21:45:33.03ID:Bye/BSTsa
>>623
それは出来ない理由にはなってないんじゃないの?
あんまり自信はないが、

評価結果が数値 < 評価結果が数値
評価結果が数値 < 評価結果が数値 < 評価結果が数値

両者を別の演算として区別することはやってできないことはないはず。
0628デフォルトの名無しさん (ワッチョイ 4a52-G6DY)
垢版 |
2020/01/29(水) 21:59:18.87ID:iDUguYS70
>>627
既存のルールに新たに3値を並べて比較する構文を追加するとしたら、既存のルールを維持したまま、新たなルールに伴う考えうる様々な組み合わせについて明確で一貫性や完全性のあるルールを作らなければならないが、かなり複雑なものになるだろう。
やってやれないことはないにしても、デメリット(手間と複雑さや混乱)に見合うメリットがないから、ほとんどの人に望まれていないし、言語仕様として追加されることもないだろう。
0630デフォルトの名無しさん (アウアウウー Sa21-0Ybi)
垢版 |
2020/01/29(水) 22:18:04.76ID:2z1gsFLxa
<・・・小文字だからC#の言語に従う
<・・・大文字なので特別に数学的記法とみなす

これでどうだろう
0633デフォルトの名無しさん (アウアウウー Sa21-0Ybi)
垢版 |
2020/01/29(水) 22:34:24.68ID:2z1gsFLxa
>>631
#defineか?
0634デフォルトの名無しさん (ワッチョイ 0a1b-jgyw)
垢版 |
2020/01/29(水) 22:39:08.64ID:7ZbwpcWy0
>>627
そりゃ実装すれば何だって可能だが、論理的な矛盾になるから無理なんだよ
演算子の優先順位と結合則で二項演算するのが原則なのに、そこを横紙破りしてしまったら誰も付いて行けない
0639デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/29(水) 23:06:16.31ID:Bye/BSTsa
>>634
文脈依存キーワードと何も違わないと思うよ
0641デフォルトの名無しさん (アウアウウー Sa21-0Ybi)
垢版 |
2020/01/29(水) 23:24:37.56ID:2z1gsFLxa
>>637の答えがほぼ>>638ってことで良いですか?
また便利な情報を得てしまったわ
0644デフォルトの名無しさん (ワッチョイ 6abd-0Ybi)
垢版 |
2020/01/29(水) 23:57:35.84ID:fVMIrPAj0
C#のターゲットフレームワークってどういう仕様なんでしょうか?
わかりやすいサイト教えてもらえると助かります。

exe 4.5 dll 3.5 
→ ビルドできるからok?
exe 3.5 dll 4.5 
→ コンパイルエラー
  ただし動的に読み込んだ場合は動いてるっぽい?
0647デフォルトの名無しさん (ワッチョイ 5942-unxX)
垢版 |
2020/01/30(木) 14:25:04.44ID:XrVMMkZO0
visual studio2019 30日たったら使えなくなったんだけど
無料じゃないの?
PC替えるまで以前のバージョンはずっと使えてたんだけど
2019は違うの?
無料版使い方おしえてください
0648デフォルトの名無しさん (ワッチョイ 3d2d-XhTL)
垢版 |
2020/01/30(木) 14:27:27.39ID:UIStC4VF0
ログインすれば無料のまま使えるよ
0650デフォルトの名無しさん (アウアウエー Sa52-/fp1)
垢版 |
2020/01/31(金) 03:22:54.75ID:A50vozAla
ボタンを押すと計算開始して結果をテキストボックスに表示する処理(数十秒かかります)
まずボタンを押してその処理がまだ終わってないうちに、またボタンを押すと次の処理がどんどん溜まっていくのですが、
これを防止する方法はないでしょうか
(例えばついボタンをダブルクリックをしてしまった時に1回表示してからまた同じ処理に入ってしまう)

ボタン押したら結果が表示されるまで全部のボタンのenabledをfalseにする処理入れてみたのですがこれではうまく回避できませんでした
0655デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 13:16:14.42ID:59NEldNla
>>653
何も難しくないよw
>ボタンのenabledをfalseにする処理入れてみたのですがこれではうまく回避できません
これは「重い処理」の後にそれをやってるからそうなる

ボタンのイベントハンドラで真っ先にEnabled = falseにすればそんなことは起こらない。
0657デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 14:58:26.86ID:59NEldNla
>>656
はいはい頭悪そうワロタw
0658デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 15:16:23.75ID:59NEldNla
なぜかコードが貼れないので割愛するけど、実際にやって>>655が正しいことを確認した
当たり前の話だがw
0661デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 15:25:15.63ID:59NEldNla
つくづく馬鹿な奴w
偉そうに他人様に命令する前に自分は実際にコード書いて確認したのかとw

まあ普通こんなレベルの話は確認するまでもないけどね
0662デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 15:41:48.86ID:59NEldNla
どうでもいいけど

(1) Thread.Sleep
(2) Task.Delay
(3) ビジーループ

いずれのダミーを使ってもイベントハンドラの頭でEnabled = falseとすることで
ボタン連打によるイベントハンドラへの意図しない「再入」を抑止できることを確認した
0663デフォルトの名無しさん (ワッチョイ 3d2d-XhTL)
垢版 |
2020/01/31(金) 15:43:04.01ID:xcV7YFLC0
イベントを呼び出すのが毎回同じスレッドなんだから、>>655の方法で完璧に止まると思うけどな
0664デフォルトの名無しさん (ワッチョイ 5d2f-KoMo)
垢版 |
2020/01/31(金) 16:25:21.45ID:6LQhDtiB0
>>662
>(例えばついボタンをダブルクリックをしてしまった時に1回表示してからまた同じ処理に入ってしまう)
再入が問題じゃないって気づけよ
タイミングによってクリックイベントが2回キューイングされることがあるのが問題なんだよ
0665デフォルトの名無しさん (ワッチョイ 6663-3Mgd)
垢版 |
2020/01/31(金) 16:55:17.80ID:rVrHfFzc0
ガイジに何を気付けって?
お前も方面が違うだけで同じガイジだな
0666デフォルトの名無しさん (ワッチョイ 667b-UZ8j)
垢版 |
2020/01/31(金) 17:43:12.90ID:Wmzh3pBZ0
>>650
イベント処理に入る前にイベントハンドラを外しておくといい。button1.Click-=button_Clickみたいな感じで
ただValueChangedとかならともかくボタンで普通はやらないと思う。「enabledをfalse」になっているボタンでイベントが実行されるのはおかしい
計算処理を非同期に渡して計算が終わらないうちにEnabledを復帰させるとか変なことやっていないか?
EnabledでなくVisibleをfalse->trueに変えてみて確認したら?
動作に関しては他の人がいろいろ言っているようだけど一度ミニマムコード作って自分で動作確認するのが一番確実
0667デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
垢版 |
2020/01/31(金) 18:37:18.25ID:y3M2GGQ20
private void button1_Click(object sender, EventArgs e) {
button1.Enabled = false;
//重い処理
button1.Enabled = true;
}

上のコードでもユーザーが最初のクリックをしてから
イベントハンドラが呼ばれてEnabled = falseが設定されて
さらにそれからクリックできなくなるまでの間に
複数回のクリックが発生する可能性がある
(Windowメッセージのキューに溜まる)

だからEnabled = trueに戻す前に
溜まったクリックイベントを流してやる必要がある
0668デフォルトの名無しさん (ラクッペ MM6d-3Mgd)
垢版 |
2020/01/31(金) 19:04:25.31ID:AyZqOEveM
難しすぎて分かんねえよ兄貴
0669デフォルトの名無しさん (ワッチョイ ea01-CWn9)
垢版 |
2020/01/31(金) 19:05:05.53ID:EEAl6aZb0
>>663
イベントは非同期でキューイングされるから>>655では不完全
アマチュアレベルとか自分しか使わないならそれで良いけど不特定多数が使うようなソフトだとダメダメ
ID:59NEldNlaはコード書いて確認する姿勢は良いけど確認がザル過ぎる
てか、アプリ作ってたらこの手の経験はしてるはずなんだが…
0671デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 19:29:46.30ID:59NEldNla
>>667
そんな必要ないってば...
君がOSのコード書く立場になってよく考えてよ。
君はメッセージをエンキューする時にウィンドウが無効化されているかどうか
ノールックでやっちゃうような間抜けなコード書くの?w

そんなのありえへん
0676デフォルトの名無しさん (オッペケ Srbd-Y6bJ)
垢版 |
2020/01/31(金) 20:12:38.30ID:J9WtEN9Ir
今日も仕事で新型コロナウイルスなんて騒ぎすぎだという老人の独演会を30分聞かされた
対策も必要ない死ぬ人は死ぬでいいじゃないかと言う話

老害しなないかな
0677デフォルトの名無しさん (ワッチョイ 3d2d-XhTL)
垢版 |
2020/01/31(金) 20:19:21.81ID:xcV7YFLC0
キューが溜まる派は、button1.Enabled = false;なし、かつ、非同期処理なしにすれば簡単に再現コードができるんだろう
でも現実には再現しないから困ってんだろうな
0678デフォルトの名無しさん (ワッチョイ 3d2d-XhTL)
垢版 |
2020/01/31(金) 20:19:22.13ID:xcV7YFLC0
キューが溜まる派は、button1.Enabled = false;なし、かつ、非同期処理なしにすれば簡単に再現コードができるんだろう
でも現実には再現しないから困ってんだろうな
0679デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 20:31:30.36ID:59NEldNla
ちなみに念のためこんなのもやってみたが

//button1をクリックした後button2を連打せよ
private void button1_Click(object sender, EventArgs e)
{
  Thread.Sleep(5000);
}

private void button2_Click(object sender, EventArgs e)
{
  MessageBox.Show("Button Clicked !");
}

Win32に詳しくないので理由を与えることが出来ないけど、
この場合もメッセージボックスは1度しか表示されない
0680デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 20:46:38.12ID:59NEldNla
>>676
完全スレ違いだけどそれはその老害の言ってることの方がただしいw

専門家はたいしたリスクないから騒ぎすぎだと言ってるのに
どっかの怪しいネットde真実クンの被害妄想を真に受ける奴がどうかしてるよ

こういうの認知バイアスって言うんだけどさ
0681デフォルトの名無しさん (オッペケ Srbd-Y6bJ)
垢版 |
2020/01/31(金) 21:00:47.10ID:J9WtEN9Ir
一流の専門家wとWHOと各国の対応見る限り
誰かの方が認知バイアスかかってると思う

世の中でこういわれてるけど逆の方に○○と言うのを言って俺スゲーしたいのが老害
0682デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 21:06:43.84ID:59NEldNla
>>679
いや待て、ひょっとしてMessageBoxがフォーカスを奪うのが関係しているのかと思って
Console.WriteLine("Button Clicked !");

に変えてみたらなんと複数回表示されるなww
何てこったw

この現象は以下のコードで回避できた
private void button2_Click(object sender, EventArgs e)
{
  if (button2.Enabled)
  {
    button2.Enabled = false;
    Console.WriteLine("Button Clicked !");
  }
  Application.DoEvents();      
  button2.Enabled = true;
}
0684デフォルトの名無しさん (アウアウウー Sa21-G+gO)
垢版 |
2020/01/31(金) 21:09:59.26ID:59NEldNla
>>681
WHOは声明で過剰反応するなと言ってる。
多くの伝染疾患の専門家の意見も同じ

各国政府の対応はよく言えば安全牌、悪く言えば役人や政治家の保身だね
テールリスクとしてはヤバいことになる可能性は確かにゼロではない。
その場合に誰も批判されたくないしね。
費用負担するのは納税者であって役人でも政治家でもないし
0689デフォルトの名無しさん (ワッチョイ 6a59-/fp1)
垢版 |
2020/01/31(金) 23:16:44.01ID:1nDsQqma0
引数でリスト渡すけど要素を変更して欲しくない時って結局どうすりゃいいの?
Immutableは使えない環境の場合

ReadOnlyCollectionは引数の型としては想定してないみたいだけど、キャスト防ごうと思ったらこれしかないよね?
■ このスレッドは過去ログ倉庫に格納されています

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