X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ドコグロ MM2f-DHp5)
垢版 |
2019/07/16(火) 15:36:23.74ID:i1fbuZ/pM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part143
https://mevius.5ch.net/test/read.cgi/tech/1558002486/

■情報源
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/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0291デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 12:50:25.25ID:vQM55/5Pa
あと、そもそもメソッドのデザインとして
例外を投げる代わりにout引数か戻り値でnull(あるいは例外オブジェクト)
を返すって選択肢もあるから、そこで迷うってケースもないことはないけどね。

呼び出し側でいちいちtryブロックを書く必要があるのは鬱陶しい、
って需要もあるから
0292デフォルトの名無しさん (アウアウエー Sae3-SXVW)
垢版 |
2019/08/16(金) 12:59:06.06ID:mZqFzvyqa
キモいRuby厨はスレ追い出されてC#スレに引っ越した
0298デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 16:34:34.90ID:vQM55/5Pa
>>294
TryParse的な物を想定して書いたけど>>291じゃ端折り過ぎて意味不明だね申し訳ない
戻り値nullは(メソッドじゃないけど)as的な物を想定

例外オブジェクトをout変数で返すのはたぶんやってる人はほどんどいないけど、
tryブロックが嫌いなら場合によっては便利かも
0301デフォルトの名無しさん (スフッ Sd33-oOLq)
垢版 |
2019/08/16(金) 17:53:53.26ID:9StEh2pLd
例外はログ拾う時に絶望したくないから適切に投げるなぁ。
どうでも良いという論調は作るだけで保守しない人の発想みたいで少し嫌かもしれん。
アプリケーションのロジックをバッチでも使いたい、みたいな時に、毎度戻り値を検証するんじゃなくてバッチの一連のトランザクション自体落としちゃいたい時に二度手間な気がするんだが、その辺どう作ってるんだろう?
0305デフォルトの名無しさん (ワッチョイ 2b2d-QMAU)
垢版 |
2019/08/16(金) 23:41:19.50ID:AADFbgN80
プログラム板住人は煽られるとすぐムキになるから、転載アフィブロガーの種まきに最適な場所になっちまってんだろう
0308251 (ワッチョイ 132c-BF++)
垢版 |
2019/08/17(土) 02:31:35.40ID:fYRni8gj0
Ruby on Rails では、作者のDHH が、2014年に「TDD(テスト駆動開発) is dead」と発言して、
ユニットテストから、Selenium を使った、E2E(end to end)テストへ移行した!

それで、Rails 6 では、
DHH のいるBasecamp 社から、GitHub へ移籍した、Eileen Uchitelle によって、
テストを複数CPU コアで、並列実行する機能が実装された!
0315デフォルトの名無しさん (ワッチョイ 3990-osyD)
垢版 |
2019/08/17(土) 19:21:30.41ID:lWdyvSQl0
エスパーすると、ASP.NETがあるがデスクトップアプリがメインだったC#よりまだJavaスレの方がまだselenium詳しそうなやつ多そうだから、せめてjavaスレ行けって事だろ。
ほんとこれぐらいもエスパーできなきゃアホやろ
0316デフォルトの名無しさん (ワッチョイ 1342-NA/o)
垢版 |
2019/08/17(土) 21:04:14.52ID:qUgpJGd70
それなら「Rubyスレに行け」が流れ的に当然であるのに何故か「Java」
彼にとってサーバーサイドの言語は全部Java
ほぼ「ゲーム機を全部ファミコンと呼ぶおかん」状態と考えるのが妥当と思われる
0319デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/17(土) 22:34:51.12ID:8QP5rwWB0
KeyValuePair c=func1();
cをnull判定できないんですがどうしたらいいですか?
Myclass c=func2();
の場合、null判定できます。

クラスは出来て、KeyValuePairは出来ないのは何故ですか?
0328251 (ワッチョイ 132c-BF++)
垢版 |
2019/08/17(土) 23:47:28.51ID:fYRni8gj0
そりゃ、C#・Java は、静的言語で同じだから、
静的言語になれているなら、Selenium の話は、Java で聞くのがよい

動的言語なら、Ruby, Python で聞けばよい

Seleniumデザインパターン&ベストプラクティス、2015、オライリー
これは、Rubyでテストを書いた本

ウェブ系・HTML は基本、Ruby。
まあ、Java のSelenium の本も出てるけど

Java は、Spring Boot か?
動的言語のGroovy じゃないのか?
0332デフォルトの名無しさん (ワッチョイ b32d-bnMF)
垢版 |
2019/08/18(日) 13:41:29.71ID:+4zzAGlV0
WinForms で質問です。
標準の Form から継承した MyForm を abstract で作りました。
この MyForm は abstract なのでデザインで開けません。
(ここまでOK)

MyForm をもとに SubForm なるものを継承して作りました。
これには abstract は付けていないのですが、これもまたデザイナで開けません。
あまりに残念すぎる挙動だと思うのですが、これは仕様でしょうか。
0334デフォルトの名無しさん (ドコグロ MM63-h434)
垢版 |
2019/08/18(日) 13:45:24.63ID:jp7+H4+aM
.NETではフォームの継承は推奨されていません
共通化したい場合はユーザーコントロールを使用してください
なお、WinFormsは既に開発が終了しており、今後改善される可能性はありません
0335デフォルトの名無しさん (ワッチョイ b32d-bnMF)
垢版 |
2019/08/18(日) 13:51:36.77ID:+4zzAGlV0
やっぱりですか。

デザイナが使えないと不便なので、MyForm 側にabstract 付けないで、virtual 定義しているのですが
継承先で「いじり必須」なものを忘れてしまうため、本当は abstract したいのですが・・

WinForms の開発が終わったって、世の中、VS で弄られてるソースの9割は WinForms だと思うんですけどねぇ
0337デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/18(日) 14:04:52.38ID:APnDI8yA0
visualstudioを利用しているのですが最近デバッグ時にフォームアプリを動かすと
System.InvalidOperationException: '有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'hoge' がアクセスされました。'
の様なエラーが出て止まる様になりました
しかし出来たプログラムをふつうに動かす分には異常ありません
今まで作ってきた問題のなかったすべてのバージョンでこの様な現象が起こっています
これは何が原因でしょうか?
0338デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/18(日) 14:21:30.88ID:/RKifLkIa
>>335
騙されたらあかんw

継承後のフォームもちゃんとデザイナで開けるし
コントロールを追加したりいろいろ出来るよw

フォームの継承なんて10年以上やってなかったが
今実際試して確認したから間違いない
0343デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/18(日) 17:55:07.39ID:/RKifLkIa
>>340
なるほど。

abstractにこだわる必要が本当にあるのかなとも思うけど、
何ならコンストラクタをprotectedにすりゃ機能的にはほぼ同じだね。
(abstractメンバーはもちろん書けないけど)

これならそういう不具合は起こらないっぽい
0344デフォルトの名無しさん (ワッチョイ d9da-QMAU)
垢版 |
2019/08/18(日) 18:33:20.50ID:5+yaTAKE0
蕎麦とラーメン間違えるとかもう簡単ケータイにしたほうがいいんじゃね。
たぶんVPNとか使わわんだろうし。
俺もIntelだからもう日産もゴーヤチャンプルーも同じ味付けで食える。
0345デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/18(日) 21:26:51.68ID:37ku1J740
Keyvaluepairの.Keyをnull判定したら
nullできました。

構造体だけどnull判定できましたが??
keyvalueopair本体はできないけど
KeyまたはValueはnull判定できました。

何故???まぁ良かったんですけど
0346デフォルトの名無しさん (ドコグロ MM63-h434)
垢版 |
2019/08/18(日) 21:29:43.77ID:jp7+H4+aM
それはKeyプロパティが返した値をnull判定しているのであり、KeyValuePairが構造体であることは全く関係ない
直行する問題の分離ができない人はプログラミング向いてないよ
0349デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/18(日) 21:37:51.98ID:37ku1J740
>>346
ようはList<KeyValuePair<string,double>>

"レタス" 100
"キャベツ"120
"トマト" 120

こういうリストで、ピーマンって探すと
Keyがnullになってくれたので、良かったです。
KeyValuepairがnullじゃないのが不思議ですが
null判定できてよかった
0350デフォルトの名無しさん (ワッチョイ a922-x+FD)
垢版 |
2019/08/18(日) 21:46:55.40ID:DxNAHPOT0
構造体はnullにできないと何度も言われてるのになんで不思議に思うんだろう
ピーマンを探すときのList.FirstOrDefault()の戻り値は
KeyValuePairをデフォルトコンストラクタで初期化したものだよ
0351デフォルトの名無しさん (ワッチョイ 8163-Lgl9)
垢版 |
2019/08/18(日) 21:48:35.09ID:FVnfIX0p0
>>349
keyvaluepairは構造体
構造体にはnullが存在しない
構造体にnullが存在しないことと構造体の中身がどうなっているか関係ないので、中身がクラスであるならnullにもなりうる
君がやったことは構造体ではなくその中身がnullかどうかのチェックしただけ
構造体とクラスの違いが理解できないなら今後も躓くのでkeyvaluepair含め他の構造体の使用も封印したほうがマシ
まぁintだって構造体だから全部避けるなんてことは無理だけど
0358デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 10:35:33.11ID:VzpEDBAc0
Form1以外のクラスでlistboxに入力したいのですが
他クラスで入力する方法って望ましくないのですか?
他に方法はあるのでしょうか?
0362デフォルトの名無しさん (スフッ Sd33-oOLq)
垢版 |
2019/08/19(月) 11:52:38.83ID:2nNI8r3od
バスケットが空なのと、バスケットにnullが入ってるのは違うんじゃねえかな?
参照型は瓶と水みたいな感じで、瓶だけ持って帰ってこれても、
値型みたいな、それ単体が実体のものは言うとおり松茸みたいなもんで、取りにいってなかったら何も持って帰って来れないと思うが。

無理矢理何か持たせるのがFirstOrDefaultで、坊主だった親父がとりあえず当たり障りのないものを魚屋で買って帰るようなもんでは?

FirstOrDefaultは無かったときにnullを返すためにあるんじゃないんだから。
ちゃんとチェックしてから取ったほうがいいと思うよ。
0366デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 13:23:05.09ID:VzpEDBAc0
>>358なんですが誰かお願いします
別クラスでテキストボックスとかいじるのって普通のやり方ではないんでしょうか?
0368デフォルトの名無しさん (ワッチョイ 2b7c-gphu)
垢版 |
2019/08/19(月) 13:34:49.71ID:eHF4rC4A0
別クラスでいじるって、
class Hoge {
public void SetText(TextBox textBox, string text) { textBox.Text = text; }
}
みたいな?
コントロールを外部に渡すというのはまあ一般的ではないな
0369デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 13:36:41.01ID:VzpEDBAc0
>>359
返してくださったのはありがたいんですが
その3つの単語全て知らなくて、ググってみても高度すぎてわかりません
コンソールアプリケーションをフォームアプリケーションに移植しようとしているのですが
Console.Write()で出力していたものをlistBoxやtextBoxに出力したいのですが出来なくて困っております
どうかアドバイスお願いします
0371デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/19(月) 13:56:34.58ID:eDOlyF+5a
>>369
■ 選択肢1
FormにAddToLogみたいなメソッドを作ってConsole.WriteLineを
LogForm.AddToLog

■ 選択肢2
Console.WriteLineを、記録する文字列を通知するイベントに置き換える。
Formはそのイベントを拾ってListBoxに表示

後者を推奨
基本的にUIの参照を握らせるのは悪い手
0372デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 14:04:49.07ID:VzpEDBAc0
移植したいコンソールアプリ
class Program
{
static void Main(string[] args)
{
var op = new Output();
op.MainProcess(400);

Console.Read();
}
}


public class Output
{
public override int MainProcess(int count)
{
for (int col = 0; col < count; col++)
Console.Write(col);
}
}
0373デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 14:06:13.39ID:VzpEDBAc0
作ってみたフォームアプリ
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var op = new Output();
op.MainProcess(400);

}

}


public class Output
{
public override int MainProcess(int count)
{
for (int col = 0; col < count; col++)
listBox1.Items.Add(col);//←ここが動かない
}
}

こんな感じです
>>371
ありがとうございます。さっそく試してみます
0374デフォルトの名無しさん (ワッチョイ f12c-RZ8Y)
垢版 |
2019/08/19(月) 15:32:03.08ID:ERfcd1se0
なんでいきなりバックグラウンドワーカーが出てきてるか知らんけど、ドゥーワークは別スレッドで実行する内容を記載するところで、UIスレッドにアクセスしたらダメ→コントロールを触ったらダメ
リストボックスにアクセスしたかったらリポートプログレスもしくはコンプリートでUIスレッドにマーシャリングしてから
0375デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 16:32:24.93ID:VzpEDBAc0
簡略化して書いていますが凄い長い計算なので計算中でもプログラムが反応する様にbackgroundWorkerにしています
backgroundWorkerかでなくとも、他クラスからフォームをいじるということが出来なくて困っています
0377デフォルトの名無しさん (ワッチョイ 8b7b-Xlup)
垢版 |
2019/08/19(月) 17:49:40.07ID:VD+/iXFd0
>>375
1.他のフォームからコントロールを操作する
https://dobon.net/vb/dotnet/form/accessanotherformdata.html
2.BackgroundWorkerからコントロール(UIスレッド)を沿操作する
https://dobon.net/vb/dotnet/programing/progressdialogbw.html またはInvoke
今の段階では1+2をやりたいんだよね

設計的なものに口だすのは良くないけど参考までに
>凄い長い計算なので計算中でもプログラムが反応する様に
ListBoxの一つのアイテムごとに時間がかかるのならMainProcessでループで一気にAddせずに
BackgroundWorkerの中で「計算実行→ReportProgressで別フォームListBoxにAdd」をループさせてもいいんじゃないの
0380デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 20:31:39.57ID:VzpEDBAc0
Invoke調べてみました。いけそうな気がしますが書き方が難しいです
上記のコードの場合どのように記述すれば良いのでしょうか?
0382デフォルトの名無しさん (アウアウカー Sa15-cJb6)
垢版 |
2019/08/19(月) 20:46:44.95ID:cJsYlnhia
パッと見で適当だけど、formにコントロールの変更記述して、コールバック登録してtaskはしらせればいいの違うのか?invokeは当然
0384デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/19(月) 22:54:50.46ID:aQCsW5pK0
doubleって整数のほうに偏りがあったら
小数部分は短い精度になるんですが、これ何とかなりませんか?
doubleは精度高いから小数点第5位とか精度余裕だろwwwwwwwwwww

989〜〜〜132.1235212596  算出結果
989〜〜〜132.1235312314 正解

え???????????
ちょwwwwww

助けてください
0385デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/19(月) 23:06:59.10ID:eDOlyF+5a
>>384
何を言ってるか人に分かるように書かないと誰も答えようがないよw

一般論として、演算誤差を累積させずに
演算可能かどうかはどういう演算をしてるかによるので、
具体的な処理が分からないと何とも言えん
0390デフォルトの名無しさん (スププ Sd33-/7bP)
垢版 |
2019/08/20(火) 00:07:25.79ID:VMXKYR4od
Form1, Form2, CounterForm があります。

CounterForm にカウントを表示して、0 になったら、Form1 か Form2 のメソッドを実行するにはどうしたら良いでしょうか?

やりたいこと
5. 4. 3. 2. 1. 0 と表示 → form1.DoSomething();

CounterForm と Form1 の部分はできているのですが、
複数class間で通知する方法がよくわかりません。
■ このスレッドは過去ログ倉庫に格納されています

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