[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 02/29 10:30 / Filesize : 136 KB / Number-of Response : 536
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 00:52:20.67 ID:OtXGSzkV.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part118 [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/tech/1448207673/

■関連スレ
C#, C♯, C#相談室 Part89 [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/tech/1443271409/

■コードを貼る場合は↓を使いましょう。
ideone.com/

232 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 01:02:04.87 ID:vHpbqQsu.net]
継承はアンチパターン

233 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 01:02:40.81 ID:qItXnEJ5.net]
>>210
ソースもってこいや!

234 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 01:09:38.20 ID:ohcgMxuP.net]
FileStreamとMemoryStreamで共通の処理なんてあるのかね

235 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 02:08:36.47 ID:REXLJUev.net]
素人はわけもなく継承を使ってみたいんだよ。

236 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 02:45:20.79 ID:9ExexpSh.net]
public class A<T> where T : Stream {
 public T strm;
 public A() {}
}

public class B : A<FileStream> {
 public B() {
  strm = new FileStream("", FileMode.Open);
 }
}

public class C : A<MemoryStream> {
 public C() {
  strm = new MemoryStream();
 }
}

237 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 05:37:38.22 ID:Mwo03qgv.net]
>>236
内部実装のためにクラスの型引数を汚すな
共通のA型として扱えなくなってそれこそ継承の意味がない

238 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 07:03:28.50 ID:blpM25DK.net]
class B {
 public abstract Stream Create();
}

class M {
 public override Stream Create(){…}
 public void Method() {
  var s = base.Stream as MemoryStream;
 }
}

239 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 07:53:03.81 ID:t4nfvp5Z.net]
さっきからクソクラス貼ってる奴は何なの?
芸人気取り?

240 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 07:59:15.01 ID:omcXALNz.net]
>>226
> 固有のメンバーの呼び出し
それを使って、BとCに同じ振る舞いを持たせたいのか?
必要なケースが浮かばないが、無理矢理やるならAに
abstract int 振る舞い()
みたいなのを持たせれば良いが、お薦めはしない。



241 名前:226 mailto:sage [2016/02/08(月) 11:18:31.02 ID:LZ12yzMb.net]
まだ分からないことが多いので
皆さんに提示していただいたのを参考に一つずつ調べてみます

>240
ストリームに対する基本的な処理は
クラスAでまとめておいて
FileStreamやMemoryStreamを使うときは
それぞれ別のクラスBやCを用意して
そこではFileStreamやMemoryStreamのみが持つメソッドも
呼び出せるようにならないかなと思いました

242 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 11:50:15.03 ID:GixGib55.net]
>>241
固有の機能は直接Streamプロバティーを弄るんじゃなくて、固有の機能を使うメソッドをそれぞれのクラスに実装するのが常套手段だね

243 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 14:22:28.12 ID:Wxu8bEfW.net]
委譲案件

244 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 15:39:39.69 ID:R5fKsVvX.net]
フォーカスを奪わないで外部プログラムを実行する方法を教えてください

245 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 16:23:11.68 ID:ONEbZjvm.net]
外部プログラムを実行してから、
元のフォーカスに戻ればいいんじゃね?

246 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 16:28:23.58 ID:7T6Ba+h0.net]
外部のプログラムがフォーカスを弄る可能性があるので確実な方法は無い
特定のケースで良いのならフォーカスの奪い合いをする

247 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 18:23:27.98 ID:cKFrgwtc.net]
>>142ですが
>>152のやつのコードを書いてみたので載せておきます

ideone.com/LPaQn3

248 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 19:37:53.54 ID:omcXALNz.net]
>>247
お疲れ様。

細かい点は色々あるけど、初心者でこれだけ作れたら十分だと思う。

一点だけ。
Checkerは、static classでOK。

249 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 23:47:56.13 ID:Y0ekGZiq.net]
ダサいコードだな
センスないよ

250 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 00:37:07.07 ID:1ndwTYNc.net]
>>249
お前のコードをみせてみろ



251 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 04:33:13.63 ID:+R3lhPoz.net]
いやらしいっ

252 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 11:30:59.99 ID:LZa6/uPt.net]
Listから指定した範囲(intLange)の値を取得する時、範囲の大きさにもよるとは思いますが
for (int i = 0; i < intLange; i++)
{
bytArray[i] = lstArray[i];
}
よりも
bytArray = lstArray.GetRange(0, intLange).ToArray();
の、方が早いですか?

