757:デフォルトの名無しさん
16/01/17 00:46:17.28 wm0zglwe.net
>>750
delegateはラムダ式の入れ物ってことで理解できない?
Action printStr = () => Console.WriteLine("Str");
↑delegate ↑ラムダ式
>ただ、複数のメソッドを一つのデリゲート型に入れられ、実行時には順次実行される
これはたぶんeventの機能かな
758:デフォルトの名無しさん
16/01/17 00:51:37.12 DW1lkDap.net
IViewer viewer;
switch (hoge)
{
case A:
viewer = new Viewer_A(); (breakは省略)
case B:
viewer = new Viewer_B();
}
viewer.Start();
すみません、こうでした
759:デフォルトの名無しさん
16/01/17 01:27:37.04 Pwa5r+52.net
ここで聞いていいのかわからないけどとりあえずC#で作ってるからここで。
データベース上のテーブルaを参照して処理をするクラスXとYがあったとする。
すぐに思いついたのはaからデータを引っ張るクラスを作ってXとYに包含させることなんだけど、
リソースやパフォーマンス上の理由からaから引っ張ったデータをXとYで共有することになった。
だからaから引っ張ったデータをキャッシュしておいて、キャッシュしたデータを返すメソッドへのアクセス方法を、
delegateかinterfaceとしてXとYにprivateで定義してpublicメソッドでそのフィールドに参照を格納できる方法を実装するのを考えた。
しかしながらそのデータはXとYにとっては結構クリティカルなデータなのに、
リソースを共有したいというアプリケーション側の都合でそれを参照する方法を外部に移譲していいのかと疑問に思って行き詰まった。
ケース・バイ・ケースだと思うけどこの場合どういう実装がいいんだろうか。
オブジェクト指向について記事書いてるページ回りながら3日くらい悩んでるんだが思いつかないので意見を聞きたい。
760:デフォルトの名無しさん
16/01/17 01:35:48.39 R7UCENDa.net
>>754
XとYが共にテーブルaからの取得結果Zをコンストラクターで受け取る
761:デフォルトの名無しさん
16/01/17 01:40:34.65 TkYjcAHo.net
>>754
aからデータを引っ張るクラスZを作ってXとYに包含させる
キャッシュはZの内部でやる
762:デフォルトの名無しさん
16/01/17 02:23:38.46 Pwa5r+52.net
回答ありがとう。
>>755
コンストラクタで受け取るようにすれば確かにデータなり参照なりを引き渡さないとインスタンスを作れなくなるからいいかもしれない。
>>756
クラスZをXとYに包含させるとして問題はそのクラスZへの参照をどうやってXとYに渡すかなんだ。
XとYの内部でZのインスタンスを作ってしまうと結局データは共有されないからどうしようかなって考えてる。
763:739
16/01/17 11:00:01.49 mdoFHj7B.net
>>750
> デリゲート型変数にメソッドを入れて何の意味が?
それは、「int型変数に整数を入れて何の意味が?」と言ってるのと同じこと。
なぜわざわざint型変数を使うかというと、
①プログラム実行時に、中身の整数を動的に変更できる
②メソッドの引数として変数を使うことにより、整数を扱う処理を共通化(汎用化)できる
といったメリットがあるから。
デリゲートも同じ。大雑把に言えば、「整数」が「メソッド」になったというだけ。小難しく考える必要はない。
例えば>>725のいうLINQのFirstメソッドは、「ご指定の条件に一致するものを検索します」というメソッドで、
First(コレクション, デリゲート)
のように、デリゲート型の引数で検索条件を受けとる仕様になっている。
これにより、First()を呼ぶ側が、検索条件を自由に指定(入れ替え)できる。
つまりデリゲートのおかげで汎用の検索メソッドにすることができたわけで、これは要するに、上に書いた②と同じことだよね。
764:739
16/01/17 11:00:26.84 mdoFHj7B.net
> ラムダ式で使う使い方は、少なくともACTIONデリゲート型を使ったデリゲートよりは分かるのですが
もしかして、ラムダ式とデリゲートとをごちゃ混ぜに考えてる?
イメージを一言で言えば、
・デリゲートは、「メソッドを入れる型、もしくはその型の変数」
・ラムダ式は、「メソッドをシンプルに書いたもの(式)」
なので、両者は全然別のもの。
で、ポイントとして「デリゲートには、通常のメソッド以外に、ラムダ式を代入することもできる」。
上のFirst()の例で言えば、検索条件をメソッドで渡せるおかげで、どんな条件でも指定して検索できるんだけど…。
裏返せば、First()を呼ぶには、「検索条件をあらわすメソッド」を作らなければならないということ。
でも、ちょっとした検索をするだけのために、わざわざ検索条件用のメソッドを用意するのは邪魔臭いよね。
そんなときにラムダ式を検索条件として渡せば、メソッドを別途用意する必要がなくなるってこと。
765:デフォルトの名無しさん
16/01/17 11:01:33.57 MLXXnKHy.net
ストラテジーパターンです
終わり
766:デフォルトの名無しさん
16/01/17 11:18:50.14 7AwZoLrq.net
関数を変数として扱うだけなのにストラテジーとかいちいち命名しちゃう痛い人がいるね
767:739
16/01/17 11:27:25.16 mdoFHj7B.net
被ってしまいますが…
自分的には、ストラテジーパターンは、「多態性を利用して戦略を動的に変更すること」と理解してます。
で、デリゲートの場合は、多態性を用いるのではなく、メソッドそのものを直接指定しているだけなので、ストラテジーパターンとは呼べないのでは?
もちろん、やってることはどちらも「戦略を動的に切り替える」なので、意味合い的には同一だと思うのですが。
768:デフォルトの名無しさん
16/01/17 11:39:15.14 DW1lkDap.net
>>762
ありがとうございます
分かりやすかったです
>>740-741を見た時、Strategyパターンと全く同じ(IFを使うかデリゲート型を使うかが違うだけ)では?
と思いましたが、>>762の説明で違いが分かりました
769:デフォルトの名無しさん
16/01/17 11:43:32.09 mdoFHj7B.net
>>763
>IFを使うかデリゲート型を使うか
むしろ、IFを使わないためにストラテジーパターンがあるような気が…
770:デフォルトの名無しさん
16/01/17 11:51:01.51 DW1lkDap.net
>>764
マジですか?
URLリンク(www.nulab.co.jp)
こんな感じで、複数のクラス(機能)が共通のIFを持ち、戦略的に
IFを持った機能を切り替えるのがStrategyパターンと認識していましたが
すみません、こっちも認識間違ってるかもしれません。出直してきます・・・
771:デフォルトの名無しさん
16/01/17 12:06:42.79 wm0zglwe.net
補足しとくと、ラムダ式は普通のdelegateと式木delegate?に入れることができる
Action printStr = () => Console.WriteLine("Str");
Expression<Action> printStrExpr = () => Console.WriteLine("Str");
772:デフォルトの名無しさん
16/01/17 12:21:10.76 uVM8Tzne.net
>>766
最近言語仕様を勉強して自慢したくなっちゃったんだね。
せめて式ツリーをもう少し勉強してから出直すべきだったな。
773:デフォルトの名無しさん
16/01/17 12:27:11.80 yhafN9XZ.net
ラムダ式とかLINQとかキモいの廃止してほしい
774:デフォルトの名無しさん
16/01/17 12:27:35.39 mdoFHj7B.net
>>765
すみません。IFというのは、インターフェースのことだったのね。
if~elseのifのことかと思った。
>>764は忘れてください。
775:デフォルトの名無しさん
16/01/17 12:32:39.06 wm0zglwe.net
>>767
勉強したのは2年前くらいだけど、最近に入るか?
776:デフォルトの名無しさん
16/01/17 12:37:28.12 OdtYk10r.net
ラムダ式でメソッド書けるようになったけど、便利ではあるがアレはなんか違うな
777:デフォルトの名無しさん
16/01/17 12:55:42.09 rOaFrH3n.net
なんか本来簡単な話をわざわざやたら初心者に理解しづらい難しい話にしてるのがいるねw
Cのポインタ変数なんて実態はアドレスの入れ物だって理解するのが一番簡単なように、
デリゲートなんて関数ポインタの.NET版だと理解するのが一番簡単だって。
intのリテラル1とintの変数aの違いは、1はコンパイル時に値が確定するのに対してaの値は実行時に決まること。
デリゲートも同様。
普通のメソッド呼び出しはコンパイル時にどのメソッドが呼び出されるか確定するが、
デリゲート型の変数を使えばこれを実行時に決めることが出来る。
ただそれだけだよ。
778:デフォルトの名無しさん
16/01/17 13:38:07.37 P2fArTeK.net
ラムダ式可読性悪くならない?
779:デフォルトの名無しさん
16/01/17 13:57:29.65 87291EgD.net
>>773
ラムダ式を悪く
780:言う人はまずいない。 LINQは賛否両論かもしれん。
781:デフォルトの名無しさん
16/01/17 14:01:46.08 2mSqMAWV.net
ラムダ式の利便性が分からないが
C# を使うなら
Microsoftに従うしかない
782:デフォルトの名無しさん
16/01/17 14:02:10.99 Xy4jFrpa.net
>>773
ラムダ式でそうそう可読性悪くなることはないと思うけど
偶に糞長い行入れる人とかいるけど、ユニットテスト使ってないんだろうなと
783:デフォルトの名無しさん
16/01/17 14:06:58.57 pSWLpytB.net
Rubyで言えば、enum(コンテナなどの数えられるもの)を、
どの方法でソートするかを、ブロックで指定する。
例えば、ABC順とか、ファイルサイズの大きい順とか、
enum.sort_by {|item| block }
つまり、お好みの処理を指定できる。
ラムダ式・ブロック・クロージャ・無名関数・関数ポインタなども、
大雑把に言えば同じ
Pythonでは、関数に機能を追加・装飾する、
デコレータ・アノーテーションもある
def deco(func):
関数の内容を書いておいて、アノーテーションをつける
@deco
def foo():
これで、foo()を呼び出すと、
decoに書いておいた処理が実行される
784:デフォルトの名無しさん
16/01/17 14:12:52.26 HIxL+QT3.net
同じことを何度繰り返すつもりだろうか
ボケ老人か
785:777
16/01/17 14:17:08.76 pSWLpytB.net
Pythonのデコレータでは、指定した上から順に、関数が実行される。
この場合、foo()を呼び出すと、A, Bの順
@A
@B
def foo():
C#のデリゲートも、たぶん実行順番を指定できる
786:デフォルトの名無しさん
16/01/17 14:34:16.40 SO28ogQy.net
>>773
重要な意味合いを持たずコードが短く寿命も短いなら可読性上がる
そうじゃなきゃバカじゃないと使う気にならないね
787:デフォルトの名無しさん
16/01/17 14:38:03.96 yhafN9XZ.net
MSだった人の子
間違いは犯す
ラムダ式とLINQは廃止すべき
788:デフォルトの名無しさん
16/01/17 14:43:04.52 GIfr36xN.net
>>772
>関数ポインタの.NET版だと理解するのが一番簡単
ってのはみんなわかってそれをどうやって別の言葉で表現するか苦労してるわけよ
C#から入ったプログラムにはいった人にまずはCをマスターしてから来いっていうのは放漫だし
789:デフォルトの名無しさん
16/01/17 15:01:07.47 kU6BDJls.net
つまりどうゆうことだってばよ
790:デフォルトの名無しさん
16/01/17 15:11:29.81 HIxL+QT3.net
ばかばっか
791:デフォルトの名無しさん
16/01/17 15:15:15.58 SO28ogQy.net
関数ポインタとか言ってる奴が最も理解から遠い
792:デフォルトの名無しさん
16/01/17 15:32:55.32 fyCSQ8gd.net
>>781
ラムダ式は他言語でも採用されるくらい好評みたいだが?慣れだ慣れ。
Linqもクエリ構文はともかく、メソッド構文なら普通のメソッドと変わらないぞ。ラムダ式と組み合わせることが多いってだけで。
793:デフォルトの名無しさん
16/01/17 15:35:27.31 E98+Jifa.net
C++からC#へ乗り換えましたが、ラムダ式はどういうときに使うものですか?
794:デフォルトの名無しさん
16/01/17 15:57:47.18 8TKcXYcp.net
>>786
逆だろう?
lisp のラムダ式をC#が後で採用したんだよ
で,そのC#のラムダ式は,Yコンビネータを表現できるのかね?
795:デフォルトの名無しさん
16/01/17 15:58:01.70 SO28ogQy.net
設計がしっかりしているシステムでは使いません
796:デフォルトの名無しさん
16/01/17 16:00:47.64 wm0zglwe.net
Zコンビネータならできるよ
でもあんなものそうそう必要にならないだろ
797:デフォルトの名無しさん
16/01/17 16:07:34.79 B0dK5BN7.net
>>787
デリゲートを書くときタイピング数を減らそうとして使う
URLリンク(msdn.microsoft.com)
delegate void TestDelegate(string s); // こーやって定義して…
static void M(string s) {Console.WriteLine(s);} // こーいうメソッドがあるとき
TestDelegate testDelA = new TestDelegate(M); // かつてはこう。あらかじめ定義したメソッドを使って初期化
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; // C#2.0
798:からは匿名メソッド使ってラク TestDelegate testDelC = (x) => { Console.WriteLine(x); }; // C#3.0からはラムダ式でさらにラク
799:デフォルトの名無しさん
16/01/17 16:10:16.93 2WuVGkbt.net
>>787
常時
800:デフォルトの名無しさん
16/01/17 16:12:57.54 Xy4jFrpa.net
>>791
もう最近じゃdelegateという記述自体やらないよね
ActionとFunctionさまさまや
801:デフォルトの名無しさん
16/01/17 16:14:28.72 FugsQaG7.net
誰も使わなくなった言語機能削除してほしい
802:デフォルトの名無しさん
16/01/17 16:21:26.80 7AwZoLrq.net
linqでインテリセンスが常に侵されるのは嫌だなぁ。
ばんばん使う場面ならいいけど
linqクラスに明示的にキャストしたい。
803:デフォルトの名無しさん
16/01/17 16:38:22.25 pSWLpytB.net
Javaでも同じ。
最初は、メソッド1つだけのクラスを作って渡していた。
その次に、引数の中で、無名クラスを定義するようになった。
そしてラムダ式
func(クラス)
func(無名クラス)
func(ラムダ式)
804:デフォルトの名無しさん
16/01/17 17:06:56.49 2WuVGkbt.net
>>795
using消しとけ
805:デフォルトの名無しさん
16/01/17 22:39:32.61 K2essoph.net
androidのjavaやった時、C#のラムダ式とかイベント知ってると無名クラスがつらすぎた記憶
今は改善されたのかな?
806:デフォルトの名無しさん
16/01/17 22:52:06.56 ZDGiYXBb.net
どこまで詳細書いていいかわからんのですが・・・
DataGridViewにDataSetから流し込んで編集→更新してるんですが、
セルの値変更→Updateは問題なし
続けて同じセルの値を別の値に変更してUpdateCommandを実行すると
同時実行違反のエラーがでております
IDあたりが怪しいのはぐぐってわかったのですが、(IDはAutoIncrementで主キーを設定)
同じセルの値を変更したときのRowのIDが-1になってるんですよね
データベース側のIDとは当然違うので、エラーになるんだろうなとは思っているんですが、
どう解決していいものか・・・どなたかヒントをいただければ
807:デフォルトの名無しさん
16/01/17 23:01:59.20 1oqLgnXz.net
startdate 2016/1/1
enddate 2016/1/20
という二つの情報があって、
nowdate 2016/1/17
が、startdateとenddateの期間内かどうか
判定する、スマートな方法はありますでしょうか?
linqなどで、綺麗に書けそうな気もするので、
よろしくお願いします。
808:デフォルトの名無しさん
16/01/17 23:22:59.74 D8ah+tTv.net
0埋めされてないから比較しづらいって話?
クソデータをフォローしてやるためにLINQがあるわけじゃねーんだけどな
809:デフォルトの名無しさん
16/01/17 23:23:08.55 VemjrG46.net
>>798
無名クラスはあくまで型を実装するものだから
一個のメソッドを扱いたいのとは動機がちょっと違う
JFrame f = new JFrame();
JLabel label = new JLabel("");
f.getContentPane().add(label, BorderLayout.CENTER);
f.addMouseListener(new MouseAdapter() {
private int count = 0;
private void updateLabel() {
label.setText(String.valueOf(count));
label.setForeground(count < 10 ? Color.BLACK : Color.RED);
}
public void mouseClicked(MouseEvent e) {
count++;
updateLabel();
}
public void mouseExited(MouseEvent e) {
count = 0;
updateLabel();
}
});
こういう風にして、関連する複数のメソッドを同時に書きたいときに役立つ
810:デフォルトの名無しさん
16/01/17 23:25:35.96 aEwXbHoX.net
>>800
大小比較の方法も聞かないと分からないようでは生きているのもつらいだろうな。
もし日付という概念をDateTime型に入れているならまずその誤った方法を見直せ。
811:デフォルトの名無しさん
16/01/17 23:36:33.47 1oqLgnXz.net
>>803
C#
812:どころかプログラムを始めたのも3ヶ月程度の初心者で すみません やはり、そういうメソッドは、自作しないと 存在しないものなのでしょうか? C#のような歴史のある汎用開発言語なら、 自分が求めるようなメソッドがあるような気がして お聞きした次第なのですが
813:デフォルトの名無しさん
16/01/17 23:41:14.04 Xy4jFrpa.net
>>803
なんで毛嫌いするのかしらんけど、DateTime型ならDateプロパティ同士で比較すればいいだけじゃないの?
814:デフォルトの名無しさん
16/01/17 23:44:34.53 fadv0MbS.net
DateTime.Parseしてから比較すればって言おうとしたけど
>>803に駄目だって言われたからやっぱわかんね
815:デフォルトの名無しさん
16/01/17 23:45:46.61 6oiqScYX.net
日付はDateTimeだろ 日付だけを引数に取るコンストラクタもあるのに何を抜かしているのか
816:デフォルトの名無しさん
16/01/17 23:46:31.64 fadv0MbS.net
>>804
お馬鹿な手法を言語がカバーするというのは本末転倒だろ
そんなのPHPだけだ
817:デフォルトの名無しさん
16/01/17 23:48:31.91 VemjrG46.net
そもそも今どういう型で持ってるのかよーわからんしなw
あらためてDateTimeで持つんなら
startdate = new DateTime(2016, 1, 1);
enddate = new DateTime(2016, 1, 20);
nowdate = new DateTime(2016, 1, 17);
でもって
if (startdate <= nowdate && nowdate <= enddate) {/*期間内*/}
これでおkのはず
818:デフォルトの名無しさん
16/01/17 23:55:45.92 taBDRBiw.net
>>809
なんでstartとend?
819:デフォルトの名無しさん
16/01/17 23:58:37.39 VemjrG46.net
>>810
>>800
820:デフォルトの名無しさん
16/01/17 23:59:16.44 D8ah+tTv.net
質問者がstartとendって書いてるからじゃねーの
821:デフォルトの名無しさん
16/01/18 00:04:18.57 2ulx2Isr.net
>>809
非常に明快で、これ以上スマートに書く方法は無さそうですね。
質問のレベルが低すぎて、逆に難しく
捉えられたかも知れないので、
失礼しました。
822:デフォルトの名無しさん
16/01/18 00:05:00.02 vO3VhahX.net
"2016/01/01"
"2016/01/17"
"2016/01/20"
文字列を大小比較すればOK
823:デフォルトの名無しさん
16/01/18 00:28:18.51 pw6UDtYr.net
>>814
0詰めされてるとは限らんし、一旦DateTime.Parse()した方が確実だろうな。
824:デフォルトの名無しさん
16/01/18 00:37:08.79 cbExZGig.net
803はDateTime型に親を殺されたのか
825:デフォルトの名無しさん
16/01/18 00:51:22.00 5iYFR+Uq.net
エンド未定で、9999/99/99とかに出くわしたので文字列比較に1票
826:デフォルトの名無しさん
16/01/18 01:23:01.87 4n8xvv+p.net
そこは仕様を確認したまえよ
よきに計らった気になるのは間抜けの所作
827:デフォルトの名無しさん
16/01/18 01:24:32.80 wW0WiShF.net
お前らいつの間にそんなに馬鹿になったんだ?
それとも荒らしが沸いているだけか?
803が言っているのは、DateTimeはただの64ビット数値でしかないからそのまま比較できるって話だろ。
それをToStringで変換したら日付の文字列になるだけであって、
日付文字列自体はDateTimeの中には持っていないし、
そもそもC#で日付を文字列で確保するのはおかしいだろ。
つまり800の時点で
DateTime startdate, enddate
でなければおかしいのであって、その比較はif文で不等号(<)を使えば良いだけだし、
そんなのいちいち聞くようならプログラミングなんて無理だって話だろ。
>>813
スマートさを求める以前に君はもっとまず書いた方がいいよ。
言っちゃ悪いが何がスマートかも判断できないレベルだと思うよ。
828:デフォルトの名無しさん
16/01/18 01:29:06.09 LBoJ+JUg.net
>>819
>>803とか言わずに俺と素直に言えばいいのに
829:デフォルトの名無しさん
16/01/18 01:41:15.22 pw6UDtYr.net
>> もし日付という概念をDateTime型に入れているならまずその誤った方法を見直せ。
日付をDateTimeで扱うことを否定しているようにしか読み取れないが。
830:デフォルトの名無しさん
16/01/18 01:44:24.84 L7UVOaGN.net
ものによっちゃあ三タイプ型がある場合があるから
(例:postgresqlの場合timestamp, date, time)
そういうノリで日付だけを扱え、という意味かと読んだ
831:デフォルトの名無しさん
16/01/18 01:48:23.83 wW0WiShF.net
俺は>>803ではないぞ。
まあお前らがどう思おうが好きにすればいいが。
ただ>>817もそうだが、DateTimeは10000年-1カウントまでは保証している。
この点は>>818の言うとおりで、.NET自体はかなり完成したフレームワークだから、
変に気を使うよりは素直に使った方がいい。
DateTimeは直接比較できるように数値にマッピングしてあるわけだし、
逆に直接比較できないのなら演算子オーバーロードが為されているか、メソッドが用意されている。
というか、ある程度やっていれば、これはよく使う/余り使わない、というのは分かるようになる。
そして.NETとかなら大概その「よく使う」物は実装されている。
日付の比較なんてよく使うだろ。だったら普通に出来るように設計されている。
それがピンとこないのは書いてないからだよ。
832:デフォルトの名無しさん
16/01/18 02:55:47.40 F4LpYkVc.net
>>802
うーん、やっぱり肌に合わん
IDEを持ってしても見にくいわ
ラムダ式でさえそこそこ長くなるとメソッドに分割させたくなる
833:デフォルトの名無しさん
16/01/18 06:22:50.07 9moHsOv1.net
独習C#はゴミだってテンプレに書いとけ
例の書き方、説明の端折り方からしてプロのための本だとわかる
834:デフォルトの名無しさん
16/01/18 06:23:33.23 9moHsOv1.net
ほんとこういうクソ本で騙して何が楽しいのかね
835:デフォルトの名無しさん
16/01/18 06:59:08.20 f+dY9NM8.net
そうか?初学で独習読んだけど、一番理解できたわ。
836:デフォルトの名無しさん
16/01/18 07:23:16.31 tfxh7JIU.net
初学者にはCLR via C#が最適と何度言ったら分かるのか
837:デフォルトの名無しさん
16/01/18 07:36:24.94 bqfXjorQ.net
ハーバード・シルトをけなすとは大した度胸でんな
838:デフォルトの名無しさん
16/01/18 08:44:43.56 tv0b2zna.net
最初からスマートさを求める初心者って、優秀なセンス持ってると思うけどな
839:デフォルトの名無しさん
16/01/18 09:39:25.03 TV7ry5Rb.net
>>817
そんなコボラー脳は早く捨てろよ
840:デフォルトの名無しさん
16/01/18 13:48:04.35 doNY95zT.net
Nugetとか使えない環境下なんですが、dllとかダウンロードしたら、作法的にはどこに格納するものなんでしょうか?プロジェクトフォルダ直下ですか?
841:デフォルトの名無しさん
16/01/18 15:36:37.61 I1m11BCA.net
>>832
わしはbinとかobjとかの並びにlibってフォルダ作っていれてる
842:デフォルトの名無しさん
16/01/18 17:52:51.30 rmPY04Uv.net
>>832
外部依存解決のためにプロジェクトひとつ作ってそのプロジェクトルートに打ち込む
843:デフォルトの名無しさん
16/01/18 22:15:25.80 wW0WiShF.net
>>830
エセプログラマは黙れよ。迷惑だよ。
自分で試したり調べたりする能力がない奴は、プログラマとしては大成しない。
>>804はプログラマとして一番大事な部分がない。
それが分からない>>830もセンスないし、それ以前にエセプログラマだね。
或いはお前の周りにはその程度の奴しかいないから、それが理解できないだけ。
844:デフォルトの名無しさん
16/01/18 22:34:44.19 vfhYYxU5.net
俺と素直に言ってればよかった
長文がむなしく響く
845:デフォルトの名無しさん
16/01/18 22:43:02.61 1ZCUtN79.net
いっぱしのプログラマー名乗るならテンプレに目を通してから書き込んでほしいものだ。
846:デフォルトの名無しさん
16/01/18 22:52:22.18 wW0WiShF.net
質問者が初心者なのはいいとして、回答者が初心者では駄目だろう。
まあそれでも邪魔だというならおさらばすることにするよ。
847:デフォルトの名無しさん
16/01/18 23:03:17.73 8ePQenzf.net
やさしく回答してあげるならまだしも、そうではなく罵倒やらこめたレスしてるからでしょ
848:デフォルトの名無しさん
16/01/18 23:08:21.52 o2Fcp8K+.net
心に余裕が無いんだろうね
849:デフォルトの名無しさん
16/01/18 23:08:33.48 4n8xvv+p.net
べっちょカッコ悪い
850:デフォルトの名無しさん
16/01/18 23:24:29.55 3Kl3L3Zz.net
質問です。
インターフェースというものがいまいちピンとこないんです。
クラスだったら、そのクラスのインスタンスの実体が作られるってのが何となくイメージがつかめるのですが、
インターフェースの場合、例えば、
var a = Enumerable.Range(1, 5);
って書いたとき、このaはいったい何者なんでしょうか?
Visual studioで、aのところにマウスポインタを持っていくと
System.Collections.Generic.IEnumerable<T>, (Tはint)
みたいな情報が出てくるのですが、つまりは何者やねん?!
「列挙できる何か」でしかないのでしょうか?
実際には何らかのクラスのインスタンスなのでしょうか?
何者かなんて、そもそも気にする必要はないんでしょうか?
なんというか、まるで「抽象クラスなのにその実体が作られちゃった」みたいな、モヤモヤした気持ちです。
うまく表現できなくてすみません。
851:デフォルトの名無しさん
16/01/18 23:38:23.28 2MLDnvjn.net
インターフェースは規約の集合である
852:デフォルトの名無しさん
16/01/18 23:48:03.16 o2Fcp8K+.net
Enumerable.Rangeについては
URLリンク(referencesource.microsoft.com)
なので実態はあまり気にしなくていい
853:デフォルトの名無しさん
16/01/18 23:55:22.92 k4/XVfUV.net
きぐるみみたいに思っとけばいいよ
中の人なんていないんだよ
854:デフォルトの名無しさん
16/01/19 00:03:46.46 Nad2kIAs.net
おお!ソースが見れるんですね!
Enumerable.Rangeの中では
static IEnumerable<int> RangeIterator(int start, int count){
for (int i = 0; i < count; i++) yield return start + i;
}
をコールしてるだけでした。
確かに実体なんて気にしなくてよさそうですね。
今度からは着ぐるみだと思うことにします!
ありがとうございました。
855:蒸し返し君
16/01/19 00:22:17.59 tsEnAc4D.net
さー!蒸し返すぞ
>>803
> もし日付という概念をDateTime型に入れているならまずその誤った方法を見直せ。
これ結局どういう意味? 日付は何に入れるべき?
>>819
> 803が言っているのは~って話だろ。
> それを~であって、~だろ。
> つまり~であって、~って話だろ。
あまりに雄弁>>803をに代弁する人の存在はさておき…
>>830
> 最初からスマートさを求める初心者って、優秀なセンス持ってると思うけどな
逆!逆ぅ!
初心者ほど妙にそれを求めるのを見てきた
何を求めているのか、何が手に入ったのかまったく判断つかないくせに
駆け出し三日目みたいな奴が「コードの美しさ」とか抜かしてたら頭カチ割りたくもなる
856:デフォルトの名無しさん
16/01/19 01:00:29.78 3XHdRo+8.net
>>847
でもスマートさを求めない初心者ってコピペプログラマーになったりしないの?
857:デフォルトの名無しさん
16/01/19 07:10:54.73 HexSh7v2.net
>>847
日付とtimepointの概念の違いくらい理解しろ
858:デフォルトの名無しさん
16/01/19 12:26:57.20 w8PSLHxg.net
でもお前ら初心者が愚直なコード頑張って書いたのに
こんなコード今時書かねーよ死ねとか言うよね
859:デフォルトの名無しさん
16/01/19 12:31:40.51 w8PSLHxg.net
デリゲート、匿名関数、ラムダ式、LINQについての初歩を学びたかったら
究極のC#プログラミング 新スタイルによる実践的コーディング
って本読むといいよ。順番を追って説明されてるから。
頭いい人はネットの断片的な情報を繋ぎ合せて分かるだろうけど、初学は本で学んでから必要な分をネットで調べるほうがいい
860:デフォルトの名無しさん
16/01/19 12:37:22.58 lHVrmma2.net
>>842
列挙できる何か
この理解でパーフェクト。
861:デフォルトの名無しさん
16/01/19 16:06:33.38 0OZUZxB2.net
ビルドするとフォームによって真っ白になることがあるんだが
これってなんで?
リビルドし直したり、閉じて開き直すと元に戻るんだが
862:デフォルトの名無しさん
16/01/19 20:12:45.09 hCzDBBLk.net
フォームクラスの前に何か余計なもの宣言してねえですか?
863:デフォルトの名無しさん
16/01/19 23:35:50.94 I8eUz+bb.net
下記のようなサンプルプログラムを見たのですが、
+=で追加されたラムダの方をコールする事は出来るのでしょうか?
こういう書き方がどう嬉しいのか掴めないのですが、
後学のためにお伺いしたく
delegate void HelloDelegate(string name);
class Program
{
static void StaticHello(string name)
{
Console.WriteLine("(static) : Hello1 {0}!", name);
}
static void Main(string[] args)
{
Foo foo = new Foo();
HelloDelegate funcs;
funcs = StaticHello; // static 関数の格納
// 無名関数の格納
funcs += (string name) =>
{
Console.WriteLine("(lambda) : Hello2 {0}!", name);
};
funcs("world");
}
}
864:デフォルトの名無しさん
16/01/20 00:25:59.71 /jAqE9aQ.net
日立かよ
865:デフォルトの名無しさん
16/01/20 08:41:21.18 Q5scciVe.net
((HelloDelegate)funcs.GetImpoList()[0])("aho")
866:デフォルトの名無しさん
16/01/20 08:44:04.79 6Nwq+BmN.net
今デリゲートを定義するメリットあるの?
System.Avctionでいいでしょ
867:デフォルトの名無しさん
16/01/20 13:48:46.45 OYaq8QnH.net
Try系用のデリゲートが欲しいときは自前で定義せざるを得ない
868:デフォルトの名無しさん
16/01/20 19:40:56.68 zd+3gPU+.net
いやそんなに関数が好きならoutなんか使わずにJavaScriptっぽく
TryHoge(result => 成功時(result), err => 失敗時(err))
でいい
869:わからない奴はしね
16/01/20 19:41:30.79 2BWCguJw.net
独習C#が初心者頃しである点その1
p25の最初
870:わからない奴はしね
16/01/20 19:41:56.50 2BWCguJw.net
26の最初
871:わからない奴はしね
16/01/20 19:50:34.01 2BWCguJw.net
歴史やら専門用語をなぜか基礎の基礎にぶち込む
なぜか名前空間を最後に飛ばす
なぜか図解がひとつもない
オブジェクトの説明すらない
大丈夫か?
872:855
16/01/20 22:28:30.97 NCZhL0AS.net
ステップ実行して確認したら、
ラムダの部分もちゃんと動きました
すみませんでした
委譲をすると何が便利なのか?
普通に関数をコールするより便利なのか
今一つ実感が湧きませんが
多用されるということは便利な部分があってのことだろうと思うので
とりあえず使ってみたいと思います
873:デフォルトの名無しさん
16/01/21 00:09:50.07 a7yd+tZ2.net
>委譲をすると何が便利なのか?
>普通に関数をコールするより便利なのか
私と全く同じ質問してますね・・・
上の方で答えて頂きました
874:デフォルトの名無しさん
16/01/21 00:17:25.15 u55dqyZV.net
説明聞くよりFormsで電卓でも作った方がよくわかる
875:デフォルトの名無しさん
16/01/21 01:38:58.64 88LciSZZ.net
元Java屋がbean連呼しててうるせえ
876:独習C ◆2EF1A8jABI
16/01/21 01:59:05.24 OcjdRNV3.net
組み込み型の説明くらいしろクソ
877:デフォルトの名無しさん
16/01/21 02:00:00.03 OcjdRNV3.net
独習c#辞書カスすぎ
878:デフォルトの名無しさん
16/01/21 02:08:22.88 bcCC1z7K.net
そろそろNGワード、NGネーム登録かな
879:デフォルトの名無しさん
16/01/22 00:32:35.06 fKj1OuCZ.net
C# Windows フォームでアプリケーションを作り始めた初心者なのですが、
ウィンドウのリサイズ時にボタンなどもリサイズさせるにはどのようにすればいいのでしょうか?
初心者の質問で申し訳無いのですが、初心者すぎて調べても関係ないことが出てきてしまい、
途方にくれています。
880:デフォルトの名無しさん
16/01/22 01:08:34.19 Mcw4vPxl.net
>>871
Anchorとかでググると手がかりがつかめるかもしれないよ!
881:デフォルトの名無しさん
16/01/22 01:38:02.72 fKj1OuCZ.net
>>872
セルを配置してからその中にボタンを入れてAnchorを設定してみたところ、
無事にできました。ありがとうございました。
882:デフォルトの名無しさん
16/01/22 22:23:30.00 vvX+CTNi.net
クラスBのメンバ関数内から、そのクラスへの参照をメンバとして持っているクラスAの
プロパティをset,getするための構文はありますか? それとも、参照を持つクラスAで
クラスBをnewする時に自身(クラスA)への参照を渡しておく等の必要がありますか?
883:デフォルトの名無しさん
16/01/22 23:03:25.03 cH2NbEwD.net
たぶんコードで書いた方がイメージが伝わると思う
884:デフォルトの名無しさん
16/01/22 23:26:23.68 aDNowO67.net
>>874
後者。
885:デフォルトの名無しさん
16/01/23 00:59:15.45 1nX2r7W+.net
質問の意味がわからない。例示しろ
886:デフォルトの名無しさん
16/01/23 02:07:13.38 z9alu8d/.net
class ClassA
{
ClassB b;
Property { set ;get; }
}
class ClassB
{
Method()
{
// ClassA.Propertyを操作したい
}
}
って、ことでしょ。」
887:デフォルトの名無しさん
16/01/23 02:07:58.44 isFkecmI.net
日本語
888:デフォルトの名無しさん
16/01/23 06:06:00.80 2K8/GI2s.net
class ClassA
{
ClassB b;
Property { set ;get; }
}
class ClassB
{
Method()
{
foreach (var a in allACollection)
a.b = this;
}
}
889:デフォルトの名無しさん
16/01/23 11:02:23.57 D5H1L8g0.net
逆参照ってたまに欲しいときあるけど、そんな仕組みのある言語ってないよね…たぶん
890:デフォルトの名無しさん
16/01/23 11:12:08.93 VoXQl1Qa.net
逆参照ってなんだよ
dereference?
891:デフォルトの名無しさん
16/01/23 11:49:07.35 gwJcz5VZ.net
ジョースター貴様見ているな
892:デフォルトの名無しさん
16/01/23 13:25:30.20 VoITVh8P.net
ゲームパッドの入力を使いたくて、久々にManaged DirectXを使おうと思ったら
もう既になくて、XNAもサポートなくなるらしいし
wiki をみてみると Windows API Code Pack for Microsoft .NET Framework とかってのがあるらしいのだけれど
NuGetをみてもないし、リンクも切れている
今、デスクトップアプリからDirectXを使うとしたら、どういうやり方が標準的になってるんでしょうか?
#しばらく見ない内に随分変わったな・・・
893:デフォルトの名無しさん
16/01/23 13:54:40.53 pu55AA1r.net
MS的にはC++推奨
C#ならUnity
894:デフォルトの名無しさん
16/01/23 13:58:50.63 VoITVh8P.net
Unityってライブラリなの?話を聞いてるとなんかVisualStudioモドキのような印象だったんだけど
作ってるのは、データの可視化ツールで、マウスだと操作がちょっと大変だったからという所なので
ゲーム開発用プラットホームに行くわけにはいかないです
895:デフォルトの名無しさん
16/01/23 14:08:48.80 KCwna5vH.net
ElectronでCanvasとWebGL使えば?
MS的には一寸前はそういう用途にはXAMLを推奨してたけど、もうMS自身がElectron使ってるし
896:デフォルトの名無しさん
16/01/23 14:19:30.66 I9i6VINo.net
昔sharpDX使ってたけどもうないっけ?
897:デフォルトの名無しさん
16/01/23 14:20:04.04 l5TKWQpo.net
HTML5ってゲームパッドも使えるのか
898:デフォルトの名無しさん
16/01/23 14:21:13.61 pu55AA1r.net
ゲームパッド使うだけならそこだけC++で書いたらええがな
1k行もいらんだろ
899:デフォルトの名無しさん
16/01/23 14:21:26.90 VoITVh8P.net
まぁ、最悪Comだからラップすれば使えるけど、公式があるならそっちに行きたかったんですよね
900:デフォルトの名無しさん
16/01/23 14:25:27.37 VoITVh8P.net
ネットサーフィンして見る限りもうマイクロソフトはマネージ系DirectXからは撤退したみたいな感じなんですかね
終わってしまっていたか・・・
901:デフォルトの名無しさん
16/01/23 14:29:09.18 pu55AA1r.net
終わったね
.NETに対するMSの投資は今や完全にWebへ全振りしてるから
902:デフォルトの名無しさん
16/01/23 14:33:18.90 GlocuAeT.net
webbrowserコンポーネントの使い方がいまいちわからず困っています。
以下のページの、「発音したユーザー」の右隣の△のボタンをプログラムから押す操作をしたいです。
URLリンク(ja.forvo.com)
ソースを見ると、以下のようになっています。
<a class="play" id="play_1620405" href="URLリンク(ja.forvo.com) title="presumer の発音を聞
く" onclick="Play(1620405,'OTE4Njc0Ny80OS85MTg2NzQ3XzQ5XzE4MjQ3MDZfMS5tcDM=','OTE4Njc0Ny80OS85MTg2NzQ3XzQ5XzE4MjQ3MDZfMS5vZ2c=');return false;" rel="nofollow">presumer の発音を</a>
ヒントをいただけると助かります。
903:デフォルトの名無しさん
16/01/23 14:35:25.47 VoITVh8P.net
どちらかというと、社員が集団で辞めたときによる起こるような撤退ぶりな印象
見る限りサポート体制が薄くなるんじゃなくて、打ち切りだからな
組織が瓦解しているのかもしれない
904:デフォルトの名無しさん
16/01/23 22:57:33.94 tJzq42nP.net
windows formのコモンコントロール(ラベルなど)の表示比率をリサイズした時に
維持したいのですが、例えば左右の余白が10%ラベルが90%として固定したい場合
プロパティとかではなく、座標計算してリサイズと当時に設定するしか無いのでしょうか?
905:デフォルトの名無しさん
16/01/24 01:27:15.13 m3rL1jl7.net
>>895
なんでもいいけどSharpDX使っとけDirectX API網羅してるから
NuGetにもある
906:デフォルトの名無しさん
16/01/24 01:41:33.80 htniKezy.net
NuGetのMSのOCRライブラリってストアアプリでしか使えない?
どうにかしてフォームアプリで使いたいんだが、どうしたもんか・・・
907:デフォルトの名無しさん
16/01/24 02:10:36.19 GSUVPgMJ.net
>>896
何を言ってるのかさっぱり分からん。
リサイズするのはFormなのかラベルなのか。
余白っていうのはどの部分を言ってるのか。
908:デフォルトの名無しさん
16/01/24 05:34:54.12 zmKxqTJl.net
C#で計測系のWindowsアプリ作ったことある人に質問があります。
計測機器から拾ったアナログデータのプロット、FFTのプロットなどに、付属のChartコントロール使ってますか?
それとも、全てオーナードローでやってますか?
909:デフォルトの名無しさん
16/01/24 12:08:24.15 Y10O6Yt5.net
どんな機器から拾ったどんなデータをどう見せたいのかが分からないと意味なくないか。
910:デフォルトの名無しさん
16/01/24 12:33:49.14 sDnfZi6x.net
Chartコントロールで表現可能なものなら使えばいいし
そうでないなら自分で描けばいい
911:デフォルトの名無しさん
16/01/24 14:27:36.78 pNY+NcnR.net
オーナードローの用語の使い方が間違ってるような
912:デフォルトの名無しさん
16/01/24 15:14:04.44 bw3MWu8t.net
オーナードロー
ってカッコつけて言いたいお年頃なんだろ
913:デフォルトの名無しさん
16/01/24 15:23:52.77 30PPh5ie.net
オナドロ
914:デフォルトの名無しさん
16/01/24 15:36:09.53 sDnfZi6x.net
意味的にはオナニードローだよなw
915:デフォルトの名無しさん
16/01/24 19:42:07.46 Aj6v4F1z.net
文字列が45個入った
List<string> listStr;
が有って、それを10個ずつに分割したリストを作りたいのですが、
ループで回してやる方法しか思いつかないのですが、LINQとかラムダ式とか、何かそういう方法でスマートに出来ますか?
取り出す要素 List<string>を5つ作りたい
00~09 listStr0
10~19 listStr1
20~29 listStr2
30~39 listStr3
40~45 listStr4
出力は、
List<string>のリストか配列でお願いします。
916:デフォルトの名無しさん
16/01/24 19:45:33.47 efwl3LYy.net
SkipWhile()とTakeWhile()を組み合わせれば行けそう
917:デフォルトの名無しさん
16/01/24 20:28:00.81 rqxMFPcY.net
>>907
Linqでインデックス使えるので、こんな感じで
var listStr0 = list.Where((n, i) => i >= 0 && i < 10);
Listにするには最後にToListで
918:デフォルトの名無しさん
16/01/24 20:31:37.19 pllviQHm.net
Ix の Buffer の出番だな
919:デフォルトの名無しさん
16/01/24 20:32:39.79 58N9T2+A.net
linq chunkでググると沢山出てくるけどイマイチこれってのが無い
920:デフォルトの名無しさん
16/01/24 20:37:20.79 LpWoFh+w.net
>>909
ラムダのアロー演算子?ってもう少しわかりやすいチョイスなかったのかね
921:デフォルトの名無しさん
16/01/24 21:17:16.68 njH/x6oD.net
分かりやすさはどうでもいいが、=と>のキーが微妙な位置関係で押しにくい。
922:デフォルトの名無しさん
16/01/24 21:23:57.56 Aj6v4F1z.net
>>908 >>909
レスありがとうございました。
Skip()とTake()と言うのを初めて使ってみたら出来たのですが、
結局ループ変数iを使って
Skip(i*10).Take(10).ToList<string>() みたいにして取り出しました。
このiをループさせない方法はありますか?
923:デフォルトの名無しさん
16/01/24 21:31:17.31 H1CMcA7Z.net
>>899
事故解決しました。
ごめんなさい、formのリサイズ時にコントロールも余白の比率を維持したまま
リサイズしたいってことでした。
formの縦横の大きさから、座標とコントロールの比率を出して、
リサイズ後に計算してリサイズすることで解決しました。
924:デフォルトの名無しさん
16/01/24 21:35:23.64 HlsipTod.net
linqの=>はゴーズトゥだけど、アローの->も位置関係同じようなもんじゃん
まぁどっちも押しにくいけど
925:デフォルトの名無しさん
16/01/24 21:38:30.89 efwl3LYy.net
>>914
iをforじゃなくてEnumerable.Range()にしたらLINQっぽくならない?
var n = Enumerable.Range(0, 5).Select(i => listStr.Skip(i * 10).Take(10)).ToList();
foreach (var x in n) {
foreach (var y in x)
Console.Write("'" + y + "' ");
Console.WriteLine();
}
926:デフォルトの名無しさん
16/01/24 22:41:38.27 Aj6v4F1z.net
>>917
サンプルありがとうございました。
出来ました。
でもEnumerableというのは型が分からなくなって混乱するので苦手です。
927:デフォルトの名無しさん
16/01/24 23:05:37.93 IvXHpVfl.net
いやSkipもTakeもToListもWhereもSelectもEnumerableクラスのメソッドだから
928:デフォルトの名無しさん
16/01/24 23:15:56.05 CtPdemUL.net
Enumerable.Rangeが何となく気持ち悪いのは分からんでもない。
929:デフォルトの名無しさん
16/01/24 23:30:57.09 sDnfZi6x.net
linqとかキモい
930:デフォルトの名無しさん
16/01/25 00:08:27.28 GD04/nQG.net
>>921
そんな事言ってるとJava8のStreamにも取り残されるぞ
931:デフォルトの名無しさん
16/01/25 01:27:52.23 HQphZQpT.net
職場の課長や部長といった上司が
「linqやラムダなんて使わなくても書ける。今までも使わずやってきたんだからこれからも使う必要はない」
って言ってきます
どうしたらいいでしょうか?
932:デフォルトの名無しさん
16/01/25 02:08:49.84 5LljS1Oc.net
指示通りにすればいいと思います。
また、どうしても使いたいならば説得に足る材料を集めればよいのではないでしょうか。
933:デフォルトの名無しさん
16/01/25 02:59:55.70 fpkb5Ns6.net
技術を普及させるか、
レベルが合う環境に行くかだ。
過去を理由に出すやつは脳死してるから話すだけ無駄だけど。
934:デフォルトの名無しさん
16/01/25 03:11:39.59 pk9HSDt/.net
EntityFrameworkでも導入してみれば?
935:デフォルトの名無しさん
16/01/25 03:20:49.36 fpkb5Ns6.net
勉強しろ馬鹿と、本音で語らうのがいいと思います。
936:デフォルトの名無しさん
16/01/25 04:58:58.13 HcUKLD+/.net
仕事なんて言われた通りにやって、とっとと帰るのが一番
937:デフォルトの名無しさん
16/01/25 06:10:08.22 0hbOE3mN.net
嫌なら転職
938:デフォルトの名無しさん
16/01/25 21:03:36.23 FVVwJ32O.net
ASP.NETではない普通のC#プロジェクトからJavaScriptを実行するにはどうしたら出来ますか?
939:デフォルトの名無しさん
16/01/25 21:20:49.19 Irrux0BT.net
・C++を介してV8などを組み込む
・WinRTコンポーネントとしてJavaScriptを呼び出す
・WebBrowserを使う (汚物)
・JScript.NET (産廃)
・WSH JScript (遺物)
940:デフォルトの名無しさん
16/01/25 21:27:46.41 Irrux0BT.net
あと、
・IKVMでNashhornを利用する
遅くていいならまあ使えないこともない
941:デフォルトの名無しさん
16/01/25 21:43:37.17 FVVwJ32O.net
>>931
情報ありがとうございました。
C#なので、JScript.NET (産廃) が良いかと思ったのですが、
どのあたりが 産廃でしょうか?
942:デフォルトの名無しさん
16/01/26 07:49:53.97 fPoW1lYF.net
TypeScriptを使え
の意味なのかな。
943:デフォルトの名無しさん
16/01/26 21:07:17.48 96cI6c2/.net
linqがーλがーって言いあえるだけ幸せだよね
944:デフォルトの名無しさん
16/01/27 10:41:38.67 sapMCej1.net
それはあるね
945:デフォルトの名無しさん
16/01/27 14:40:58.56 LCHBmKl2.net
C#でファイルやフォルダを削除しようとすると、他のアプリで開いていたり
するとエラー出ますよね。
そういう場合でも、強制的に削除してしまう事は可能でしょうか?
946:デフォルトの名無しさん
16/01/27 14:47:33.34 C1RoeKPM.net
C#に限った話じゃないが、普通には出来ない。
947:デフォルトの名無しさん
16/01/27 14:47:35.86 sapMCej1.net
管理者権限でWindowsAPIのMoveFileEXを呼べば次回起動時に消せるかもしれない
948:デフォルトの名無しさん
16/01/27 14:48:15.18 Ky0LnzPt.net
Windowsの仕様でFILE_SHARE_DELETEフラグをつけずに開いたファイル
およびそのファイルを含むディレクトリは削除できません
949:デフォルトの名無しさん
16/01/27 20:08:50.71 sdy15MxI.net
List<T>の最後の要素を削除したい場合、
例えば
var hoge = List<String>;
として
hoge.RemoveAt(hoge.Count - 1)
としているのですが
もっといい方法がある気がしてなりません
これより適切な方法がありましたらご教示頂きたく…
よろしくお願いします。
950:デフォルトの名無しさん
16/01/27 20:17:52.96 vDIuwjF/.net
拡張メソッドでRemoveLastでも定義したらいいんじゃないですか
病気かと思いますけどね
951:デフォルトの名無しさん
16/01/27 20:19:04.34 sdy15MxI.net
LastIndex的なのは無いってことで良いんでしょうか
ググッて無いとは思っているのですが
本当に無いのか?というのが引っかかってしまいまして…
952:デフォルトの名無しさん
16/01/27 20:22:08.77 ODr2GTmu.net
無い
953:デフォルトの名無しさん
16/01/27 20:23:13.61 sdy15MxI.net
ありがとうございます!すっきりしました
954:デフォルトの名無しさん
16/01/27 20:43:51.68 DbJX7SkT.net
状況によってはQueueやStackを使うことも検討すべき
955:デフォルトの名無しさん
16/01/28 02:34:11.42 t3813frz.net
何をしたいかにもよるが、LinkedListもある
956:デフォルトの名無しさん
16/01/28 11:45:41.90 BmnTht0C.net
MessageBox.Showって
using System.Windows
using System.Windows.Forms;
のどちらでもOKみたいですが何が違いますか?
957:デフォルトの名無しさん
16/01/28 13:31:07.11 59XGHKPq.net
株式チャートのような直線、曲線等を書き込めて、十字カーソルを表示できるプログラムを作りたいのですが、
参考になる本やサイト等教えてください
958:デフォルトの名無しさん
16/01/28 13:55:24.77 Zt+/Dst2.net
>>948
MessageBox は System.Windows.Forms.MessageBox のことだよね
using System.Windows.Forms;
しておけば System.Windows.Forms が省略できるから MessageBox.Showと書けるというだけのこと
using System.Windows でもOKというのは意味がちょっとわからない。
959:デフォルトの名無しさん
16/01/28 16:02:37.72 hRq9ptwf.net
System.WindowsにもMessageBoxはある WPF用の奴
できることは同じなのでどっち使っても良い
960:デフォルトの名無しさん
16/01/28 16:08:51.53 BmnTht0C.net
>>951
>>950
ありがとうございました
961:デフォルトの名無しさん
16/01/29 14:21:40.45 6UBQnz7A.net
Buttonのクリックイベントって、
2回連続で押した時に最短で何秒間隔まで対応出来るの?
ググってもTimerのイベントばっかり出てくるので教えてください。
962:デフォルトの名無しさん
16/01/29 14:42:49.30 2UArfT3f.net
ダブルクリックイベント使ったからといってクリックイベントが呼ばれない訳じゃない
そしてダブルクリックになるかどうかは環境次第
963:デフォルトの名無しさん
16/01/29 15:34:43.76 6UBQnz7A.net
ああっ、すいません。
Buttonは例に出しただけで、単純にイベントの入力最短時間が知りたかっただけなんです。
ただSystem.Form.Timerの誤差が大きいから、
フォームコントロールのイベントの最短時間も環境次第で誤差は大き目ってことでよろしいでしょうか?
964:デフォルトの名無しさん
16/01/29 15:52:31.55 2UArfT3f.net
イベント駆動に応答時間の保証は無い
965:デフォルトの名無しさん
16/01/29 16:25:35.49 6UBQnz7A.net
Windowsの仕様上、保証なんて出来ないですよね、ありがとうございます。
966:デフォルトの名無しさん
16/01/29 17:04:10.37 hRxA1dAH.net
それどころかWM_TIMERは優先度が低いから、メッセージキューが詰まってると一生来ない
967:デフォルトの名無しさん
16/01/29 18:14:23.57 LSfqF04s.net
静的型付けと動的型付けの違いがよく分かりません
性的=コンパイル時にフィールドの型を決める
動的=プログラム実行時に型を決める
らしいですが、それによって何が変わるのかが分かりません
定数やリテラルはコンパイル時に決められるんですよね?
968:デフォルトの名無しさん
16/01/29 18:33:36.85 5/3V3hxl.net
ハァハァ…
969:デフォルトの名無しさん
16/01/29 19:36:25.78 Q4yHpTCm.net
>>959
C#は基本的に静的型付けなので初心者のうちは動的型付けなんてものは気にしないのが良い
970:デフォルトの名無しさん
16/01/29 19:57:53.04 qdqnYPC0.net
C#とMySQLで名簿の一覧をクリップボードに取り込み→DataTable→DBの流れで
データを取り込むように作っています
DataTableのUpdateの段階でデバックでは取り込んでデータが意図した順番で並んでいるのですが、
MySQLWorkBenchで取り込んだデータを見ると、なぜか順番通りに入ってきていません
ID列にはPrimaryKey、AutoIncrementを割り当てていて、IDそのものは意図した番号順に割り当てられているのですが
WorkBench上ではIDが大きいものから並んでいるんです
AutoIncrementで割り当てられている数字と実際に割り当てられるIndexはまた違うのでしょうか
971:デフォルトの名無しさん
16/01/29 20:06:58.75 /I2B0b0V.net
そもそも理論上DBに格納されてるデータには順番なんて存在しない
何らかの順番でデータが欲しいなら明示的にORDER BY使うなりしないといけない
972:デフォルトの名無しさん
16/01/29 20:47:52.20 2UArfT3f.net
補足すると格納順が欲しいならそれを保持するカラムを用意しなさいって事です
973:デフォルトの名無しさん
16/01/29 21:01:40.42 9TvUQCIM.net
>>962
>MySQLWorkBenchで取り込んだデータを見ると
これクエリ指定で結果を見るとかならともかく、データだけなら順不同になるのは当たり前じゃね
974:デフォルトの名無しさん
16/01/29 21:15:32.93 LSfqF04s.net
>>961
了解しました
ありがとうございます。
975:デフォルトの名無しさん
16/01/29 21:31:33.87 LOv7Ax2H.net
複数のテキストファイルの中身をチェックしたい時に
ファイル数分のスレッドを作成してその中で
string[] lns = System.IO.File.ReadAllLines(filename)
のようにしても問題ありませんか?
ReadAllLinesを複数スレッドから同時に使用しても問題ないかということです。
976:デフォルトの名無しさん
16/01/29 21:35:32.70 buwyBTyq.net
壊れはしないけどかえって遅くなるぞそれ
977:デフォルトの名無しさん
16/01/29 21:38:31.01 CBTGpVRc.net
破壊的な操作をするにしても配列コピーでいいだろ
978:デフォルトの名無しさん
16/01/29 21:49:59.80 LOv7Ax2H.net
ありがとうございます。
速度とかは重要ではなくて各スレッドの処理が正しく終わるかどうかが問題なのですが
ReadAllLinesで返される配列のメモリがどう確保されるのか分からなくて質問させてもらいました。
遅くなるだけで壊れはしないという事は
同時に呼ばれた場合もちゃんと別の領域を確保してそれを返してくれるという事でしょうか。
979:962
16/01/29 22:06:05.85 U6iFcKOK.net
>>963-965
なるほど・・・
しかし、格納順はID(PrimaryKey,AutoIncrement)で作成順にナンバリングされていきますよね
それを保持するカラムとして機能すると思っていたのですが違うんでしょうか
いままでテーブル作成していてWorkBenchで表示させたときはいつもID順に並んでいたので
別に気にならなかったんですが、今回だけはなぜか違う
その辺なにが違うんでしょうか
IDの順序が気になったのは、DataTableに入れた値を変えてUpdateしていたときに
2回目(フォーム上のボタンから更新→フォーム閉じる→再びフォーム開いてボタンから更新)の処理で
同時実行違反になってしまい、プライマリキーがIDに設定されているか確認したり、
原因を探しているときに気づいたんですが・・・ その辺も何か関連してるのでしょうか
980:デフォルトの名無しさん
16/01/29 22:41:00.55 /cWmSx8U.net
>>971
だから、RDBの行は格納順は(論理的には)不定だって
取り出すときにOrder byしないと、どんな順番で出てくるかはわからない
今までID順で出てたのは、たまたまそうなっただけ
WorkBenchとやらがどうなってるか知らんが、並べ替えて表示する機能もってるんじゃないのか
981:デフォルトの名無しさん
16/01/29 22:53:59.41 u8nDFqF+.net
列名のところをクリックすると昇順・降順が切り替わるけど
いつのまにかそこを触っていたとか…
982:デフォルトの名無しさん
16/01/29 22:55:12.25 2UArfT3f.net
内部的な作成順は意図した順番とか限りません
DBエンジンにもよるけれどトランザクションを確定させる順序は挿入順とは限らないのです
983:デフォルトの名無しさん
16/01/29 22:56:57.11 2UArfT3f.net
因みにID順が駄目って意味じゃないよ
ID順で十分って要件も普通にある
でも本当に必要な並び順が存在するなら明確にカラムを持てって話です
984:962
16/01/30 00:51:07.94 je1TvcVU.net
よくわかりました
単純にPrimaryKeyを基準にWorkBenchはソートしてるのかと思っていたのですが、
その辺はMySQL自体とは関係ないようですね
GridViewに表示させてるときはIDできちんと並べ替えしてましたので
その点についてはこれまで通りで参ります
>>973
デフォルトで開いたときに表示されるのとIDが逆順に並んでます
もちろん列名クリックすれば並び替えもできてます
WorkBench(SequelProでも該当のテーブルだけIDが逆順に並ぶ)は
いったい何を見て並べてるんでしょう・・・
同時実行違反はわからずじまいで、フォーム閉じる度にDataSetを再インスタンス化してます
最初に読み込んだものと1回目に更新した値、2回目に更新する値で問題が起きてるんだとは思うのですが
1回目の更新が、いわゆる他人が更新したような状態で同時実行違反につながっていると
考えているのですが、再インスタンス化以外にもっとスマートな方法がないもんでしょうか
985:デフォルトの名無しさん
16/01/30 01:49:08.58 WPy6oV1/.net
>>970
そういう時は、MSDNのFileクラスの一番下を見るんだ
「この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。 インスタンス メンバーの場合は、スレッド セーフであるとは限りません。」
ただし!でかいファイルを読み込むとこの方法だと大量のメモリを消費して最悪失敗するから注意
できれば一行ずつ処理すべき
986:デフォルトの名無しさん
16/01/30 02:52:45.01 97c75ht0.net
二つのList<string> list1, list2 をくっつけたい場合、
List<string> list12 = list1.Concat(list2); だとエラーで
List<string> list12 = list1.Concat(list2).ToList<string>(); ならOKなのは
なぜですか?
987:デフォルトの名無しさん
16/01/30 03:36:25.57 +bXCU4qn.net
>>978
IEnumerable<TSource> Concatだからlist1.Concat(list2)はIEnumerable<string>になるのでTolistが必要になる
988:デフォルトの名無しさん
16/01/30 03:47:36.83 97c75ht0.net
>>979
List<string>を連結しているのだから、結果も自動的にList<string>になる
ほうが便利だと思うのですが、何故そうなっていないのですか?
989:デフォルトの名無しさん
16/01/30 03:59:16.44 z1eJzV/m.net
つもった
990:デフォルトの名無しさん
16/01/30 04:48:55.53 ZlzREZMQ.net
>>980
ToArray()にしたい場合もあるからじゃね
それにforeachにすぐ掛けることもできるし
991:デフォルトの名無しさん
16/01/30 08:06:28.17 Io+HPEGm.net
string.Formatに渡す書式文字列のパラメーター数を計算する関数はありますか?
"aaa{0}bbb"なら1
"aaa{0}bb{1}ccc"なら2
"aa{0}bb{0}cc{1}ccc"なら2
といった具合に値を返して欲しいのです
992:デフォルトの名無しさん
16/01/30 08:41:02.59 96ElhlW8.net
なんだ、低脳ばっかりだな
993:デフォルトの名無しさん
16/01/30 08:56:46.75 C5JZiLR5.net
ここは低能用だから、問題ないだろ。
994:デフォルトの名無しさん
16/01/30 09:35:25.65 xTElL0w9.net
>>980
便利だと思うのは、あなたの私見だから。
995:デフォルトの名無しさん
16/01/30 09:38:13.63 xTElL0w9.net
>>983
可変長引数で関数作成して、その長さを返せば良い。
何の意味があるのかは知らないが。
996:デフォルトの名無しさん
16/01/30 11:28:38.58 opD0leUp.net
まぁ低脳なんて書いちゃう奴は間違いなく低能だな
997:デフォルトの名無しさん
16/01/30 11:39:09.91 6Po/ckh8.net
>>980
リストインスタンス作るコストはただじゃないから
998:デフォルトの名無しさん
16/01/30 12:20:22.02 +FxrPnS0.net
>>988
そーゆうあなたは定脳
999:デフォルトの名無しさん
16/01/30 12:21:19.10 WViD2aM9.net
繋ぐならAddRangeじゃだめなのかな
1000:デフォルトの名無しさん
16/01/30 13:16:43.52 WPy6oV1/.net
>>980
実装を見るとわかるけど、yield returnを順番にしてるだけでメモリも時間もほとんどかからないから
ToListすると、全部コピーすることになり、ものすごいコストがかかる
1001:デフォルトの名無しさん
16/01/30 20:06:58.13 PQgbVUpF.net
うめー
1002:デフォルトの名無しさん
16/01/30 23:02:46.48 ahDYA9hb.net
しかし、ListとListを結合してるのにList以外が返ってくるのは直感的ではないな
1003:デフォルトの名無しさん
16/01/30 23:38:53.79 I7tE4l0o.net
>>994
Concatの正体はIEnumerable<T>の拡張メソッドで、引数もIEnumerable<T>だからIEnumerable<T>を返すのは自然だったりする
1004:デフォルトの名無しさん
16/01/30 23:40:25.46 xTElL0w9.net
IEmuerableとIEmuerableを結合してるんだ
1005:デフォルトの名無しさん
16/01/30 23:42:03.59 K5qkBmzk.net
ListにConcatメソッドが生えてるわけじゃない
1006:デフォルトの名無しさん
16/01/31 00:53:16.84 OtXGSzkV.net
次スレ
スレリンク(tech板)
1007:デフォルトの名無しさん
16/01/31 00:54:30.83 OtXGSzkV.net
これで心置きなく埋め埋め
1008:デフォルトの名無しさん
16/01/31 00:54:57.79 WZAhYY4A.net
1000げと
1009:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
1010:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています