18/04/06 17:40:50.10 oKXVP34zM.net
(*゚∀゚)v2get!
3:デフォルトの名無しさん
18/04/06 18:51:49.77 +Q3Wd1R20.net
ワッチョイ付きGJ
4:デフォルトの名無しさん
18/04/06 22:54:25.33 e2Dy7HRM0.net
前スレ>>993, >>998
例外が発生しないようなコードを書くべきというのはそのとおりだと思いますが、例えば
ファイルパスが適切であることを確認してファイルが存在することも確認して、その上で
オープンしようとしてもそのタイミングでファイルが消されている、といった状況だと例外が
発生しますよね
流石にそういうケースでは例外で止めるべきだというのも一つの考え方ですが、それを
検出して処理を戻したいケースもあるだろう、と思っての質問でした
5:デフォルトの名無しさん
18/04/06 23:04:09.92 mLoQW3Pc0.net
>>4
誰かが編集中なときもあるし
そもそもぶっ壊れてるときもあるし
アプリの動作も含めて仕様を決めないとどうしようもないじゃん
6:デフォルトの名無しさん
18/04/06 23:16:26.79 5BPKzXhXa.net
まあ、最初から言ってるように、抽象的な質問には抽象的な答えしか返しようがないw
例外に対処するイディオム的な物を教えてくれ、と言ってるように聞こえるけど
そんなものはないとしか...
7:デフォルトの名無しさん
18/04/07 04:26:23.93 1UMv7o170.net
なかなか意図するところが伝わってないのですが、「例外処理をループの中に閉じ込めて、
例外が発生しなかった場合だけループを抜ける」という書き方を知りたかったのです
処理の内容とかはどうでも良くて、ループの囲い方とその抜け出し方を
なので、以前レスいただいたように、whileで無限ループを作って、tryブロック内にbreakを
置いてループを抜ける、という回答で私には十分でした
試してみれば一発で分かる話だったのですが、tryブロックから外側のループを直接抜ける
ことができると思っていなかったので、それに気づかなかったということです
皆様お付き合いいただいてありがとうございました
また質問をした際には付き合っていただけると幸いです
8:デフォルトの名無しさん
18/04/07 16:14:52.82 XH6L+7hBM
URLリンク(ideone.com)
のようなクラスを他プロジェクトやライブラリでICollectionの型として使いまわしたい場合
どのように依存させる構成にすればいいのでしょうか?
インターフェースとかでこの型の実装を強制ってできるんでしょうか?
それかインターフェースは使わないで他の参照方法が望ましいんでしょうか?
9:デフォルトの名無しさん
18/04/07 12:22:01.31 mY3UUgcs0.net
困っているわけじゃないんだけどちょっと気になってることがあるので分かる方がいたら教えてください
次のコードを実行すると y に true が代入されますが、これはどういうときに使うのでしょうか
string x = null;
bool y = x is var z; // y に true が代入される
10:デフォルトの名無しさん
18/04/07 13:18:31.43 pLXvASH10.net
private void button1_Click(object sender, EventArgs e)
{
if (sender is Button b)
{
}
}
方法: as 演算子と is 演算子を使用して安全にキャストする (C# プログラミング
ガイド)
URLリンク(docs.microsoft.com)
11:デフォルトの名無しさん
18/04/07 15:27:01.26 Uoh/XEtya.net
チラシの裏
C#の構造体にこんな落とし穴が存在することをついさっき知った
URLリンク(ufcpp.net)
12:デフォルトの名無しさん
18/04/07 16:25:57.16 jbOaYf+S0.net
public class Test
{
public int Id{get;set;}
public string Text{get;set;}
public string Other{get;set;}
}
このようなクラスを他プロジェクトやライブラリで
ICollectionの型として使い回したい場合
どのような依存をすればいいのでしょうか?
インターフェースでこの型実装を強制させるとかでしょうか?
インターフェースを使わないで他の参照方法のが望ましいのでしょうか?
13:デフォルトの名無しさん
18/04/07 16:37:35.07 Y4t1vYpsM.net
継承
14:デフォルトの名無しさん
18/04/07 18:27:15.12 7KARL849a.net
>>12
悪口言いたくないんだけど、俺様用語が多過ぎて何を言ってるのか全然分からないよw
15:デフォルトの名無しさん
18/04/07 19:44:44.45 jbOaYf+S0.net
>>14
List〈Test〉等を他のプロジェクトでも扱いたいのでTest型で返す関数を作成して
それをこれをパッケージした時に他のプロジェクトでも受け取れるようにしたいって事ですね
public Test GetTest();
みたいな関数でTest型を使いまわせるようにしたいです
16:デフォルトの名無しさん
18/04/07 19:53:33.05 jbOaYf+S0.net
>>13
Abstractって指摘も入ってるので
型クラス(Test)を実装しておき
これをベースにして
public Test GetTest();
を継承先に実装するようにするのが一番賢い設計ですかね・・・?
機能というよりはC♯を使った設計の質問と少し抽象的な話なのでスレチだったらすいません
17:デフォルトの名無しさん
18/04/07 20:14:36.36 7KARL849a.net
>>15
publicな型はそれを含むプロジェクト(アセンブリ)を参照する別のプロジェクトからも
普通に使えると思うけど、そういう話ではなくて?
18:デフォルトの名無しさん
18/04/07 20:27:35.94 jbOaYf+S0.net
>>17
dll状態だと戻り値Test型って何?ってならないかと思って構造どうすればいいのか悩んでましたけど
そもそもそういう事を考えること自体がおかしかったかもしれないです・・・
Test型のみを他のプロジェクトに流用させたい時とかも考えていたんですけど
そもそもその設計自体がおかしいと思い至りました
19:デフォルトの名無しさん
18/04/09 11:45:33.84 xaQ7bksS0.net
>>12
もうちょっと掘り下げて質問し直します
EntityFrameworkを使ってSQLにTest型の入出力をするクラスと
WebからスクレイピングしてTest型を返すクラスを作りたいのですが
ここでTest型を両方で共通で使いたいと思ってます
Test型はプロパティが減ることは無いですが追加はしたいものとします
この時Test型はどのように実装するのが好ましいのでしょうか?
今だとSQLに接続したい時とスクレイピングする時に読み込むクラスが分けれないので困っています
20:デフォルトの名無しさん
18/04/09 11:56:58.59 xaQ7bksS0.net
>>19
これはTestクラスを作成して単独でビルドし
これを参照させたSQLクラスとスクレイピングクラスに継承させて扱うのが正解なのでしょうか?
21:デフォルトの名無しさん
18/04/09 23:41:29.92 XPDmd+wz0.net
C#というよりクラスタイプoop全般の話だと思うのですが、クラスを呼んだ
22:時のパラメータは、コンストラクタに与えるのが良いのでしょうか、メソッドに与えるのが良いのでしょうか 両方できるので無造作に使ってるのですがOO的に間違った事をしていそうで よろしくお願いします
23:デフォルトの名無しさん
18/04/09 23:43:55.56 fSLWGn340.net
クラスを呼ぶってなに?
24:デフォルトの名無しさん
18/04/09 23:44:42.97 MCzflE3YM.net
場合によるのでその都度考えてください
25:デフォルトの名無しさん
18/04/10 06:59:42.37 EnsNk18IM.net
>>22
インスタンスを作るのとメソッドをコールすることと意識が混ざっている素人で失礼しました
インスタンスを作る時にパラメータを渡すのと、メソッドの引数にパラメータを渡すの、oo的にはどちらが正しいのかお聞きしたかったです
26:デフォルトの名無しさん
18/04/10 07:04:03.54 EnsNk18IM.net
>>23
oo的にはこう、というのは無く、スマートに記述できる方で良いという感じでしょうか?
今自分は気分や雰囲気で使い分けてるのですが、実はルールがあるのではと心配しておりました
27:デフォルトの名無しさん
18/04/10 12:42:18.35 KG4vxU3va.net
>>25
正直何が聞きたいのかよく分からんけど、
いろいろ想像してみると、たぶん本当に聞きたいことはコンストラクタ云々じゃなくて
あるデータをプロパティとしてオブジェクトに持たせるかどうかをどういう基準で決めるか、
じゃないのかな。
例えばSystem.Timers.TimerにはpublicなプロパティIntervalがあるけど、
これをprivateかprotectedにしてユーザーからアクセスできないようにして、
Startメソッドの引数として与える仕様でも同じじゃないのかと
28:デフォルトの名無しさん
18/04/10 20:54:09.92 i+408CBT0.net
>>26
理解が浅く説明が拙くすみません
そのような事です
どちらでも出来てしまいますが、使い分けのルールや指標はあるのかなと
29:デフォルトの名無しさん
18/04/10 23:02:10.41 IMFDPHVza.net
そのパラメーターが変更可能なのかどうかでやり方がいろいろある
インスタンスを作るときに最初に決めたパラメーターを変える必要がないもしくは変えたくないなら
コンストラクタで渡してしまえばいい
毎回変えるかもしれないならメソッドで渡せばいい
30:デフォルトの名無しさん
18/04/10 23:36:50.93 v03YChI+M.net
>>27
そんなもの無い
その時々で苦悩して答えを出すしかない
プログラミングってそういう仕事
31:デフォルトの名無しさん
18/04/10 23:44:32.77 yYP5pHxz0.net
>>21
教科書的にはメソッドの引数しかありえない
32:デフォルトの名無しさん
18/04/11 00:46:06.20 qa2FEnRqa.net
>>27
基本的には全部引数でも間違いではない
あくまで関数が主であって、オブジェクトは関数のコンテキストに過ぎない、と考えるのが今時のプログラミング
端的に言えば、毎回同じ引数を渡すのが面倒だと思うならクラスにすることを検討するというだけの簡単な話
33:デフォルトの名無しさん
18/04/11 00:50:03.90 mkq9MyW9a.net
>>27
いや、プロパティとして持つべきデータかの判断は一般的にはそんなに難しくないはず。
上に例に挙げたTimerだって、Startの引数でIntervalを指定する方式だと
問題や不自然さがあることはちょっと考えれば分かるはず
34:デフォルトの名無しさん
18/04/11 01:12:44.96 KJoDibHNM.net
>>32
別に問題も不自然さも無いよ
System.Timers.TimerやSystem.Windows.Forms.Timerのインターバルがプロパティなのは、デザイナで設定できる必要があるからだ
実際、デザイナに貼れないSystem.Threading.Timerはコンストラクタかメソッドで周期を設定する
(ライブラリではなく)アプリケーションの開発に関して言えば、データクラス以外でプロパティを使う必要があるケースは稀だよ
データクラスを除けば、一度設定した値を取り出したくなるのは殆どの場合設計が間違っている
35:デフォルトの名無しさん
18/04/11 01:25:13.83 nomvJ3n3M.net
>>21
・コンストラクタで渡す
var a = new Test(1, "A");
・メソッドで渡す
var b = new Test().SetId(2).SetName("B");
・オブジェクト初期化子で渡す
var c = new Test{
id = 3,
name = "C",
};
通常はコンストラクタで、メソッドチェーンはファクトリパターンでよく使う
オブジェクト初期化子は閉じてるクラスの可読性を上げたいときに使う
まあ統一性さえ確保出来ていればどれを選んでも大差ないよ
36:デフォルトの名無しさん
18/04/11 01:44:35.49 mkq9MyW9a.net
>>33
System.Threading.Timerがプロパティを持たないのは何か意図があると思うが
使ったことがないのでよくわからない。(軽量であることが「コンセンプトだから?
あるいんた単に設計者の頭が古いだけかもしれない}
TimerのIntervalをプロパティとして実装しなかった場合。
(1) タイマー動作時にIntervallを変更するためにはStartを実行することになるが、
OOP的に不自然
(2) そもそもTimerオブジェクトは、少なくとも動作時にはIntervalの値を保持している。
だったらこれをプロパティとして公開する方が自然
37:デフォルトの名無しさん
18/04/11 02:01:15.23 nomvJ3n3M.net
>>35
動作中にIntervalの値を変えられると困る場合、
Start時のみ設定可能にするのは別に不自然でもないよ
OOPの目的はメンテナンス性と事前の徹底したバグ潰しだから、値を変更できるルートを予め絞っておくことは理に適ってる
38:デフォルトの名無しさん
18/04/11 02:46:11.71 mkq9MyW9a.net
>>36
現実と違う仮定を置いたら何でも言える
39:20
18/04/11 07:04:30.38 Q5HB2TyRM.net
色々とアドバイスありがとうございます
統一性があれば、後はデザパタに従うか等で決定するのが一般的と解釈しました
田舎の中小1人情シスでコードレビューもされないので世間の動向が分からず参考になります
都会の大手の人は切磋琢磨し洗練されたコードを書くんだろうなと憧れます
40:20
18/04/11 07:52:53.54 Q5HB2TyRM.net
>>29
あまり我流過ぎるとチーム開発の時に混乱するという心配がありまして
41:デフォルトの名無しさん
18/04/11 11:00:26.66 uvPDHOSBM.net
>>39
対象を無視してオレオレナントナク基準で決めるほうが我流
物事にはそれぞれ特性があり最適な答えはいつも違う
それを導き出すには都度考えて議論を重ね実験を繰り返すしかないんだよ
42:デフォルトの名無しさん
18/04/12 20:03:06.85 XQKU/nO90.net
見積り終わってるのに時間かけても無駄
一円の利益にもならない
今回の開発で黒字でなければ2回目はない
よって一番時間がかからない方法が正義
43:デフォルトの名無しさん
18/04/12 20:52:33.85 bR5mzWUWM.net
業務系はそれでいいのかもね
保守するのは自分でも自社でもない
ならどんなに汚いコードでも早くしあげたほうが勝ち
ただし納品された顧客はとんでもない借金を背負うことになる
罪悪感ってないのかね
44:デフォルトの名無しさん
18/04/12 21:50:50.18 XQKU/nO90.net
>>42
いや
君のやり方だって怪しいもんじゃない?
具体的に○○さんのコードは見易くてわかりやすいですねって言われた実績あるの?
無いのに勝手な妄想で自分のコードを保守しやすいと思い込んでない?
45:デフォルトの名無しさん
18/04/12 21:55:35.29 kW0JyjC+0.net
まーた始まった
46:デフォルトの名無しさん
18/04/12 21:57:30.18 XQKU/nO90.net
>>44
お前なんか全身elseで強化した俺の敵じゃねぇ
47:デフォルトの名無しさん
18/04/12 22:06:57.86 kW0JyjC+0.net
>>45
ナマ言ってすみませんでした
48:デフォルトの名無しさん
18/04/13 01:45:08.04 JNl7+QPK0.net
VisualStrudioのC#でPS4を入力を表示するソフトを作りたいんだけども、
どんなライブラリが便利かな?
49:デフォルトの名無しさん
18/04/13 06:13:51.49 Om81X5Te0.net
>>47
PS4の入力ってなに?
コントローラの事?
50:デフォルトの名無しさん
18/04/13 07:25:42.50 ko86uHhA0.net
日本語でOK
51:デフォルトの名無しさん
18/04/13 18:47:05.89 GNeQyvWjM.net
PS4を窓の外に出力する
入力すならまずはアマゾンで注文
52:デフォルトの名無しさん
18/04/14 14:59:27.41 x6wpDOBa0.net
作画ソフトを作成したいのですが
解像度より大きな領域を扱うことになりそうです
10%~800%まで拡大縮小ができて
編集操作を行う必要があるのですが
どのような造りにしたら良いのでしょうか?
自分でスクロールバーを置いて編集領域は自前で描画するのでしょうか?
PictureBoxのようなコントロールでスクロール操作までできてしまうのでしょうか?
53:デフォルトの名無しさん
18/04/14 15:03:33.67 A6JgIv/D0.net
ドロー系?
ペイント系?
54:デフォルトの名無しさん
18/04/14 15:08:53.93 x6wpDOBa0.net
>>52
具体的には印刷すると模造紙ぐらいの大きさのでっかい回路図を作成します
保存するファイル形式はXmlです
55:デフォルトの名無しさん
18/04/14 15:26:50.36 whWbsAFN0.net
>>50
入力酢?
56:デフォルトの名無しさん
18/04/14 16:20:27.70 411sIKLXa.net
>>51
自分でスクロールの機能まで実装してもいいけど、
特に理由がないならコンテナ(例えばPanel)の中にPictureBoxを入れて使うのが
普通じゃないですか
57:デフォルトの名無しさん
18/04/14 17:09:28.19 D8vt8UcC0.net
>>51
PictureBoxにスクロールバー表示するのは
URLリンク(dobon.net)
例ではコードでプロパティ設定しているけどデザイナで設定しても同じようにできる
58:デフォルトの名無しさん
18/04/14 17:16:13.98 A7r7eR+xa.net
模造紙レベルのでっかいpitureboxで画像のまま編集は現実的じゃないけどね
実際は表示部分だけ都度計算して描画することになる
ドロー系にしてもまあ普通は向いてない
C++でやるような内容だよ
59:デフォルトの名無しさん
18/04/14 18:55:16.11 A6JgIv/D0.net
論理座標とワールド座標、デバイス座標をよく理解すべき
60:デフォルトの名無しさん
18/04/14 19:31:26.26 x6wpDOBa0.net
>>55-58
ありがとうございます
頑張って見ます
61:46
18/04/14 20:40:54.18 iGVhaI1m0.net
すいません、PS4のコントローラをPCに接続して、
入力ボタンを表示したいのです。
62:デフォルトの名無しさん
18/04/14 21:18:11.42 whWbsAFN0.net
>>60
URLリンク(game.watch.impress.co.jp)
63:46
18/04/14 23:01:59.31 iGVhaI1m0.net
配置が違うだけなのか。
でも認識させるにはDirectXのラッパーとか使うしか無さそうなのね。
64:46
18/04/17 01:46:03.23 kRrGnVcd0.net
出来ましたー、ありがとうございます。
DirectInput
URLリンク(nanoappli.com)
Xinput
URLリンク(gist.github.com)
65:デフォルトの名無しさん
18/04/17 13:28:00.94 NEdohK8t0.net
Task.Factory.StartNew(またはTask.Run)で生成したスレッドの優先度を変える方法はあるのでしょうか。
66:デフォルトの名無しさん
18/04/17 14:11:36.85 NEdohK8t0.net
63ですがスレッドプールを使わず、スレッドで対応することにしました。
67:デフォルトの名無しさん
18/04/17 16:42:17.15 joazaAE7M.net
なぜレガシィな方向へ走るw
68:デフォルトの名無しさん
18/04/17 17:42:06.89 NEdohK8t0.net
>>66
Taskだと処理中に割り込み?が割と入ってきて、処理時間が遅延してしまうのです。
スレッドレベルで優先度を上げたいと思いまして。
結局Threadにして優先度を上げても割り込みは入ってくるのですが、多少マシになったような気がします。
69:デフォルトの名無しさん
18/04/17 18:11:29.55 xGjbcgxza.net
どんだけタイムクリティカルな要件なのよww
70:デフォルトの名無しさん
18/04/17 21:11:51.39 kHPr9dOS0.net
パソコンぶん投げてPLCにしよう
71:デフォルトの名無しさん
18/04/17 23:58:42.15 zXGef27d0.net
picでも使えよ
72:デフォルトの名無しさん
18/04/18 00:12:24.46 WXSfEMqB0.net
>>67
それ単にスレッド生成で遅延しているなんてオチじゃないよな?
73:デフォルトの名無しさん
18/04/18 10:23:12.22 +D/RfByR0.net
受託案件なのでC#で作らざるを得ないのです。
自分自身はファーム屋なので、マイコンでやりたいんですけどね。
>>71
まだ遅延の原因はわかってませんです
生成時だけの遅延じゃないので、違うとは思いますが・・・
74:デフォルトの名無しさん
18/04/18 12:14:14.43 wyULW0oVM.net
プロセスの優先度もあげるといいらしいぞ
75:デフォルトの名無しさん
18/04/18 12:31:04.61 WeKuLBkMM.net
糞多い要素群にlinqで遅延実行+ループとか?
76:デフォルトの名無しさん
18/04/18 18:10:56.40 jY7uFFSia.net
>>72
Win32で作る
77:デフォルトの名無しさん
18/04/18 21:09:40.32 unjr58vW0.net
>>72
GCやJITは対策してる?
78:デフォルトの名無しさん
18/04/19 18:59:16.22 Yr3hu/ey0.net
ユーザーコントロールのプロパティをデザイン時のプロパティウィンドウでコンボボックスにしたく
人様のサイトで恐縮なのですが、以下をほぼコピペしました。
URLリンク(blog.okazuki.jp)
が、テキストボックスのままで選択肢になりません。
公開プロパティに、なにか別の宣言が要りましたでしょうか?
79:デフォルトの名無しさん
18/04/19 19:15:06.26 Yr3hu/ey0.net
継承ユーザーコントロールだったのですが、継承元にも
[System.ComponentModel.TypeConverter(typeof(~ が必要だっただけみたいです。
すみませんでした。
80:デフォルトの名無しさん
18/04/19 19:48:23.98 Yr3hu/ey0.net
引き続きすみません。
たとえばユーザーコントロールに
Folder
File
という2つのstring型の公開プロパティを用意します。
IDEのプロパティウィンドウからFolderを設定(通常のテキストボックス)すると
そのフォルダ内のファイルを舐めてFileの選択肢にしたいのです。
TypeConverterで、静的な候補が出て選択できるところまでは出来たんですが
動的に候補を変更する場合、どうするんでしょうか。
IDEのプロパティウィンドウに、どうアクセスしたらいいのか、そこが分かれば何とかなる気がしてるんですが。
81:デフォルトの名無しさん
18/04/20 01:01:44.37 xYBhqDqu0.net
>>79
Visual Studio .NET プロパティ ブラウザによるコンポーネントの本格的な RAD 化
URLリンク(msdn.microsoft.com)
このドロップダウンでできると思う
82:デフォルトの名無しさん
18/04/20 05:10:41.06 OZAtcLZg0.net
初歩的な質問で申し訳ないのですが、
戻り値なしのメソッドと、引数なしのメソッドはどういう状況で使用するのでしょうか?
戻り値なしのメソッドは
その後にどこかに代入したりする予定はなく出力が目的の場合に使用すると
読んだのですがその通りですか?
万が一、後で代入したくなった場合に備えて取り敢えず戻り値は設定しておいたりしないのでしょうか?
引数なしのメソッドは
引数がない(=変数宣言がない?)とそのメソッド自体、動いてくれないイメージがあるのですが、実際は動きますよね
何も値を与えられていないのに動くのはどうしてですか?
宜しくお願いします・・・
83:デフォルトの名無しさん
18/04/20 05:52:22.55 6mS8vUfV0.net
>>81
オーバーロードで検索してみると良い
84:デフォルトの名無しさん
18/04/20 06:02:00.71 OZAtcLZg0.net
>>81
例えば
int Add(int a, int b) {
int c;
c = a + b;
return c;
}
というメソッドですと、Add(3, 5)ならaとbにそれぞれ3、5が入りc=8となると思うのですが、
abc = xyz,Add()といった風に使用しても、cの値も何も返ってこないのに、
引数なしのコードを見かける様な・・・
85:デフォルトの名無しさん
18/04/20 06:29:51.46 wjKqEKEv0.net
>>81
デフォルト引数で統合しなされ
86:デフォルトの名無しさん
18/04/20 09:05:47.03 3LwLCVWq0.net
>>81
メソッドってのは別に数値の計算だけするわけじゃない
何かの処理なので、その処理に引数が必要なら引数を渡すし
その処理に結果があるなら戻り値がある
87:デフォルトの名無しさん
18/04/20 09:40:55.97 9jg3Q7S00.net
>>85
横からごめん
処理に結果がないならそれはもう何も処理してないのと同じじゃないの?
88:デフォルトの名無しさん
18/04/20 09:50:08.64 3LwLCVWq0.net
>>86
君がうまい説明してあげてね
89:デフォルトの名無しさん
18/04/20 10:06:30.92 9jg3Q7S00.net
>>87
>>85の説明が間違ってると言いたいんじゃなくて
単純に理解できなかったんだけど誤解させたならごめん
とはいえせっかくだから自分なりに説明を考えてみたんだけど
プログラムを動かすことが目的じゃなくて人間に読ませてアルゴリズムを
分からせることが目的の場合は最終的な結果は必要ないって感じかな?
90:デフォルトの名無しさん
18/04/20 11:57:10.77 DKeEixVwd.net
>>81
メソッドは外注さんへの作業手順書みたいなもん
引数は、その作業に必要な情報がある場合に外部から渡すための窓口
情報不要なら省略できる
引数なし=こっちから情報渡さなくても作業できるよね?みたいな感じ
メソッド内で作業が完了したあと、なんか返事してほしい場合は戻り値をつかう
返事不要の場合void
戻り値なし=作業さえしてくれたら結果レポートいらね!
メソッドコール(外注さんへ仕事依頼)したら作業はちゃんとされるので、結果のレポートを使って、さらになんか作業をしたいなら戻り値よこせよ!って作業手順書に書いておけばいいし、仕事さえしてくれたら、返事不要なら戻り値いらない
91:デフォルトの名無しさん
18/04/20 11:59:20.85 o6RSJKQdd.net
>>81
コントロールにupdateってメソッドがあるだろ?
これは自身の再描画をするだけのメソッドなんだから引数を取りようがない
また再描画するだけなのに失敗するわけないんだから戻り値もいらない
無理やり成否を返すこともできるが、失敗する可能性があるメソッドに様変わりし、呼び出し元で失敗を意識した実装にしなきゃいけないから負担を強いることになる
って感じかな
92:デフォルトの名無しさん
18/04/20 12:23:49.11 9v7e203Yr.net
引数のとりようも戻り値の返しようもなんぼでもあるわ
へんな忖度みたいな真似すんなボケ
93:デフォルトの名無しさん
18/04/20 12:38:55.75 9jg3Q7S00.net
>>89
作業が行われればレポートは要らないというのは例えば殺し屋みたいな?
でもコンピューター上でそれを再現するならターゲットもターゲットの生死も0と1のデータなんじゃないの?
だとしたらそのデータはどこに消えるの???
>>90
同じようなことばっかり聞いて悪いんだけど再描画の結果も0と1のデータなんじゃないの?
それがメモリに残らないのに再描画は成功という意味がわからない
>>91
戻り値の返しようがあるというのは返さない選択肢もあるということ???
戻り値を返さないプログラムに人間に読ませる以上の価値があるとすればそれを教えて欲しい
94:デフォルトの名無しさん
18/04/20 12:44:06.99 yZlfbYWOM.net
オブジェクトとは何かね
95:デフォルトの名無しさん
18/04/20 12:52:07.95 wBOVlPyYM.net
>>92
横からで悪いけどたとえ話がおかしいし
言ってることが伝わらない
もっとまとめてから書くべき
96:デフォルトの名無しさん
18/04/20 12:58:41.12 luJyaFhBa.net
>>81
まあ、一言でいうと愚問だねw
そんなこと考えても時間のムダ。
真面目な話、その疑問はそのまま放置して前に進む方がいいと思う。
97:デフォルトの名無しさん
18/04/20 13:08:12.31 9jg3Q7S00.net
>>93
オブジェクト指向ってやつか!
オブジェクトを使うと結果がない処理にも意味があるってこと?
>>94
まとめるなら「結果がない処理の価値がわからない」って感じかなあ
>>95
詰め込み教育への皮肉だと思うけど正直分かりにくいかも
もし本気で言ってるならさすがに時代遅れだから考え直したほうがいいよ
98:デフォルトの名無しさん
18/04/20 13:26:58.95 luJyaFhBa.net
>>96
経験が足りないために起こる疑問は経験を詰むことでしか解決しない。
構造化プログラミングの意義もOOPの意義も、体感できるのは
実際にコードを自分でコードが書けるようになってから。
本で読んだだけで最初からそれが分かるのは一部の天才だけ。
逆にいえば、>>81の疑問は頭の良い人が考えた難しい理論を理解しないと
解決しないような問題じゃなく、誰でも体験すれば自然と分かる程度の話ってこと
99:デフォルトの名無しさん
18/04/20 13:48:46.74 o6RSJKQdd.net
>>92
0と1?何を言ってるのかわからん
14時に集合ってメール出して、全員からわかったみたいな返信きてもうざいだろ?
だから、14時集合(返信不要)ってメールをおくる方が受け取る側も返信しなくていいし、送る側も無駄な受信を減らせるしでwinwin
この辺りは経験だったりセンスだろうな
100:デフォルトの名無しさん
18/04/20 14:03:32.43 0EVFmTU60.net
>>96
成否の観点では単にフィールドの値を設定するメソッドを鑑みても
メモリに書き込み失敗の概念があっても、代入に失敗の概念はない
設定前の値を返すにしても、わざわざ退避する処理を強制するのか?
想定外の発生は基本的に例外をぶん投げるものだし
常人が気にしない様な事を考えて躓いてそうである
101:デフォルトの名無しさん
18/04/20 19:05:49.61 W6WTRmLV0.net
関数型プログラミングの才能があるな
102:デフォルトの名無しさん
18/04/20 20:30:59.54 kti4nAgp0.net
>>96
戻り値がないのは常に「成功」を返す関数と考えて良い
C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
C言語とかgoみたいに例外という概念がない言語は、成功したかどうかが戻り値に入ってることが多い
それでも絶対に失敗しないか、失敗したらプログラムが強制終了するような処理は戻り値がない場合もある
103:デフォルトの名無しさん
18/04/20 21:05:01.73 Yi5F0BBw0.net
>C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
えぇ…
104:デフォルトの名無しさん
18/04/20 21:14:39.58 7WlEIf700.net
>>101
> C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
ケースバイケース。何でもかんでも例外にしちゃ駄目。
105:デフォルトの名無しさん
18/04/20 21:42:51.61 9jg3Q7S00.net
>>97
とりあえず>>95が本気なのとそれが思考停止の詰め込み教育信奉じゃないのは分かったよ
偉そうなこと言ってごめん
>>98
自分もちゃんとは理解してないけどコンピューターは0と1だけで動いてるらしい
でも初心者用スレで
106:出す話ではなかったと反省 メール送信の例は分かりやすい!と思ったけど本当に結果が何もないと送信済みマークも付かないのでは・・・? >>99-103 詳しい人でも意見が割れるくらい難しい問題なのね >>100は皮肉なんだろうけど意味どころか自分に向けられた言葉なのかも分からないから反応に困る・・・
107:デフォルトの名無しさん
18/04/20 21:52:31.13 7WlEIf700.net
>>104
元の発言の「結果が無い」って言葉を勘違いしてる。
関数で処理した結果を返り値と言う形で関数の呼び出し元に伝える必要が無いって意味だ。
ちゃんと意味のある結果は発生している。
108:デフォルトの名無しさん
18/04/20 22:00:49.23 kti4nAgp0.net
>>102-103
書き方が変だった
C言語やgoと比べて成否を例外で処理することが多いから戻り値がなくても良い場合が多い程度の意味で言った
>>104
メール送信の結果は戻り値ではない方法で返しているというだけ
C#には例外やイベントのように色々な機構があるから、とりあえず細かいことは気にせず先に進んだ方がいい
109:デフォルトの名無しさん
18/04/20 22:22:51.74 UaVetxYYM.net
関数という言葉に惑わされてるということかな
メソッドは数学で言う関数そのものじゃない
(y=x+1とかそういうのじゃない)
やることを順番に書いてあるもの
サブルーチン
戻り値が定義されてたそれを返すだけ
ほかの言語で戻り値がないものは関数と区別してる言語もあるけど
わざわざ二種類つくるより戻り値なしで共通にしてある
110:デフォルトの名無しさん
18/04/20 23:07:04.14 0EVFmTU60.net
>>104
その辺は想定外と書いたように>>103よろしくケースバイケースだよ
十分想定され例外情報すら要らんなら戻り値で成否を返す事もあるし
InvalidProgramExceptionみたいに言語レベルでは処理できない物もある
話が逸れたけどOSレベルでは例外を発生させる余地などが有ったとしても
プラットフォーム次第になったりと言語レベルで突き詰めない場合は多い
111:デフォルトの名無しさん
18/04/20 23:38:50.80 iIb0CR1w0.net
いろいろ調べたり考えたりしたのですが、解決出来ないので質問します。
URLリンク(dotnetfiddle.net)
このようなコードがあって
List<ITest>にいれていったときに
ListのXだけを全て足して返す関数は出来たのですが、今後ITestのプロパティは増える予定で、それぞれに足して返す関数をつけたいです。
そのときに似たようなコードになるので一つに纏めようとしたのですが中々できず困っています。どのような書き方をすればいいでしょうか?
112:デフォルトの名無しさん
18/04/21 02:21:21.95 lHgu/nQp0.net
>>109
基本的にはプロパティを動的に指定するのはリフレクションとかDictionaryを駆使とか、何らかの形でコストを払うことになると思う
状況にもよるけど、コンパイル時に確定してるならT4テンプレートとかコード生成とかで対応するのが一番正しいんじゃないかな
113:デフォルトの名無しさん
18/04/21 02:34:40.78 m0t/bmNLa.net
>>109
そんなものは自作しなくてもList自身(正確にはIEnumerable<T>だけど)が持ってるw
名前もそのまんまSumだからよくMSDNを見てみ
URLリンク(msdn.microsoft.com)
114:デフォルトの名無しさん
18/04/21 03:42:29.63 MaG6OThU0.net
>>111
んー、エスパーだけど、質問者はプロパティをforeachみたいに回して全てにsumするようなのをプロパティの数に限らず1行で書きたいってことじゃね?
115:デフォルトの名無しさん
18/04/21 07:59:48.29 z4AHgN+yd.net
>>104
メソッドの戻り値とコンピュータの世界は全く関係がない
低級のマシン語をわかりやすくするための高級言語なんで初心者用スレで~というよりは見当違いなことを言ってる
っで、結果とは低級レベルでの結果とメソッドレベルの結果のどちらをさしている?
低級レベルでの結果が表に出てこないのは普通のこと
メソッドレベルで見てもメールの送信済マークを含めてないのでメソッド戻り値の返さない
116:デフォルトの名無しさん
18/04/21 08:37:04.35 i7kmKmol0.net
>>110
リフレクションについて調べて何とか出来ました!ありがとうございます!
>>111,>>112
もう少し具体的に書いていれば良かったですよね・・・今後質問するときはもっと詳しく書くので、そのときはよろしくお願いします!
117:デフォルトの名無しさん
18/04/21 10:09:06.82 XwcbmKc5a.net
連続時間的な関数ってあります?
118:デフォルトの名無しさん
18/04/21 10:52:04.99 WnG+wEwt0.net
連続時間 is 何
119:デフォルトの名無しさん
18/04/21 11:00:42.32 k3YYD8ov0.net
エポック秒のことかなぁ
120:デフォルトの名無しさん
18/04/21 12:09:05.27 Y1+gKOzZa.net
アナログメーター的なやつです
121:デフォルトの名無しさん
18/04/21 12:39:56.06 k3YYD8ov0.net
>>118
プログレスバーでググってみてはどうか
122:デフォルトの名無しさん
18/04/21 13:49:43.77 gbvJ8fZ/a.net
時空連続体と空目した
123:デフォルトの名無しさん
18/04/21 18:22:05.73 V5ZTEj450.net
プログレスバーってもろデジタルメーターじゃないですか
数百~数千の筋繊維を一本の糸で表現できるような関数はないですかね
124:デフォルトの名無しさん
18/04/21 18:29:18.80 LQq77Lfe0.net
you!画像ファイル扱っちゃいなyo!
125:デフォルトの名無しさん
18/04/21 18:52:17.79 rKiuu7+10.net
>>121
>>118のアナログメーターも全く関係ないんだけど?
筋線維もよく意味が分からないし、糸の振動の軌跡の描画みたいなことやりたいのなら自分で作るしかないよ
126:デフォルトの名無しさん
18/04/22 00:35:03.08 XfnBBJY5M.net
プリンタの印刷設定の縦横を変更したいです。
DefaultPageSettings.Landscape プロパティから変えられるのは確認しましたが
一時的なものではなく、プログラムが終了したあとも変わったままにしておきたいのですが
なにか方法はないでしょうか?
URLリンク(bbs.wankuma.com)
このサイトも参考にしてSetHdevmodeなどもやってみましたが、プログラム終了後にもとに戻ってしまいます。
Windows7,10 64bitです
127:デフォルトの名無しさん
18/04/22 00:38:42.31 2TRizD7z0.net
筋繊維を糸で表現ってそれもう物理演算じゃん
128:デフォルトの名無しさん
18/04/22 01:10:17.94 6eouzp2p0.net
何がしたいのかよう分からん
>数百~数千の筋繊維を一本の糸で表現できるような関数
が欲しいなら
「アナログメーター」なんて単語は出てこんと思うのだが
なんか特殊な知識が必要なことやってるなら
なおさらキチンと説明しないといかんだろう
129:デフォルトの名無しさん
18/04/22 02:16:18.41 I1dKrIqPa.net
>>124
次回そのプログラムを起動した時も同じ設定が適用されるようにしたい、
という意味なら、Landscape を永続化すればいいだけでしょう。
同じ設定が他のプログラムにも適用されるようにしたい、って意味なら、
たぶんそんなことは出来ないんじゃないかと...
よく知らんけど
130:デフォルトの名無しさん
18/04/22 07:35:23.33 XfnBBJY5M.net
>>127
後者の方を考えています。
なにか方法があればいいのですが、、、
131:デフォルトの名無しさん
18/04/22 09:24:44.12 RctEGmkE0.net
他のプログラムでも同じ設定を使いたいんならプリンタドライバの設定変更以外に方法はない
てかそれってC#関係ないよね
132:デフォルトの名無しさん
18/04/22 19:36:51.14 YjWQK7FP0.net
[[['[] ]]] { {] ]][ '[][][] [][] [][][] [] '[] []
133:デフォルトの名無しさん
18/04/22 21:23:13.30 AB//w8nmp.net
c#勉強始めたての者です。
indexofで文字列を検索しようとしているのですが、長文を検索するとエラーが出てしまいます。
MSDNを見ると戻り値がint32とあり、戻り値がintの範囲を超えるとlongエラーになるように推測していますが対応方法はあるのでしょうか。
134:デフォルトの名無しさん
18/04/22 21:24:53.81 AB//w8nmp.net
すみません上記文中のlongは誤植ですので読み飛ばしてください。
135:デフォルトの名無しさん
18/04/22 21:30:18.18 PsQCMKRd0.net
そう言われるともうlongしか見えない
136:デフォルトの名無しさん
18/04/22 21:37:33.88 hhQLBFvv0.net
文字数がintに収まるように文字列を切り出しながら検索すればいいんじゃないか
もちろん切れ目に検索対象の文字列が有るときの対策して切り出さなきゃならんけど
137:デフォルトの名無しさん
18/04/22 22:10:29.71 VNNE7LSc0.net
ありがとうございます。
matchメソッドというのを見つけました。
全然見つからなかったのに投稿し出来すぐ見つかるものですね。
matchで出来なかったらint分割にトライしようと思います。
138:デフォルトの名無しさん
18/04/22 22:23:25.89 f9F/Sp5R0.net
フォーム上のコントロールを、プログラムから参照するいい方法はないでしょうか
SplitContainer上に配置した合計20個のチェックボックスについて、textをファイルから
読み込んだものに動的に変更したいと考えています
手元の書籍(作って覚えるc#)では、forループの中で
splitContainer1.Panel2.Controls[i].Text = mistakeText;
という形でやっていましたが、今回自分で用意したフォームはほかにもテキストボックスや
ラベルがあり、うまくチェックボックスを対象としてくれません
デザイン画面で配置した順番にやや依拠しているようですが、最後においたものほど添字が
小さそうだ、程度しかわかりません
今後デザインを変更する、あるいはチェックボックスを増やす可能性を考えると、何らかの
プロパティで順番を指定できるといいなと思いますが、発見できませんでした
Form1.Designer.cs のメンバ変数宣言欄に記載がある順番のように思えますが、IDEが
自動生成したコードを並べ替えるのも何やら気持ち悪く、今の所手を出していません
今回はチェックボックスですが、ほかにもラベルを順に参照するとか、テキストボックスを
順に参照する方法などあれば、教えていただけると助かります
なお、今回のフォームでは、とりあえずチェックボックスの名前は初期値(checkBox1など)に
なっています
139:デフォルトの名無しさん
18/04/22 22:25:29.08 tqpEX+7y0.net
>>136
if (Controls[i] is CheckBox)
140:デフォルトの名無しさん
18/04/22 22:43:50.37 VtQV/Dmoa.net
>>136
根本的に考え違いをしてると思う。
たぶんありもしないものをあるはずだと勝手に思い込んでる。
コントロールをテーブル参照したいなら自分で明示的にテーブル(配列)を
宣言しましょう。
デザイナには君が欲しいと思っているものを忖度して自動で作ってくれるような
都合のいい機能は存在しない。
141:デフォルトの名無しさん
18/04/22 23:18:57.35 f9F/Sp5R0.net
>>137
とりあえずチェックボックスだけを選択することは可能になりました
順番はやはり思っているとおりにいきませんが、これは実行結果を見つつ、デザイナで
並べ替えるしかないかなと思い始めました
>>138
デザイナが忖度してくれるとは思っていないので、プロパティか何かで明示的に選択する
事ができないかな、と思ったのです
以前VBAで似たようなものを作った際は、
Controls("CheckBox" & i).Caption = Cells(i, 1)
こんな選択の仕方ができたので、c#でもなにか方法はあるのではないかと思いました
142:デフォルトの名無しさん
18/04/22 23:35:35.52 Kp2niQOT0.net
>>139
コントロールに名前付ければいいじゃん
フォームにあるコントロールをどうやって特定したいと思ってるの?
143:デフォルトの名無しさん
18/04/22 23:50:44.34 f9F/Sp5R0.net
>>140
例えば
Panel.Controls.CheckBox[i]
みたいな形で指定できればいいなと思ってるんですが、残念ながらそうできないですね
>>138
が書いている、自分で明示的にテーブルを宣言するというのは、例えば
cbox[1] = CheckBox1;
cbox[2] = CheckBox2;
とかいうコードを予め書いておく、ということでしょうか?
144:デフォルトの名無しさん
18/04/23 00:02:33.07 Xa6TKCtV0.net
>>141
意味がわからない
何がしたいの?
①コントロールを特定する必要がある
②複数のコントロールに共通の処理がしたい
②にしか目が行ってないけど①をやらなきゃいけない時点で
②の方法なんてエレガントにできたってウンコブリブリじゃん
145:デフォルトの名無しさん
18/04/23 02:11:14.44 kNAX3uRd0.net
オムツの取り替えまでやって欲しい要介護は大人しくVBやってろ
146:デフォルトの名無しさん
18/04/23 03:09:44.29 0OUySOiKa.net
>>141
だから、配列が欲しいなら配列を自分で作ろうよ。
配列が欲しい、でもなんだか自分で配列を書くのは嫌だ。
この発想がおかしい。
var cbs = new[] {CheckBox1, CheckBox2, ...};
これ書くのがそんなに面倒?
変な方向に努力する方が余程面倒でしょ
ローカル変数じゃなくてメンバ変数かプロパティとして実装する場合だって手間は大差ないよ
147:デフォルトの名無しさん
18/04/23 06:08:01.85 wp3u/AuE0.net
>>144
配列を書くのは別に面倒でもなんでもないです
コピペしてちょっと直せば済むので
ただ、コピペで済む内容なら、コードで表現する方法があるのではないかと思ったのです
「新しくなにかプロパティを実装する」のではなく、「このプロパティを参照するとわかる」
という情報が存在するのかと考えました
>>138
が書いてくれたように、「ありもしない物をあるはずだと思い込んでる」のかもしれません
148:デフォルトの名無しさん
18/04/23 06:12:48.73 Xa6TKCtV0.net
>>145
それって同じフォーマットの行が並んだ設定ファイルみたいになんでしょ?
どの部分を自動でやってくれると思ってん?
149:デフォルトの名無しさん
18/04/23 07:30:25.22 wp3u/AuE0.net
>>146
自動でやってくれると言うか、Controls[n] の n に相当する部分を、何らかのプロパティで
持っているのではないかと思ったのです
それがわかれば、IDEでプロパティを書き換えてやればそれで済むな、と
あるいはそれがなければ、例えば
for (int i = 0; i < CBOX_ELEMENTS; i++) {
string s = "checkBox" + (i+1).ToString();
Controls(s).Text = ...
}
みたいな形で指定できないかな、と思っていたのですが、これは無理そうですし
150:デフォルトの名無しさん
18/04/23 07:45:09.58 7CTglbRxa.net
配列作って突っ込んどくのが何より簡単だし自由だろ
151:デフォルトの名無しさん
18/04/23 08:09:08.34 voecBiJS0.net
>>147
インデクサじゃ駄目なの?
152:デフォルトの名無しさん
18/04/23 08:16:30.00 C4a+50u5M.net
>>147
ちがくね?
お前がやりたいのって別のデータとid(?)が一致する項目にデータを入れていきたいんじゃねーの?
でもそれってコントロールを特定する必要があるんだよね?
コントロールとデータを紐付ける何かはあるの?
153:デフォルトの名無しさん
18/04/23 08:33:16.26 KdhM7QliM.net
GetAllControlsのカウント取るとかそういう?
154:デフォルトの名無しさん
18/04/23 08:37:13.12 +9lDlXeaM.net
Type.GetPropertiesの方かな
155:デフォルトの名無しさん
18/04/23 09:14:18.74 y08K2+qf0.net
VB6はコントロール配列があったけどなー。.Netの世界にはないからの。
156:デフォルトの名無しさん
18/04/23 12:01:51.66 joGGyVH30.net
URLリンク(dobon.net)
名前で探せばいいのでは?
157:デフォルトの名無しさん
18/04/23 12:30:43.09 b1ST+81Ba.net
だから配列に突っ込めば済む話を何でわざわざより面倒な方法で解決しようとするのw
158:デフォルトの名無しさん
18/04/23 12:34:22.72 HUKatAJtr.net
>>150
いや、単純にファイルから読み込んだ名前で、チェックボックスの文字を変えたいだけです
例えばファイルの中身が 犬,猿,雉だったら?CheckBox1-3の文字をそれぞれ犬、猿、雉にしてCheckBox4-20は「使用不可」にでもするような
だから機械的に参照できればよかったのです
>>154
これでほぼ解決です、ありがとうございます
159:デフォルトの名無しさん
18/04/23 12:39:13.94 HUKatAJtr.net
>>155
まあ一言でいうと、わざわざ自分で配列を作らなくても、それを実現する方法はすでに存在するだろうと思ってたのです
配列作ったら「そんなことしなくてもこう書けば一発で参照できるのに」って言われる方法があるんじゃないかと
160:デフォルトの名無しさん
18/04/23 12:39:38.75 +9lDlXeaM.net
>>156
その下にインデクサによる説明もあるだろw
161:デフォルトの名無しさん
18/04/23 13:33:10.44 48XgAlPp0.net
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Name ).ToArray();
}
private CheckBox[] checkBoxes;
}
162:デフォルトの名無しさん
18/04/23 17:06:56.96 FWk6fNJV0.net
public class B : private A
{
}
みたいなこと C# じゃ出来ないんだっけ?
163:デフォルトの名無しさん
18/04/23 17:10:12.77 BY7S8wKYd.net
>>160
継承元をprotectedにすれば継承したクラスからしかアクセスできないようにはできる
164:デフォルトの名無しさん
18/04/23 17:25:36.44 b1ST+81Ba.net
>>160
何言ってるのかわかりませんw
165:デフォルトの名無しさん
18/04/23 18:05:17.14 BY7S8wKYd.net
そのクラス経由でしかアクセスできないようにしたいってことじゃないの?
166:デフォルトの名無しさん
18/04/23 18:18:07.68 CCSIsfHWM.net
ゆとりしか居ないのかなぁ
C#はprivate継承はサポートしてないよ
フィールドに持たせて移譲メソッド書くしかない
167:デフォルトの名無しさん
18/04/23 18:31:05.83 VMRJeQmYd.net
>>164
ゆとりなんてもうオッサンやでおじいちゃん?
168:デフォルトの名無しさん
18/04/23 18:38:07.42 BY7S8wKYd.net
これ参考にすればいいのかな
URLリンク(ufcpp.net)
protected internal 同一プロジェクト内のクラス内部、または、派生クラスの内部からのみアクセス可能
private protected (C# 7.2 以降)同一プロジェクト内のクラス内部、かつ、派生クラスの内部からのみアクセス可能
こういうこと?
169:デフォルトの名無しさん
18/04/23 18:52:13.60 Xa6TKCtV0.net
>>156
それで解決しねーだろ
バラっバラにくんじゃね?
俺はてっきりコントロールの
座標でソートして名前付けたいのかと思った
170:135
18/04/23 21:02:25.52 wp3u/AuE0.net
皆様いろいろありがとうございました
>>159
書いてくださった方法が、ほぼ私が求めていたものを完璧に実現しています
抱かれてもいいくらい惚れました
ただ、試してみたところピックアップされる順番は必ずしもコントロールを配置した
順番通りではなく、はっきりした法則性も見いだせませんでした
テストプログラムを書いて、インデックスと見た目を一致させるようデザイナで
コントロールを並べ替えようかとも思いましたが、後日コントロールを追加した際
悩むことになりそうなのでやめておきました
>>154
結局この方法でコントロールを検索し、発見したコントロールをリストに追加するという
方法で対応することにしました
>>155
配列に突っ込むにも、コード上に直接 checkBox1 とか checkBox2 とかのリテラルを
埋め込みたくなかったので、検索した上で配列を作ることにしました
>>149, 150, 151
実は書いていることがわからないレベルなので、これから勉強します
「作って覚える」は一通りやったので、「独習c#」を紐解いてみます
>>167
これで解決しました
158の方法で解決するかと思っていたのですが、やってみたところバラバラの順番でした
皮肉でもなんでもなく、コントロールの座標でソートとか、なぜそういう操作をしたいのだろうと
推測したのか教えていただけると嬉しいです
今後も質問すると思いますので、疑問点がわかりやすい文章を意識する必要があるので
171:デフォルトの名無しさん
18/04/23 21:07:14.52 QriAiZTC0.net
今日からC#勉強し始めたけど、
結構ネスト深くなる言語っぽいね、これ。こんな…
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
checked
{
sbyte a = 64;
sbyte b = 65;
sbyte c = (sbyte)(a + b);
}
}
catch (OverflowException ex)
{
Console.Write(ex.Message);
}
}
}
}
172:デフォルトの名無しさん
18/04/23 21:09:42.34 b1ST+81Ba.net
>>168
いやいやいやcheckBox1 とか checkBox2 とかはリテラルじゃないってw
ただの識別子(フィールド名)
コードにリテラルを埋め込むというか、コンパイル時に誤りを検出できない
(普通の理解では)お行儀の悪いコードになるのはむしろ>>154みたいな方法だってw
173:デフォルトの名無しさん
18/04/23 21:09:53.25 QriAiZTC0.net
namespaceとかcheckedがブロックなのが何かなぁ…
174:デフォルトの名無しさん
18/04/23 21:27:15.55 wp3u/AuE0.net
>>170
おっと・・・
どうやら根本的なところで間違っていたようです
書いてあるとおりだとすると、質問とレスが噛み合っていない理由がわかりました
わざわざ行儀の悪い書き方を探していたのか
175:デフォルトの名無しさん
18/04/23 21:37:46.50 48XgAlPp0.net
>>168
>>159はOrderBy()でチェックボックスの名前(Name)順にソートしてる。
Nameの代わりに、TabIndexかTagを設定してそれを利用しても良い。
というか、Nameだとチェックボックスが10個以上になるとソートが望むようにならないか。
176:デフォルトの名無しさん
18/04/23 21:45:21.31 Xa6TKCtV0.net
>>168
おそらく配置したコントロールから欲しい情報は座標とサイズぐらいしかない
それらの特定情報は別ファイルにある
なのでコントロールが上から
もしくは左からか順番に取得できれば
別ファイルに記述した通りの順番で情報を並べることができる
Controlsで取得できる順番はよく知らないけど
作った順かあるいわなんの特徴もなくランダムか何かを保証するものではないのかな?と
177:デフォルトの名無しさん
18/04/23 22:10:47.18 48XgAlPp0.net
>>174
Controlsが返す順番は保証されてないけど、自分でソートすれば良い。
(1)TabIndex順 (各CheckBoxにタブオーダー(TabIndex)を設定しておく)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.TabIndex ).ToArray();
(2)Tag順 (各CheckBoxのTagに数値を設定しておく)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Tag ).ToArray();
(3-1)Location順(左から)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.X ).ThenBy( x=> x.Location.Y ).ToArray();
(3-2)Location順(上から)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.Y ).ThenBy( x=> x.Location.X ).ToArray();
178:デフォルトの名無しさん
18/04/23 22:33:20.75 fnmaDcrK0.net
>>156
そういう使い方なら、チェックボックスを先に作っておくんじゃなくて
ファイルから読んだ内容で動的に作っていった方が手っ取り早い
どうせチェックボックスは全部等間隔に並べるんじゃろ?
179:デフォルトの名無しさん
18/04/23 22:53:14.98 pYJnxPYX0.net
WPFのサンプルでありそうな話だ
180:デフォルトの名無しさん
18/04/23 23:04:57.82 0nhwdYRFa.net
>>127,>>129
>>124です
SetPrinter関数を使用することで実現できました。ありがとうございました。
181:デフォルトの名無しさん
18/04/24 00:40:53.09 U7B9av/W0.net
>>169
そのtry意味ないんだけど。。
182:デフォルトの名無しさん
18/04/24 00:55:02.77 P/LpDfjz0.net
>>179
ネストのイメージ書きたかっただけだろうよ
183:デフォルトの名無しさん
18/04/24 06:02:26.80 PLNFE8AC0.net
>>174
なるほど、コントロールから情報を取得する必要があると思えたのですね
実際はそれ以前の段階でしたが
>>176
それも考えたのですが、デザイナで画面を確認したいので、静的に用意して
おきたいという結論になりました
動的に置くほうが難易度高そうだ、と思ったのもありますが
184:デフォルトの名無しさん
18/04/24 11:44:27.10 MJ0NRymv0.net
>>179-180
「意味無い」って、どういう意味?
185:デフォルトの名無しさん
18/04/24 12:45:33.19 MJ0NRymv0.net
うぇぇ、C#、goto文使えるし…
186:デフォルトの名無しさん
18/04/24 13:15:16.40 MJ0NRymv0.net
うーん、string x = "10"; に対して
x.toString(); するんじゃなくて、int.Parse(x); するのか…。
xオブジェクトにintegerを吐き出させるのではなく、
integerオブジェクトにxオブジェクトを与えてintegerを吐き出させる…。
これは初めての体験だな…。
187:デフォルトの名無しさん
18/04/24 13:18:45.32 Ajvhvjmq0.net
何もかも間違っててワロタw
188:デフォルトの名無しさん
18/04/24 13:34:52.91 MJ0NRymv0.net
なにゆえ?
189:デフォルトの名無しさん
18/04/24 13:45:01.31 MJ0NRymv0.net
expression-bodied関数は、なんかエロいな…
190:デフォルトの名無しさん
18/04/24 13:46:08.52 MJ0NRymv0.net
やってる事は違うけど、考え方的にはCのマクロに近いのかな…
191:デフォルトの名無しさん
18/04/24 13:50:59.68 MJ0NRymv0.net
LINQ…、エロいな…。
192:デフォルトの名無しさん
18/04/24 13:53:53.94 MJ0NRymv0.net
関数名がアッパーキャメルなのは感心せんなぁ…
193:デフォルトの名無しさん
18/04/24 14:00:18.73 a0zqzGgA0.net
ここ質問スレなんで日記は他所でな
194:デフォルトの名無しさん
18/04/24 14:04:20.23 MJ0NRymv0.net
なんだよ、ToString()メソッドあるじゃねぇかよ…。
195:デフォルトの名無しさん
18/04/24 14:05:02.22 MJ0NRymv0.net
>>191
ごめん。
質問です。なんだよ、ToString()メソッドあるじゃねぇかよ…
196:デフォルトの名無しさん
18/04/24 14:39:12.39 5gRbnpaG0.net
VisualStudioでC#のフォームアプリを開発するときに
プロジェクトのプロパティから
出力の種類を「コンソールアプリ」にして
デバッグ用のConsole.WriteLineを出力できるようにしてるんだけど
リリースするときは、種類を「Windowsアプリ」にするだけで
コード中のConsole.WriteLineはコメントアウトとかしなくても
大丈夫ですか?
197:デフォルトの名無しさん
18/04/24 15:12:41.47 aRAC41/V0.net
>>194
デバッグ用に文字列を出したいなら、using System.Diagnostics;して、Debug.WriteLine()とか使うべき。
これならリリースビルドにするだけで無効になるからコメントアウトも不要。
リリースビルドでも使いたいなら、Trace.WriteLine()。
198:デフォルトの名無しさん
18/04/24 17:00:53.50 Le/zmSZT0.net
>>194
パイプで繋ぐとみえちゃうよ
199:デフォルトの名無しさん
18/04/24 17:22:41.52 5gRbnpaG0.net
>>195
おお、ちゃんとデバッグ用のがあるんだ
聞いてよかった
ありがとう
>>196
なるほど
別に見られて困るようなものでも無かったけど
無知を晒す所だった・・・
てか、独学でやってると気づかずおかしなことやってそうで怖いわ
たまたま、ネット上で解説見つかるか
質問して教えてもらえるかの
綱渡りで進んでるw
200:デフォルトの名無しさん
18/04/24 19:15:00.82 QP8ofl3+M.net
>>193
おまえ出身言語化どこだよw
レヴェルが低すぎるぞ
201:デフォルトの名無しさん
18/04/24 20:32:35.47 AF96232m0.net
引数の文字列が、データグリッドに含まれていない場合だけ追加したいんですが、追加されません。
何が原因でしょうか?
void AddToDataGrid(string[] strs)
{
bool exists = false;
foreach(string str in strs)
{
for(int i = 0; i <= view.Rows.Count; i++)
{
if(str == view[0, i].Value.ToString())
exists = true;
}
if(!exists)
{
view.Rows.Add(str);
}
}
}
202:デフォルトの名無しさん
18/04/24 20:43:20.78 Ajvhvjmq0.net
>>199
>view.Rows.Add(str);
これじゃね
203:デフォルトの名無しさん
18/04/24 20:48:40.81 AF96232m0.net
>>200
view.Rows.Add(str);
だけだと正常に追加されるので、条件判定かループあたりに原因があると思っています。
フラグの位置がおかしいので以下に修正してもダメでした。
void AddToDataGrid(string[] strs)
{
foreach(string str in strs)
{
204:bool exists = false; for(int i = 0; i <= view.Rows.Count; i++) { if(str == view[0, i].Value.ToString()) exists = true; } if(!exists) { view.Rows.Add(str); } } }
205:デフォルトの名無しさん
18/04/24 20:53:14.94 ZpST366k0.net
>>201
exist=trueでブレークポイントを置いてデバッグ実行すればわかるのでは?
206:デフォルトの名無しさん
18/04/24 20:54:05.17 UZOTbxqf0.net
そもそも exists = true; の行に到達してないというオチな気がする
207:デフォルトの名無しさん
18/04/24 20:55:27.49 UZOTbxqf0.net
>>202とかぶってしまった
>>202の方が指摘として親切だからそっちだけ読めばいいよ
208:デフォルトの名無しさん
18/04/24 21:00:23.35 PfeXTBpB0.net
>>201
for(int i = 0; i < view.Rows.Count; i++)//Rows.Count以下じゃなく未満
{
bool exists = false;//ここに移動
if(str == Convert.ToString(view[0, i].Value))//ToString()だとValueがnullのときエラー
209:デフォルトの名無しさん
18/04/24 21:12:02.89 UZOTbxqf0.net
>>205はとってもそれっぽい
で、例外が握りつぶされるような場所でAddToDataGridが使われてるせいで気づけてないとか
こういう場合自分はtry{...}catch(Exception exception){throw;}で囲って
throwの直前にブレークポイントを置いたりしてるけどもっとうまい方法があったら誰か教えてちょ
210:デフォルトの名無しさん
18/04/24 21:26:25.44 UZOTbxqf0.net
>>205はそれっぽいと言ったけど
よく読むと
bool exists = false;//ここに移動
の部分は自分には理解できなかった
>>205の勘違い?
211:デフォルトの名無しさん
18/04/24 21:31:25.92 zd8+57fN0.net
全一
FXきた
212:デフォルトの名無しさん
18/04/24 21:36:01.31 PfeXTBpB0.net
>>207
フラグよく見ていないからとりあえず
if(str == Convert.ToString(view[0, i].Value))
{exists = true;break}
に変更で
213:デフォルトの名無しさん
18/04/24 21:38:44.73 AF96232m0.net
みなさん本当にありがとうございます。
結局原因はわからず仕舞いでしたが、最終的に以下の方法で打開しました。
void AddToDataGrid(string[] strs)
{
foreach(string str in strs)
{
bool exists = false;
for(int i = 0; i < view.Rows.Count; i++)
{
if(Convert.ToString(view[0,i].Value) == str)
exists = true;
}
if(!exists)
{
view.Rows.Add(name);
}
}
}
214:デフォルトの名無しさん
18/04/24 21:49:35.82 UZOTbxqf0.net
>>209
それなら納得
existsの宣言の位置を移動するとif(!exists)がスコープから外れちゃうもんね
>>210
>>205の方法で解決したんなら>>205の指摘が正しかったんでしょうよ
で、それに気づかなかったんならやっぱり例外が握りつぶされてたんでしょ
なら今後のためにも原因は分からずで片付けず例外の名前くらい確認しといたほうが良いと思うよ
215:デフォルトの名無しさん
18/04/25 15:12:14.28 lzwohvOS0.net
オブジェクト指向のプログラミングでは
変数じゃなくてプロパティにアクセスさせるべき
みたいな事をよく聞くんだけど
・プログラムの開始時にあるフラグ(true/false)を決めて、その後一切変更されることがない
・そのフラグには、コード中の様々な所からアクセスがある
って場合は、プロパティじゃなくてpublicな変数でフラグを定義してもいいんですか?
オブジェクト指向がよくわかってないせいか
プロパティを経由するのがどうしても遠回りというか
一つ余分な作業を挟んでるように感じてしまう・・・
216:デフォルトの名無しさん
18/04/25 15:30:51.28 eqJJBtIM0.net
変数は、公開しちゃダメ
その変数に、誰かが代入するかも知れないと考えると、
その変数に代入しているか、すべての場所を確かめないといけなくなるから、
プログラミングできなくなる
だから、プロパティで代入禁止に設定する
ただし、絶対に代入できない定数なら、公開してもよい
217:デフォルトの名無しさん
18/04/25 16:03:36.81 lzwohvOS0.net
>>213
後から書き換えられるのを確実に防止するために
プロパティを使うってことか なるほど
1人でコード書いてるからそういう発想が無かったけど
自分も後から絶対変な値を代入しない保証ないもんな
てことは、>>212の例だと
・引数付きのコンストラクタを使って、フラグの状態をインスタンス化
・そのフラグのプロパティはgetのみ設定
ってすればいいのか?
でもこれだと、そういうフラグを立てるタイミングがたくさんあったら
その分だけクラスを準備しとくことになると思うんだけど
そういうもんなの?
218:デフォルトの名無しさん
18/04/25 16:12:23.29 lzwohvOS0.net
あ、いや
クラスを複数準備する必要はないな
>>214の後半の話は無しで
219:デフォルトの名無しさん
18/04/25 16:13:38.42 VelEInRI0.net
>>212
212は読まなくていい
フィールドだってreadonly修飾子で代入禁止できるが、212はそんなことも分かってないから
プロパティがフィールドと違う点は大ざっぱに
* 派生クラスでオーバーライドできる
* プロパティから構造体を返すとコピーされる
の2点
この2つの特性が必要ない(または避けたい)場合にフィールドを選択してよい
判断できないならプロパティを選択する
220:デフォルトの名無しさん
18/04/25 16:15:28.83 ym3YbVtBd.net
IOption使っとけ
221:デフォルトの名無しさん
18/04/25 16:51:44.20 I8kFq/qw0.net
>>212
>>216はどこかのコピペじゃないならすごい分かりやすくて尊敬
一つだけ補足すると、↓のようなこともあるからクラスがpublicの場合は
現状だけでなく将来の変更の可能性も考えてフィールドかプロパティか判断したほうが良い
public フィールドをプロパティに変える (2016/05/16追記)
URLリンク(qiita.com)
あと>>213も善意で答えてるのは分かるんだけど
代入できるかどうかだけを判断基準にしてる時点でズレてて
定数の説明も参考にならない気がするから割と真面目に>>213は読まないほうが良いと思う
すまぬ>>213
222:デフォルトの名無しさん
18/04/25 17:43:22.74 lzwohvOS0.net
>>216
>* プロパティから構造体を返すとコピーされる
これが、全然分からんのだけど
classの代わりにstructを使った場合の話であってる?
今の自分が考えたところで、どうせちゃんと理解出来ない気もするけど
223:デフォルトの名無しさん
18/04/25 17:44:09.08 EO6K8yEq0.net
>>213は別に全く問題ないだろ。
>>212の要はカプセル化の質問に対して、>>213はカプセル化の話として一般論として答えただけじゃん。
それに対して>>216と>>218はここはC#のスレだからC#特有のreadonlyなフィールドあるよとか言語依存の情報
つけ足してるだけじゃん。
224:212
18/04/25 17:48:51.21 eqJJBtIM0.net
オブジェクト指向では、変数は公開しない。
公開できるのは、処理(関数)だけ
クラス内を開発する人と、そのクラスを使う人は、別の会社・人を想定しているから、
変数にアクセスさせたら、絶対にダメ
クラス内を作っている開発者は、後で付け加えられる処理を予想できないから。
クラス内を開発した後に、別人が変数にアクセスして、動きを変えたらバグる
異なる会社間での開発を可能にする、
オブジェクト指向の大原則・カプセル化
225:デフォルトの名無しさん
18/04/25 17:50:35.02 ClmIY1xNa.net
プロパティから構造体を返すとコピーってのは意味わかんないね
コピーされるのは右辺がプロパティだろうがフィルドだろうが同じだよw
>>212
少なくともパブリックなメンバーに関しては、あえてフィールドを使う理由はないって
理解でいいと思うよ。例外はアンマネージドコードの呼び出しで使う型を定義する場合ぐらい。
フォールドのプロパティーに対して優位な点は
(1) 軽量である
(2) 簡潔に書ける
このぐらいしかない。
(1)が重要なケースなんかまずない。
(2)については、古いC#はともかく今のC#は儒分簡潔に書けるようになって来てる。
226:デフォルトの名無しさん
18/04/25 17:59:38.62 ClmIY1xNa.net
>>221
カプセル化っていのは、触る必要がないもの、触られては困るものを隠すこと。
この質問にはほとんど関係ない話w
フィールドをプロパティにしようが、触る必要がない文脈で触られることを防げるわけじゃないw
せいぜいセッターで値が適切かどうかチェックできる程度
227:デフォルトの名無しさん
18/04/25 18:00:19.55 EO6K8yEq0.net
まぁ、むしろ>>212のカプセル化などの話に対して、考え方説明せずに
初心者にいきなり言語仕様の詳細を羅列する>>216の方が教え方としてははぁーー??だわww
228:デフォルトの名無しさん
18/04/25 18:04:12.14 EO6K8yEq0.net
>>223
質問者は
>オブジェクト指向のプログラミングでは
>変数じゃなくてプロパティにアクセスさせるべき
>みたいな事をよく聞くんだけど
で書いて始めてんじゃん。だから、カプセル化の説明した方がまずいいんじゃねぇか??
229:デフォルトの名無しさん
18/04/25 18:09:53.61 ClmIY1xNa.net
>>225
何が「だから」なのかよくわかりませんw
質問は外部に見せるデータをプロパティとして実装すべきかフィールドでもよいのか。
カプセル化(余分なものを外に見せるな)は何も関係ないってw
230:デフォルトの名無しさん
18/04/25 18:14:14.76 EO6K8yEq0.net
>>225
>オブジェクト指向のプログラミングでは
>変数じゃなくてプロパティにアクセスさせるべき
>みたいな事をよく聞くんだけど
を質問者が引き合いに出した以上、質問者はここからはしっかりわかってなくて、色々ごちゃ混ぜになってると
思われる。だから、そっから説明しなきゃ、おそらく習得できない。
231:デフォルトの名無しさん
18/04/25 18:17:11.69 lzwohvOS0.net
自分はオブジェクト指向じゃない言語をちょっとだけやってたんだけど
そういう言語では、コードの最初の方に
public bool JudgFlag = true
って1行書いて、それにどこからでもアクセスするみたいな感じだと思うんだ
(全部独学だからこれも正解なのか知らんけど)
でも、オブジェクト指向ではこれやったらダメなんだよね?
ってのが知りたい
後、俺マジで初心者だから
質問文で聞きたいことが正確に表現できてる保証ないwすまん
232:デフォルトの名無しさん
18/04/25 18:20:06.19 EO6K8yEq0.net
>>226だった・・
233:デフォルトの名無しさん
18/04/25 18:22:03.13 ClmIY1xNa.net
>>228
別にダメじゃないよw
何度も言うけど、あえてフィールドを使う理由があんまりないだけw
フィールドをプロパティにしたらバグが減らせるとか可読性が上がるとか、
ほとんどの場合そんなことはない
234:212
18/04/25 18:26:03.04 eqJJBtIM0.net
>変数じゃなくてプロパティにアクセスさせるべき
これが異なる会社間での開発を可能にする、
オブジェクト指向の大原則・カプセル化
どの教科書にも書いてある
その理由は、クラス内を開発している会社・人と、
そのクラスを使う会社・人は、異なっているから
オブジェクト指向では、これらの2つの立場からの見方が大切。
君はどちらの開発者ですか?
クラスを作る方・使う方?
クラス内を開発しているのは、過去だから、
そこから未来の、クラスを使う人の動きを予測できない
だから、変数に直接触らせたらダメ。
そこまで予測して、クラス内を作れないから
235:デフォルトの名無しさん
18/04/25 18:31:21.63 lzwohvOS0.net
>>230
そうなのか・・・
でも、解説サイト見てると
「ダメ」的な雰囲気で書いてあるとこばっかりじゃない?
俺の理解が間違ってるのかもしれないが
俺的には現状>>230に書いてある事が正解に思えちゃうんだよな
俺が1人で小規模な開発してるだけだから
いまいちオブジェクト指向のメリットを感じる場面が少ないのかな
236:212
18/04/25 18:31:24.51 eqJJBtIM0.net
>>228
>public bool JudgFlag = true
変数を公開したら、ダメ。
カプセル化にならない
理由は、
>>213
に書いてある
237:デフォルトの名無しさん
18/04/25 18:36:43.91 Y4/R4Zt40.net
>俺が1人で小規模な開発してるだけだから
>いまいちオブジェクト指向のメリットを感じる場面が少ないのかな
まあこれだな
>>213の言ってる事は、OOPの「思想」としては間違いなく正しい
但し、単独での小規模開発という状況を前提にするなら「現実的なメリット」は無いに等しい
238:デフォルトの名無しさん
18/04/25 18:37:15.31 EO6K8yEq0.net
>>228
うん。君のケースだとダメだね。それだと、クラスの内部状態JudgFlagが誰でも自由に書き換えられちゃう。
だから、まずは君は基本、>>221のようなC#とか言語関係ない一般的なカプセル化について勉強しよう。
で、君のケースだと自分で書いてるが
>・引数付きのコンストラクタを使って、フラグの状態をインスタンス化
>・そのフラグのプロパティはgetのみ設定
ってやるか、
getプロパティ書くの嫌なら>>216が書いたようにC#にはreadonlyフィールドというのがあるのでそれで代用できる。
239:デフォルトの名無しさん
18/04/25 18:47:02.51 yqUO4I2d0.net
おまえら変数は公開しちゃだめだけど、プロパティやgetter/setterなら公開してもいいって思っとるやろw
240:デフォルトの名無しさん
18/04/25 18:48:12.94 ClmIY1xNa.net
>>232
どこの世界でも教条的(思い込みが激しいともいう)人はいるからねw
外部から取得/設定してもらう必要がある値をフィールドではなくプロパティにしたからって
ヒューマンエラーを減らす効果なんかないのは事実
ただ機能がより少ないフィールドをあえて使うことないでしょってだけの話
オブジェクトの公開するデータは必ずしもいつも変数に入っているわけではなく、
何らかの処理の結果を返す場合もあって、その場合はプロパティになるから、
だったら全部プロパティの方が統一感があるという考え方はあるかもしれない
241:デフォルトの名無しさん
18/04/25 18:49:19.77 s99z6Kr1M.net
>>234
嘘おしえるなよ
242:デフォルトの名無しさん
18/04/25 19:04:09.02 lzwohvOS0.net
まとめると
「1人で小規模なコード書いてるだけなら
public bool JudgFlag = true
を書き換えたらダメなことぐらい自明だから、フィールドに1行書いて終わりでいい
若干雑だけど楽」
って考え方と
「いや、自分で決めたルールを自分で忘れることもあるから
ちゃんとプロパティにして触れない様にすべき
多少面倒でもコストを払うメリットがある」
って考えの対立なのかな
get;set;とか全く意味がわからなかった頃の嫌なイメージのせいで
プロパティを書く事が、「面倒・難しい」って体が拒否反応しちゃうんだよね
自動プロパティとか実装されてる今の時代に
何言ってんだって笑われそうだけど
まあ、でも色々モヤモヤしてた所がスッキリしました
ありがとう
243:デフォルトの名無しさん
18/04/25 19:24:43.78 q/XXvHKQd.net
>>237
処理の結果を返すならメソッドにしろよ
244:デフォルトの名無しさん
18/04/25 20:11:47.21 ClmIY1xNa.net
>>240
具体例
URLリンク(msdn.microsoft.com)
245:デフォルトの名無しさん
18/04/25 20:30:49.45 XWOG1WtT0.net
フォーム間のデータ受け渡しのやり方について教えてください
プログラムを起動して、最初にForm1でパラメータなどを設定、次にForm2で設定した
パラメータを元にデータを編集したいとします
(Form1で編集済みのデータをForm2に表示する、でもいいです)
このときにデータを受け渡すのは、program.cs で Application.Run(new Form1()); と
呼び出す前に
1. Form2 のインスタンスを作っておいて、それを Form1 の引数として与えてやる
2. 必要なデータのインスタンスを Main() 内に用意しておいて、そのインスタンスを
Form1 と Form2 のそれぞれに送る
3. どっちもダメで他の方法がある
のどれが良いのでしょうか。
Form1 の中で Form2 のインスタンスを作成して、Form2 に送るという方法も考えましたが、
そうすると Form1 が不要になったときに Dispose() すると Form2 も落ちてしまいます。
246:デフォルトの名無しさん
18/04/25 20:44:39.30 3+niHUT+0.net
【マイトLーヤとPS4】 FFとDQの最新作、VR開発は危険、プレーヤーの日常感覚を損なうおそれ
スレリンク(liveplus板)
247:デフォルトの名無しさん
18/04/25 21:00:51.62 q/XXvHKQd.net
>>241
それは右座標を計算して返しただけであって処理を実行するのとは違う
面倒だからここ読んで
URLリンク(msdn.microsoft.com)(v=vs.100).aspx
248:デフォルトの名無しさん
18/04/25 21:06:28.54 XHhjs7vi0.net
>>242
Form2にプロパティを追加
Form1の該当メソッド内でForm2を宣言&インスタンス化してプロパティにパラメータをセット
Show(Dialog)メソッドで呼び出し
249:デフォルトの名無しさん
18/04/25 21:09:48.37 ckNZ5jJB0.net
メッセージキューを勉強中なんですが、
MSMQとMessageQueueクラスって何が違うんでしょうか?
250:デフォルトの名無しさん
18/04/25 21:17:11.34 XWOG1WtT0.net
>>245
ありがとうございます
この場合、もう二度と Form1 を使わないという状況であれば、Form2 の ShowDialog を
呼び出す前に this.Hide(); で隠しておいて、戻ってきたら this.Dispose(); でしょうか
Hide() だけで処理を抜けるコードを書き忘れて、いつまでもプログラムが残り続けるバグを
やったので、二度と戻ってこないフォームは Dispose() したいのです
251:デフォルトの名無しさん
18/04/25 21:18:56.58 XWOG1WtT0.net
今思ったのですが、そういう使い方だとむしろ Form2 を非表示で実行しておいて、
その中で Form1 を呼び出すべき?
で、Form1 を抜けたら this.Show(); とか
252:デフォルトの名無しさん
18/04/25 21:20:04.33 ClmIY1xNa.net
>>244
頭悪そうだけど、単にバッキングフィールドの値をそのまま返すのではないケースを
「何らかの処理の結果を返す」と言っている。
処理 = 高価な処理ではない。
重かろうが単なる足し算だろうが処理は処理だ
253:デフォルトの名無しさん
18/04/25 22:11:10.02 jHFwiJ5Yd.net
Applicationに共通のパラメータ持って、Form1とForm2で共有しちゃダメなんか
254:デフォルトの名無しさん
18/04/25 22:17:09.52 fPsUNFh1a.net
使い方次第じゃないかなとは思う
双方で同時に書き換えたりするならやめたほうがいい
それ以前にタダクソダサイと思う
255:デフォルトの名無しさん
18/04/25 22:41:48.50 TqrgnB+10.net
シングルトンの出番だ
256:デフォルトの名無しさん
18/04/25 23:10:10.54 Kx9WW2Xx0.net
>>217
これやろ
257:デフォルトの名無しさん
18/04/25 23:38:15.43 8cfef6Y0a.net
もう親フォーム作れば?
258:デフォルトの名無しさん
18/04/26 14:36:05.39 ooZK6FZP0.net
自作ツールをソースコード付きで公開したいのですが、
パブリックドメインソフトにするのが最善ですか?
259:デフォルトの名無しさん
18/04/26 15:37:00.65 s8t3AsxEM.net
.netで簡単に実現できる機能(メールや圧縮、画像処理等)をネイティブCのアプリで利用したいです。VC++6.0の(C++ではなく)C言語で作るコンソールアプリでです。
C#で作っでdllを作って、C++のdllでそれをコールする関数を公開すれば実現可能ですが、もっといいやり方ないでしょうか?
260:デフォルトの名無しさん
18/04/26 15:39:07.13 B934JXdmM.net
>>255
今のOSSはMITライセンスでGithubに晒すのが主流
261:デフォルトの名無しさん
18/04/26 16:34:09.89 +C2ovlRwM.net
>>256
つ C++/CLI
262:デフォルトの名無しさん
18/04/26 17:05:43.31 B934JXdmM.net
>>256
別プロセスにする
Win10のアプリなら WinRT のコンポーネントにすれば言語をまたがって普通に使える
263:デフォルトの名無しさん
18/04/26 19:19:32.70 leQJqI/Q0.net
>>256
標準入出力のリダイレクト。
古典的でダサいけどね
264:241
18/04/26 20:39:08.13 8i3JVbEw0.net
皆様ありがとうございました
決まりきった定番の書き方はない、と理解すれば良さそうですね
自分で色々試してみます
265:デフォルトの名無しさん
18/04/26 21:03:55.12 8i3JVbEw0.net
今度はインデクサについて教えてください
URLリンク(ideone.com)
例として上記のようなコードを書いてみました
これで、インデクサを使って例えば anml["whale"] とすれば1が返ってくるような、
そういうものを作りたいと思います
(classified, lifeの各プロパティはユニークではなく、specificのみユニークとします)
本を紐解きながら書こうとしたのですが、animalsクラスの中ではリストになっていないので
書く場所はなさそうです。でもMainメソッドでは利用したい側なので、ここに実装することも
できない気がします。
多分インデクサの考え方そのものがわかっていません。どなたか教えていただけると
嬉しいです。
266:デフォルトの名無しさん
18/04/26 21:18:02.97 i4ujFDqn0.net
ListじゃなくてDictionaryを使えばOK
267:デフォルトの名無しさん
18/04/26 21:54:22.87 IFgymZMf0.net
anml.FindIndex(_ => _.specific == "whale")でよくね?
268:デフォルトの名無しさん
18/04/27 03:52:18.55 3sBZO5RI0.net
インデクサてのは自作のクラスにつけるプロパティみたいなものだから、List<animals>を内蔵するクラス作って
public int this[string p]{
get{ /* ここに検索して結果を返すコード書く */ }
}
でおkなんじゃねか?知らんけど。
269:デフォルトの名無しさん
18/04/27 07:42:26.78 vWqu6ayt0.net
>>263
すいません、理解のレベルが低いので、具体的にどう実装すればよいのかわかりませんでした
var anml = new Dictionary<animals, string>;
としてディクショナリは実装できたとして、要素追加の際 Add メソッドをどう書くのか、理解が
追いついていないようです
>>264
この書き方で、求めている操作は実現できそうです
ラムダ式の理解が怪しいのは勉強するとして、毎回これを書くと面倒&間違えそうなのですが、
これは「十分に簡潔な書き方」なのか、それとも「メソッド等でさらに簡潔に書ける」のか、どちら
でしょうか。
>>265
この場合、各プロパティにアクセスする際は anml[i].specific とかではなくて anml(i, specific)等
メソッドを介してアクセスすることになるのでしょうか?
270:デフォルトの名無しさん
18/04/27 07:59:23.04 Ek6IpJbsa.net
>>265は良くないよ
インデクサはループ内で使用されることを想定しておかないといけない
毎回線形検索が走るのは非効率すぎる
271:デフォルトの名無しさん
18/04/27 08:18:37.17 3sBZO5RI0.net
番号が欲しいのかanimalsオブジェクトが欲しいのか
272:デフォルトの名無しさん
18/04/27 12:24:44.14 /0qPzcyMr.net
>>267
今回の用途では速度は重要でなく、またそもそも実現方法がわからなかったので、アルゴリズムはまだまだ先の話ですね
>>268
今回欲しいのは数字です
273:デフォルトの名無しさん
18/04/27 23:13:48.06 9YiDAi7f0.net
Index番号が欲しいなら>>264で十分じゃないか?
見つからなかったとき例外吐くらしいから気をつけろい
274:デフォルトの名無しさん
18/04/27 23:15:15.73 9YiDAi7f0.net
まちがえた。例外じゃなくて-1だ。すんまそ。回線で首吊ってくる
275:デフォルトの名無しさん
18/04/28 01:50:07.49 E8vnEfND0.net
>>264
アンダーバーはやめとけ
276:デフォルトの名無しさん
18/04/28 01:50:20.46 fiFvLr6Y0.net
XAMLファイルからボタンを削除した場合、CSコードの方に呼び出されることのないコールバック関数の宣言が残ってしまます
こういうのを効率よく削除する方法ってないのでしょうか?
277:デフォルトの名無しさん
18/04/28 01:54:51.50 E8vnEfND0.net
>>273
WPF?
278:デフォルトの名無しさん
18/04/28 02:32:39.82 fiFvLr6Y0.net
>>274
Xamarin.Formsで使っています
279:デフォルトの名無しさん
18/04/28 07:22:01.22 bL+b5OsrM.net
>>273
XML解析とリフレクション
280:デフォルトの名無しさん
18/04/28 12:46:33.34 5pWODy2i0.net
ここでいいのかわかりませんが、質問させてください。
C#でフレームワーク ASP.Net MVCで作っています。
テーブルのフォームをPOSTしたいのですが、
動的に作成した行をどのようにサーバー側で受け取ればよいのかわかりません。
<td>
<input class="form-control" id="no1" name="no2" type="text" value="" />
</td>
<td>
<input class="form-control" id="no2" name="no2" type="text" value="" />
</td>
このように、複数行があって、noの後ろの数値は、行を追加したら増えるように
javascriptで制御しています。
サーバー側の処理として、引数を
(string no1, string no2, ・・・)と列挙してすべて書けば、
POSTデータを受け取れることは確認済みです。
ただ、ユーザーの操作で行を何行追加するかもわからず、あらかじめ想定する
最大数の引数を列挙するのも現実的ではありません。
すべてのフォームデータを一挙に受け取って、
サーバー内部のロジックで処理する方法はないでしょうか。
281:デフォルトの名無しさん
18/04/28 13:53:59.42 Jn+S73+O0.net
>>277
namaに添字をつければList<T>でバインディングできるはず
URLリンク(qiita.com)
282:デフォルトの名無しさん
18/04/28 14:50:29.57 X/1aPQ6Ma.net
どうせJavaScript書いてるんならJavaScript側でJSONの配列に纏めてからAJAXでポストするのもアリ
283:デフォルトの名無しさん
18/04/28 21:58:22.96 4vnB69wL0.net
[[[ ][ ]]]\[[]] [[[]]]],[[[ [][] ]
284:デフォルトの名無しさん
18/04/28 22:36:40.95 vp8gWtwG0.net
Entity FrameworkでDBへのselectとかのリトライしたい場合ってどのようにすべきでしょうか
一時的なエラーだったりしたらもう一回トライとかしたいのです
例外全キャッチするのも無駄なのかなぁと思いまして
285:デフォルトの名無しさん
18/04/28 23:02:28.71 8LDPRSMfM.net
普通のRDBなら一時的なエラーなんか滅多にないだろ
400でいいよそんなもん
286:デフォルトの名無しさん
18/04/28 23:05:27.66 yGhXA9la0.net
Azure相手だと普通にあるで
287:デフォルトの名無しさん
18/04/28 23:08:01.89 E8vnEfND0.net
>>281
DbExecutionStrategy
288:デフォルトの名無しさん
18/04/28 23:33:01.91 vp8gWtwG0.net
>>284
ありがとうございます
試してみます
289:デフォルトの名無しさん
18/04/29 20:34:09.03 My7UiDyw0.net
[[[ []]]]*[[ [][] ][] } } {} [[[
290:デフォルトの名無しさん
18/05/02 19:00:22.89 As5kU4Fr0.net
とりあえず、連休ぐらいゆっくりな
オマエラ
291:デフォルトの名無しさん
18/05/03 10:44:28.97 9ar3mEaia.net
連休は機械学習でずっと計算させる予定
人間は休む
292:デフォルトの名無しさん
18/05/03 13:02:24.11 Nqnp2049M.net
人間はILコードを覚えてハンドアセンブル出きるようになるべき
293:デフォルトの名無しさん
18/05/03 13:26:57.92 YEWKmWCr0.net
winformの左辺や上辺をドラッグするとフォームのサイズが変わらずにフォームが移動してしまいますが
サイズを変更するように設定するプロパティなどはありますでしょうか
コードを書く必要がありますか?
294:デフォルトの名無しさん
18/05/03 14:32:14.37 hvfEvXXP0.net
>>289
古い脳の感覚でいえば、IL なんてハードウェアの裏づけのない、空想上の約束にしか過ぎないので、覚える気が起きない
x86-64 でおなかいっぱい
295:デフォルトの名無しさん
18/05/03 14:41:33.60 Nqnp2049M.net
>>291
情報処理試験のCASLとかも?
296:デフォルトの名無しさん
18/05/03 14:46:31.58 hvfEvXXP0.net
>>292
CASL くらいはやったよ、8080、z
297:80/6809/80x86/z8000/r3000、まだ若かったからどんどん覚えることができたんだ… でも、もうおなかいっぱいだ…
298:デフォルトの名無しさん
18/05/03 14:47:30.87 1IvMgmqBM.net
次元が違うだろ
ILは高級なオブジェクト指向言語
そもそも機械語に似せることを意図されていない
299:デフォルトの名無しさん
18/05/03 14:51:41.82 hvfEvXXP0.net
>>294
ハードウェアマシン語とプログラム言語との間に、なぜ仮想マシンと仮想的な言語(IL/JVM)が採用されるようになったのか?そこが今でも判然としないのです…
300:デフォルトの名無しさん
18/05/03 15:42:16.53 +UDEH62l0.net
>>295
ドライバは何故存在するの?つってる様なもんだぞそれ
301:デフォルトの名無しさん
18/05/03 15:45:53.15 hvfEvXXP0.net
>>296
いえいえ、階層性を全否定するわけではありません
「仮想マシンと中間コード」の必要性を問うているのです…
302:デフォルトの名無しさん
18/05/03 16:06:28.64 +UDEH62l0.net
仮想マシンに焦点を絞るなら、ハードウェアの差異を吸収する為では
(.netはJavaVMほどあちこちに移植されてないというだけで)
ILに関して言えば、複数の言語(C#、VB.net、F#、他)を共通のフレームワーク上で動かせる様にする為
303:デフォルトの名無しさん
18/05/03 16:13:17.79 ioUmuI6x0.net
>>298
それならハードウェアや言語の統一を目指したほうが建設的なのでは?
304:デフォルトの名無しさん
18/05/03 16:19:16.65 +UDEH62l0.net
>>299
不可能だろう
収斂進化により表面上似た様な機能を搭載する事はあっても、内部構造は特許なり権利なり絡んで来るから同じに出来ないし
JavaScript+CSS3ですらブラウザベンダ間で足並み揃えられないのに、言語の統一なんて出来る訳が無い
305:デフォルトの名無しさん
18/05/03 16:37:31.89 hvfEvXXP0.net
現状、中間言語側でも少なくとも JVM/.net framework にわかれちゃっているからねえ…
306:デフォルトの名無しさん
18/05/03 18:59:07.03 OyWVOyw+0.net
>>301
LLVMの中間コードをご存知でない?
307:デフォルトの名無しさん
18/05/03 19:06:23.30 hvfEvXXP0.net
>>302
LLVM はコンパイラの中で完結しているのではないかな?
308:デフォルトの名無しさん
18/05/03 19:12:34.62 R63QgqLH0.net
?
309:デフォルトの名無しさん
18/05/03 19:15:49.37 OyWVOyw+0.net
>>303
コンパイラ開発者はとりあえずLLVM-IRに変換すればいいし最終段で機械語に変換するか直接実行するか他の言語のコードに変換するかは自由
というか最初と最後だけ作ればいいわけだから寧ろLLVM-IRが中心
310:デフォルトの名無しさん
18/05/03 19:22:47.84 hvfEvXXP0.net
>>305
うん、それはよくわかる
すべての「構造化」を全否定するわけではないんだよ
311:デフォルトの名無しさん
18/05/03 19:24:37.99 R63QgqLH0.net
すまん、途中から意味分からん
312:デフォルトの名無しさん
18/05/03 19:27:41.50 kS9rU1V5a.net
.netは仮想マシンなんかつかってないじゃん
313:デフォルトの名無しさん
18/05/03 19:42:37.77 hvfEvXXP0.net
>>308
URLリンク(ja.wikipedia.org)(%E5%85%B1%E9%80%9A%E8%A8%80%E8%AA%9E%E5%9F%BA%E7%9B%A4)
仮想マシン VES は定義されているようだ
314:デフォルトの名無しさん
18/05/03 19:45:56.40 Vq5AVdhm0.net
おい!初心者の内容じゃねーぞw
315:デフォルトの名無しさん
18/05/03 20:04:38.77 kS9rU1V5a.net
>>309
VESは最終段階のコンパイラだよ
316:デフォルトの名無しさん
18/05/03 20:12:05.92 OyWVOyw+0.net
JITコンパイルはVMとしては認めない派閥が存在することは認める
317:デフォルトの名無しさん
18/05/03 20:31:23.35 GKu15pasa.net
URLリンク(www.slideshare.net)
このスライドの67枚目の「良い例」のコードってこれで本当にいいの?
MSDNのParallel.Forの解説には
---
318: localFinally デリゲートはスレッドごとに 1 回呼び出され、各スレッドのローカル状態に対して最後の操作を行います。 このデリゲートは、同時に複数のスレッドで呼び出される可能性があります。したがって、共有変数へのアクセスを同期する必要があります。 --- と書いてあるから、countはアトミックに操作しないとまずい気がするんだけど https://msdn.microsoft.com/ja-jp/library/dd783299(v=vs.100).aspx
319:デフォルトの名無しさん
18/05/03 21:13:05.22 L6Rknns90.net
>>313
MSDNの使用例にも
localState => Interlocked.Add(ref result, localState)
とあるしそれで正しいと思うよ
320:デフォルトの名無しさん
18/05/03 21:46:41.74 GKu15pasa.net
>>314
いやだから、MSDNのサンプル通りにするなら、>>313の
localCount => count += localCount
は、
localCount => Interlocked.Add(ref count, localCount)
でないとまずいと思うんですが
321:デフォルトの名無しさん
18/05/03 21:48:43.65 ygisZEFQM.net
そうだねだからどうしたの
資料公開してる本人に言えばいいんじゃないの
322:デフォルトの名無しさん
18/05/03 22:02:53.69 nzAwdXFB0.net
大して変わんねーよ
そんなに処理分けたきゃ
別exeにしてキックしろよ
後はできるならOSがうまくやるし
OSがうまくできなかったらそりゃできないんだろうよw
323:デフォルトの名無しさん
18/05/03 22:05:27.65 WY9OnNQR0.net
どうした発作か
324:デフォルトの名無しさん
18/05/03 23:06:32.43 L6Rknns90.net
>>315
いや、>>313の言う通りと言ったつもりなんだが・・・ふらっと怖いな
325:デフォルトの名無しさん
18/05/03 23:38:41.22 aADwc6210.net
おバカwebを鵜呑みにしない有望な>>313なんやからもう少し優しくレスしてやれよw
326:デフォルトの名無しさん
18/05/04 00:16:38.85 Xm9CVOioa.net
この例だとForよりAggregate使ったほうがいいな
327:デフォルトの名無しさん
18/05/04 00:37:22.14 pvqh60Bra.net
>>319
自分の日本語に疑問を持たない君の方が怖いよ
「これ(A)」でいいのか、Bじゃないのかって質問に「それ」で正しいと答えたら
質問した方は普通は正しいのは「これ」の方だと理解する
328:デフォルトの名無しさん
18/05/04 02:08:40.41 DbHU5BaK0.net
C♯でJavaScriptで生成されてるチャットサイトからコメントビューアを作りたいのですが、JavaScriptが生成したHTMLを取得するのに適したライブラリってどれでしょうか?
Formアプリで作る予定ですが
webBrowserコントロールが一番手軽でしょうか?
329:デフォルトの名無しさん
18/05/04 02:10:39.64 DbHU5BaK0.net
>>323
追記
使う.Net frameworkは4.6.1です
Nugetで公開されてるライブラリ等でも問題ありません
330:デフォルトの名無しさん
18/05/04 02:53:44.45 JYHlDWX6M.net
javascriptで生成といっても生成元になるデータを何処かでリクエストしてる筈
そっちを解析して直接的にHttpClientでgetしたほうがええよ
331:デフォルトの名無しさん
18/05/04 04:15:13.73 DbHU5BaK0.net
ありがとうございます
単純にセッションが必要っぽそうだったのでHttpClientでもいけそうです
使い方調べ直します