253 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 11:35:24.39 ID:ki2Dugwk.net]
>>252
それforとforeachの差だからね
最新のバージョンでは知らないけど、2.0や3.0の頃だと1万回ループで数百msの差で前者のほうが早かったはず

254 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 13:02:46.44 ID:/Ul9S+Gp.net]
実測してみるしかないと思う
状況によって、添字の有効範囲チェックがJITで消去されるかとかも変わる

255 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 13:50:52.33 ID:ltAmqOcf.net]
じゃ測って教えてください

256 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 14:02:17.15 ID:QdOIBFj9.net]
ググれば実測してるサイトでてくんだろ

257 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 15:49:05.37 ID:LZa6/uPt.net]
>>253
ありがとうございます
確かにListのGetRangeってforeachのRangeと同じですね
範囲指定して一括取得だからforで1個ずつループするよりも速いと思ったら、逆だったのですね
調べてもforeachの方が遅いのばかりでした
List.ForEachにすれば少し早くなるみたいですが、素直にforを使っておきます

258 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 18:54:10.80 ID:ki2Dugwk.net]
>1万回ループで数百msの差
これ見て後者で良いですねというレス期待してたんだが・・・

259 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 20:37:53.51 ID:GXK9v6ZU.net]
LINQ嫌いというか、LINQが理解できないオッサングラマが多いだけなんじゃね

260 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 21:57:04.73 ID:kINyOVJ+.net]
linq嫌いなのにsqlは大好きなオッさんなんなんだろう
昭和から働いてるエンジニアは不思議がいっぱい



261 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 22:12:09.83 ID:g5cfApp1.net]
マイクロ、ナノ秒の差でも速いほうがいいとか言っちゃうのは初心者にありがちだからそこも教えるべきなんじゃないかな

262 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 22:18:05.62 ID:QoXK4omQ.net]
>>252
後者はメソッド呼び出しのコスト + GetRangeとToArrayで2回ループ&インスタンス生成がかかる

GetRangeの代わりにTake使えば少しましになる
本当に速度が必要なら前者しかないけど

ちなみにforとforeachにそんな差は無いぞ

263 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 22:42:05.97 ID:8C608Sxj.net]
linqの欠点はデバッグしにくいだけだから、ハマったらどうしようもない複雑な奴は避けるべきではあるな
単純なlinqなら積極的に使うほうが見通し良くなるのにな

264 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 00:11:36.02 ID:5vn52npc.net]
FuncとActionで型キャストする必要がある時があってはまったわ

265 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 00:40:08.52 ID:jozDLnvP.net]
Linqでパラレルで回して速くできたりしないのか?

266 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 01:05:06.08 ID:m6iCwwPq.net]
C++では
struct A {int i;};
std::vector<A> v;
v.push_back(A());
v[0].i++; // ←こうできるのに

C#では
struct A {public int i;}
var list = new List<A>();
list.Add(new A());
//list[0].i++; // error CS1612: 変数ではないため、'List<A>.this[int]'の戻り値を変更できません。
A a = list[0];a.i++;list[0] = a; // ←こんな感じにしてる

これはどうしようもないんでつか?
this[int]で値型のコピーが返されるからどうしようもないですか?

267 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 01:26:54.77 ID:+0u+KGwQ.net]
>>266
発想が間違ってる

268 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 03:18:08.00 ID:lkaYzkT1.net]
>>266
listの中身変えるな

269 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 07:54:24.62 ID:CjsvPSL/.net]
>>266
自分で答え書いてるじゃん
そういう場合はクラス使え

270 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 19:56:16.17 ID:4jI7WjZu.net]
>>296
> そういう場合はクラス使え

ありがとうございます
var a = new A[10];
a[0] = new A();
a[0].i++; // ←これはうまく動く
これは一体どういうわけなんでしょう?

foreach (var i in typeof(A[]).GetInterfaces()) Console.WriteLine(i);
foreach (var i in typeof(List<A>).GetInterfaces()) Console.WriteLine(i);
で確認してみると両方ともIListとIList`1[A]を実装しておりそれぞれインデクサは
object this[int index] { get; set; }
T this[int index] { get; set; }
であり、これどっちもうまく行きそうも無いのになぜ配列は成功するんでしょうか?

ちなみに配列でもジェネリック版を使うと失敗します
((IList<A>)a)[0].i++; // error CS1612:
さらにリストに非ジェネリック版を使おうとしても
((System.Collections.IList)list)[0].i++; // error CS1061: 'object' に 'i' の定義が含まれておらず(略)
という想像通りの結末が待っています



271 名前:270 mailto:sage [2016/02/10(水) 20:09:08.83 ID:JS1EW5Jr.net]
あ、ちなみに>>270はクラスを使わず
struct A {public int i;}
のままでの話です

272 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 20:30:51.04 ID:GRD3jx6h.net]
>>265
出来るでしょ

273 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 21:02:55.80 ID:kANvp85U.net]
>>270
配列の場合はコピーではなく、元のデータそのものにアクセスするから。

274 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 21:39:28.41 ID:lkaYzkT1.net]
それぞれの処理がそれなりに重くないと、パラレルにしても早くならない。

275 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:21:04.39 ID:CjsvPSL/.net]
>>270
MSIL見ればたぶん分かるけど、IList<>のインデクサと配列のインデクサは別物
↓参考
stackoverflow.com/a/6705630

276 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:40:43.38 ID:EiL0Rwaw.net]
>>273 >>275
おおっ!!
リンク先をぼんやり見るに配列のインデクサは
IListのものともIList<T>のものとは別物っぽいですね

どうやらMSILを勉強したら疑問は全部クリアになりそうです

277 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 08:48:06.29 ID:5VElGoG8.net]
C#とMySQLで素人ながらに帳票システム作ってるんだけど
形になってきたらテーブルの数が100近くなってきたんだが、
それなりのシステムになってくるとテーブル数ってこれくらい増えるもの?
それとも設計の仕方自体が問題?

278 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 09:12:07.75 ID:bLlX/NkI.net]
テーブル数100は相当なシステムだと思うけど
たとえばどんなテーブルがあるのか2,3例を出してほしい

279 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 09:32:15.00 ID:5VElGoG8.net]
やっぱり多いですか・・・
個人のデータが10種類くらい、項目別集計結果(種類としては4種類なので4×12)、
帳票結果12ヶ月分、集計計算するための条件設定項目20くらい(いろいろな条件によって計算処理が変わるため)
項目別集計結果と、設定項目が多いんだろうと思うのですが

システムとしては各人の個人データを元に、条件設定項目から各人がどの項目を集計するか判定し、
項目別集計結果(各テーブルはその月の全員の利用実績が記録されている)から拾ったデータや定義されたデータを
拾って計算処理に追加、さらに複雑な条件を条件設定項目を元に計算式または結果を変えて処理して
最後に月別の帳票結果に落とし込むという流れです

実際まだ100までいってないのですが、今の増え方だと完成になる頃にはそれくらいにいきそうで・・・
テーブルまとめられるのがないかを考えた方がいいですかね?

280 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 09:37:29.27 ID:z2rGujpW.net]
設計upしてくれないとなんとも言えないと思うが100行くような設計は間違ってそう。
少なくとも個人でやれる規模じゃない



281 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 09:38:46.08 ID:M5CwB86R.net]
>>279
集計結果はテーブルに落とさずにクエリーやビューで実現できないかを考えると良いと思います
集計テーブルは更新し忘れや更新順の間違いなどのバグ混入があるから
リアルタイムで結果を得られるビューを多用したほうがシステムは安定します

282 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 10:04:02.34 ID:bLlX/NkI.net]
集計テーブルが良くないのはもちろんだけど、
項目集計結果の4x12が理解できない
そんなもんカラムに月持たせたらいいだけじゃないのか

283 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 10:09:53.69 ID:EtulpAui.net]
いまいち分からないけど、個人,条件設定,集計結果がテーブルであって
残りはクエリか一時テーブルじゃないか?

284 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 10:11:05.88 ID:EtulpAui.net]
>>283
x 集計結果
o 帳票結果

285 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 10:29:30.35 ID:5VElGoG8.net]
なるほど、一時テーブルとクエリという方法で検討してみます どちらも全然頭になかったです>>
>>282
項目別集計結果は、帳票つくるシステムとは別に、拠点事業所の端末で作成されたcsvをメインのデータベース内の
月別テーブルにアップするように先に設計していたのですが、あわせて修正できないかやってみます
ただ、ひとつ疑問は、1ヶ月のレコード件数が最大で1万件程度ですが、一つのテーブルにして12万件入れるのと
1万件を12テーブル持つのでは、前者がいいということでしょうか? 
設計時は、一つのテーブルのカラム数が多くなるより(なんでも一つのテーブルに入れるなっていう記事を目にしたことがあって)
テーブルに分けた方がいいかと思って計算条件のための設定項目なんかもテーブル数が増えていったのですが
同じカラム構成のテーブルだったら、識別のためのカラムを追加してまとめたほうがよいものでしょうか

286 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 10:47:51.75 ID:ztBwyrLR.net]
>>285
件数は億行っても問題ないな。
それがまずいなら、パーティショニング
を検討してみたら

287 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 11:37:29.78 ID:ECLK8Wqe.net]
>>285
> 同じカラム構成のテーブルだったら
って言う話ではなくて、同じデータは纏めろってこと
何のデータか知らんけど、1月分と2月分って例えば売上げなら両方売上げと言う同じデータでしょ
以前は極端に件数が多いとかで分けることもあったけど、今時は >>286 の言う様に億クラスでも扱えるようにDB側で色々対応してるし、そもそも数十万件オーダーなんでしょ?

288 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 11:37:43.16 ID:8yKF6m48.net]
テーブルが今現在いくつあるかは問題じゃない
集約が今現在いくつあるかが問題
集約が多すぎるなら設計のやり直しが必要
適切なら数ならデータベースのリファクタリングは容易い
先ずは今現在のコンテキストマップとそれぞれのコンテキストにどんな集約があるかを書き出してみる事だ
個人で組んでるなら休日1人日で充分かな

289 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 14:46:12.43 ID:cgj/3tMp.net]
FormにPictureboxを貼り付けて、Formをリサイズした時にフォームサイズに比例してPictureboxもサイズ変更したいのですが、
Anchorを四方向に指定するだけではダメなのでしょうか?
実際にやってみると、拡大した時に大きくなり過ぎて、縮小した時に消えてしまいます。
ButtonでAnchorを四方向にしても同じでした。
Windows7、VS2012、Framework4.5にて確認しています。

290 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 14:59:02.23 ID:5VElGoG8.net]
みなさん丁寧なご指導ありがとうございます
とりあえず見直し初めて、20テーブルくらいになったところですが、WorkBenchで見ていてもえらくすっきりして
計算処理の実行そのものも劇的に早くなりました

>>288
データベースの勉強不足で【集約」ってのがピンと来ないもので・・・ぐぐると集約関数ってのがでてきますが、
テーブルの中でグループ化している数が多すぎると問題ってことでしょうか?
コンテキストっていうのも初心者の馬鹿な私には掴み所がない言葉で、テーブルをさしているのでしょうか
それとも扱うデータにおいての諸要素のことを指しているのでしょうか?



291 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:18:23.73 ID:M5CwB86R.net]
>>289
そういうソフトはwpf使えば簡単にできるしトラブルも少ないんだけどね

292 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 16:15:50.89 ID:RfBB3K0B.net]
親プロセス...GUIアプリ
子プロセス...コンソールアプリ

親プロセスで子プロセス起動して、親プロセスは子プロセスからの標準出力をリダイレクトして簡易的な文字列通信を行ってます。
これを、逆に親プロセスからの文字列を子プロセスで拾うようにしたいのですが、いい方法を教えて下さい。

293 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 16:37:05.76 ID:M5CwB86R.net]
>>292
NamedPipe使ってみたらどう?

294 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 17:36:47.18 ID:rBnM9L0I.net]
>>292
子プロセスを起動引数または標準入力を入力したら標準出力で結果を返す関数と見なして、単発で繰り返し呼べばいい
疎結合にするためにわざわざプロセス分けてるんだろ?
複雑な通信したら本末転倒だろ

295 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 17:52:03.60 ID:LNzJYiWm.net]
勝手な妄想でよく喋るなあコイツ

296 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:54:21.19 ID:xg5e2eV7.net]
>>289
アンカーは四方からの距離を一定にするだけなので
比例させたいなら計算で求めてBoundsに設定してください

297 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 21:28:17.58 ID:onfBwuXU.net]
クラスの配列を作りたい場合、
こんなふうにすると1000個のクラス配列が出来たのですが、
こういうやり方で良いですか?
最初に1個の大きさで確保しておいて、そこに1000個を代入できる理由が分かりません。
static void Main(string[] args)
{
 MyClass[] mc = new MyClass[1];
 mc = myfunc();
}
static MyClass[] myfunc()
{
 MyClass[] mc = new MyClass[1000];
 return mc;
}
class MyClass
{
 int i;
};

298 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 21:32:31.88 ID:XGMVVJFq.net]
要件次第ですがプログラムが動作するならそれで問題ありません

299 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 21:34:35.73 ID:6rGpnoDF.net]
>>297
new MyClass[1] の行は全く意味がない。
再代入するな。

300 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 21:50:03.96 ID:LNzJYiWm.net]
int i = 1;
i = 2;

最初に1を代入しておいて、そこに2を代入できる理由が分かりません。と言ってるのと同じ。
配列だと特殊な代入がされる、というようなことはない。



301 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 21:52:08.90 ID:y42s+ygJ.net]
>>297
var使えばこういう誤解も無くなるんだろうか…

302 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 22:19:29.15 ID:0OAFh+KU.net]
>最初に1個の大きさで確保しておいて、そこに1000個を代入
してるわけじゃない
配列を表す変数を宣言(MyClass[] mc)して
確保(new MyClass[1] や new MyClass[1000])した領域を指す値をそこに代入している
mc = myfunc() したら最初の new MyClass[1]の領域は捨てられる

303 名前:デフォルトの名無しさん [2016/02/11(木) 23:48:59.67 ID:xmsrvKus.net]
ド素人質問だと思うのですが、
フィールドって必要なのでしょうか?

メソッドに引数を渡せば
大抵は事足りるんじゃないかと感じており

それとも、属性に保持する情報って、
大規模開発では多いのでしょうか?

304 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 00:06:42.25 ID:+A7Pa+CR.net]
引数増やすのめんどいからオブジェクト指向的にする。

別に手段の1つにすぎないんだから好きにやれば。

オブジェクト指向だって万能じゃないし。

305 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 00:16:33.85 ID:gmcC03qf.net]
>>303
大規模開発ではとんでもない数のフィールドが書かれる
しかしそれはたいてい設計者がクソなだけなんだけどな

306 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 01:50:15.47 ID:bwdIAcv4.net]
人クラスなら名前、生年月日、性別とかは必要だろ
フィールドに保持しなかったらどこに保存するのさ

307 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 03:26:50.21 ID:/kaeyohP.net]
純lisperなんじゃないの(適当)

308 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 04:01:17.91 ID:YUGvj8/e.net]
フィールドとは何なのかはっきりさせんと話が始まらん

プライベートなメンバ変数までフィールドで不要だっていうなら
保持すべき情報はどこにもつんだと

309 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 04:05:44.88 ID:00n43yFC.net]
>>303
基本的にその考え方でOK。
ある粒度で状態を持ちたい時だけに使えば良い。

310 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 10:18:37.00 ID:rgit47xD.net]
foreachを使う場合にもindexの数字が欲しい場合、int i=0 を冒頭に入れる必要がありますが、
int i = 0;
foreach (var item in items)
これを一行にして、
foreach (int i=0, var item in items)
などどできませんか?



311 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 10:29:32.09 ID:YfpA0AcD.net]
>>310
>int i=0 を冒頭に入れる必要がありますが、
必要ないよ

foreachでindex使いたいならこれで良いんじゃね?
foreach(var element in boys.Select((name, index) => new {name, index})) {
SampleMethod(element.name, element.index);
}

312 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 12:02:57.40 ID:rgit47xD.net]
>>311
ありがとうございました。こんな書き方は知らなかったです。
int i=0; と書くのは時代遅れでしょうか?

313 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 12:10:45.51 ID:EWonquhS.net]
集合演算にインデックスを持ち出す事がまず時代遅れ

314 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 12:26:58.04 ID:/IhDLmoA.net]
時代遅れだろうが何だろうが需要があるからSelectにも
(IEnumerable<TSource>, Func<TSource, Int32, TResult>)なんて
オーバーロードがあるんだよなぁ

315 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 12:51:27.19 ID:00n43yFC.net]
>>312
先ずは、どうして"i"が必要かを考えるべき。

316 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 14:08:59.79 ID:0EJEZiQw.net]
for (int i = 0; i < items.Count; i++) {var item = items[i];}
じゃいかんの?
Enumeratorの代わりにintで回すのって素朴でいいじゃん

317 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 14:45:43.58 ID:583AFnzM.net]
昔はコレクションのアイテム削除でエラーとなるからインデックスが普通だったけど
今はToArray()使うのが一般的だから、インデックス使う用事が殆どなくなったよな

318 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 17:56:35.96 ID:gWHJSKHH.net]
for/foreach で回すなら >>311 より >>316 の方がシンプルでいい

Ix の ForEach なら許容範囲
items.ForEach((item, i) => { … })

319 名前:303 [2016/02/12(金) 21:32:41.81 ID:1BqXCbHv.net]
フィールドに関して、色々なご意見ありがとうございます

特に保持すべき必要が無い場合は、
あえてオブジェクト指向に則ってプロパティを持つ必要は無いようですね

参考になります

320 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 21:37:41.69 ID:/kaeyohP.net]
それにしても、変なことを質問するもんですね
必要でないことでもやるべきですか?って人に聞きながら育ったのかしら



321 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 22:01:07.80 ID:E6xN8nAg.net]
過不足なく言われた事だけをやっていれば良い
そういう教育を受けてきた世代なんだろう
何を隠そう私もそういう人間だからよくわかる

322 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 23:14:54.71 ID:00n43yFC.net]
必要かそうでないかを適切に判断出来るのなら誰も苦労しない。

323 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 00:17:04.86 ID:jNiAqett.net]
何事にも疑問を持つことは重要な素養であるとは思うが
常識とされているものの場合、必要である理由を考えるべきで
不要である可能性を列挙するアプローチは間違いの元だな

世の中大抵のことはデファクトスタンダードが正しいものだ
ただ、全てじゃないから検証するのも面白い

324 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 07:17:00.61 ID:xA/85emw.net]
ジャップIT業界の常識が正しいとは思えんが

325 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 07:45:12.36 ID:BxXCiqDX.net]
必要かどうか予め判断するんでなく
必要になったら使えばいいだけだよ
遅延評価好きだろお前ら

326 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 08:36:03.93 ID:Aj9JV+Py.net]
>>311
LINQ使うならforeach全く要らない。

327 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 09:04:32.16 ID:bNYKyrDh.net]
最終的な出力にはforeach必要でしょ
ForEach厨は関数型というものを理解してないアホ

328 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 09:12:00.94 ID:BxXCiqDX.net]
forceがないからToArrayとかやってるの見ると超ダセーと思う

329 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 09:54:08.99 ID:r5Ze34qU.net]
ググっても出てこなかったから質問します。
C# WPFでフォーム上のラジオボタンを○から自作画像に置き換える方法を探しています

どなたか実装方法またはやりたいことを別な方法で実装する方法ご存じないでしょうか


要は画像A、画像Bがクリックされるたびに交互に切り替わって
その状態を取得できればいいです

330 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 10:05:58.61 ID:bNYKyrDh.net]
>>329
WPFではそういうのは一行もコード書かないんだよ
XAMLでControlTemplateとVisualStateManagerを使う



331 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 10:33:00.45 ID:gWYi+rc9.net]
DataTableで行削除について質問です

1万件くらいあるテーブルをDataTableに読み込んで処理していて
指定のカラムに入ってる特定の区分(値)のデータのみ削除したいのですが、
Linqで絞り込んだコレクションをforeachで回して
dt.Rows.Remove(row)とすると、回す毎にコレクション自体が変わってしまってエラーとなるし
かといってforで全件回すのもなんかスマートでないというか
for (int i = 0; i < dt.Rows.Count; i++)
{
if(dt.Rows[i].RowState != DataRowState.Deleted && (int)dt.Rows[i]["hoge"] == hoge
{
dt.Rows[i].Delete();
}
}
他に方法はございますでしょうか

332 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 10:35:41.14 ID:wFus9lhk.net]
>>331
DataTableに入れる前のクエリで特定行を除く






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<136KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef