ふらっと C#,C♯,C#(初心者用) Part118at TECH
ふらっと C#,C♯,C#(初心者用) Part118 - 暇つぶし2ch650:デフォルトの名無しさん
16/01/11 01:13:42.52 JvrlUDJ8.net
異常地味たじゃなくて十分異常だよこれはww
毛の壁に匹敵するわ

651:デフォルトの名無しさん
16/01/11 02:53:52.16 dvaW+Y9E.net
>>644
論理をすりかえるなよ
意図した型じゃなかった時に次の行に進んで良いかどうかだ

652:デフォルトの名無しさん
16/01/11 08:14:31.32 cVa7oOJ2.net
>>647
そんなこと書いてない。
馬鹿じゃないのか

653:デフォルトの名無しさん
16/01/11 08:15:27.33 cVa7oOJ2.net
ていうか書いてあろうがなかろうが、次の行に進むかどうかが何か意味を持つと
本気で思ってるなら酷い馬鹿だ。

654:デフォルトの名無しさん
16/01/11 08:21:44.29 cVa7oOJ2.net
っていうか、もう3回ぐらい書いたはずだけど>>647みたいなのは
デバッグと例外処理の区別がついてないからこういう頓珍漢なこと言うんだろうね。
「バグがあっても検出できないじゃないか!!!」ってそれは例外処理じゃなくてデバッグしろよって。
まあ恐らく言っても分からない。

655:デフォルトの名無しさん
16/01/11 08:32:48.19 gUndm2es.net
意味不明
バグを検出したからデバッグするんだろ

656:デフォルトの名無しさん
16/01/11 10:12:59.68 vXiBlDdD.net
議論がwhileループしているような気がします

657:デフォルトの名無しさん
16/01/11 10:48:12.65 D1R/kCSG.net
そういう芸風なの

658:デフォルトの名無しさん
16/01/11 10:56:55.03 D1R/kCSG.net
彼がキチガイだってのは連休中のやり取りで十分理解できたでしょ
すでに感染して流せなくなっちゃった奴はともかく
そうじゃない奴は迂闊に近寄っちゃ駄目
感染っちゃうよ

659:デフォルトの名無しさん
16/01/11 11:13:41.89 D1R/kCSG.net
この人は
・「馬鹿」もしくは「幼稚」をほとんどのレスに含む
・「>>>数字みたいな」の安価を含む
・句読点は入れる派だけど完璧じゃない
が特徴なので分かりやすいはずです
ちなみに222も同じ人です(4回連続で馬鹿って書いてますね)

660:デフォルトの名無しさん
16/01/11 14:00:12.87 LfDMv3TV.net
本人が見てる所で指摘してしまったら意味がないような?

661:デフォルトの名無しさん
16/01/11 18:46:35.40 U/eWhfN7.net
>>650
君はテスト実施しないのかなw?
テスト済みならデバッグコードを組み込む必要はないんだけとw?

662:デフォルトの名無しさん
16/01/11 18:52:52.19 U/eWhfN7.net
そうか常にデバッグモードなのか。
そういう状況なら納得ですね。

663:デフォルトの名無しさん
16/01/11 21:33:20.63 Dzm9rVm2.net
>>657
馬鹿もこもまでくるとすがすがしいね。
どこにデバッグコードを組み込めなんて書いてある。
むしろそんなことをするなと言ってるんだけど。

664:デフォルトの名無しさん
16/01/11 21:47:39.23 Dzm9rVm2.net
しかし、>>65-655
こんな幼稚なレスで勝ったつもりになれる奴って哀れだね。人間として終わってる。
こちらはちゃんとなぜasの方が使い勝手がよいか理由付きで書いてるのに、
噛みついてる奴は幼稚な人格攻撃かデバッグ段階で排除すべき可能性を例外で
検出しろとかいう類のよく分からない話しか出てこない。
あとは>>580ぐらいだけど、これもかなり無理がある。

665:デフォルトの名無しさん
16/01/11 21:48:16.78 Dzm9rVm2.net
>>654-655

666:デフォルトの名無しさん
16/01/11 22:03:09.58 Dzm9rVm2.net
しかし、自分で幼稚なこと書いておいてそれを指摘されると「あの人は幼稚って言葉を好むオカシな人です」って
凄い自己中心性だなw
ポジティブ思考と言えば聞こえが良いけどただの恥知らず。

667:デフォルトの名無しさん
16/01/11 23:39:23.51 EnmyN0sR.net
割と怒り心頭らしいな
でも完全に自分で蒔いた種だよね

668:デフォルトの名無しさん
16/01/12 00:24:36.31 8YRirrTO.net
asとか適当なことやったら、
今後間違ったコード追加したらエラー発生しないから、間違っていることにすら気づけないじゃん。
ところで、foreachにT[]の配列渡すとT型のitemを回せるけど、
T[].GetEnumrator()するとノンジェネリックのEnumratorが返るのはなぜ?
IEnumrable<T>が明示的宣言されているの?

669:デフォルトの名無しさん
16/01/12 01:14:45.93 7RSj72FG.net
最初に質問した者ですが、とりあえず初心者的にはキャスト使っておけばいいって事ですかね
荒れるような質問失礼しました

670:デフォルトの名無しさん
16/01/12 01:21:47.13 xcvGIOve.net
T[]にforeachの場合はGetEnumerator呼ぶんじゃなくて
もっと単純で効率的なILに展開されるようになっとるで

671:デフォルトの名無しさん
16/01/12 01:31:12.25 Cs06pQDp.net
> Starting with the .NET Framework 2.0, the Array class implements
> the System.Collections.Generic.IList<T>, System.Collections.Generic.ICollection<T>,
> and System.Collections.Generic.IEnumerable<T> generic interfaces.
> The implementations are provided to arrays at run time, and as a result,
> the generic interfaces do not appear in the declaration syntax for the Array class.
> In addition, there are no reference topics for interface members
> that are accessible only by casting an array to the generic interface type
> (explicit interface implementations).

672:デフォルトの名無しさん
16/01/12 01:32:50.51 8YRirrTO.net
そうなんだ。勉強になる。
だけど、疑問はGetEnumrator<T>が実装されてないのか。
パフォーマンス的な問題??

673:デフォルトの名無しさん
16/01/12 01:35:39.33 8YRirrTO.net
>>667
ありがとう。
なぜ明示的なんだろう・・・?

674:デフォルトの名無しさん
16/01/12 01:38:39.32 rxS/9o6U.net
>>664
その「配列とGetEnumratorとジェネリックの謎」はみんなが通る道と思う
んで調べまわった挙句
URLリンク(msdn.microsoft.com)
にコソーっと一文書いてあるだけという
俺も毎回これ忘れた頃に調べなおしてる

675:デフォルトの名無しさん
16/01/12 01:48:37.39 8rTTpObL.net
IEnumrable<T>の引数にすればOK
インデックスアクセスが必要ならIList<T>になるのが微妙だけど

676:デフォルトの名無しさん
16/01/12 02:00:27.12 iDDwmGx/.net
>>664
IEnumerator e = array.GetEnumerator();
使うときは、(型名)e とキャストすれば、
T型しか入っていないから安全

677:デフォルトの名無しさん
16/01/12 02:35:52.19 tu2jRtps.net
>>664
だからバグってのはデバッグ作業で洗い出すものであって例外で検出するものじゃない。
バグが残ってた場合でも安全側に倒せるとか言いたいのかもしれないが、普通asやキャストを使う目的は
変換後のオブジェクトを操作するためなんだから、asを使ったところでその段階で例外が起こるんだから同じこと。

678:デフォルトの名無しさん
16/01/12 04:03:23.28 vzKvvw6W.net
じゃあプログラムのスタートポイントにtry catch入れておけよ。
デバッグで潰すんだからいいよな。

679:デフォルトの名無しさん
16/01/12 08:00:08.31 8rTTpObL.net
as でキャスト失敗 → 操作すると NullReferenceException
() でキャスト失敗 → そこで InvalidCastExcepton
どっちがバグが分かり易い?

680:デフォルトの名無しさん
16/01/12 08:24:17.06 EEhodjTq.net
>>675
どっちも同じ。
どちらの例外もなぜその例外が発生したかの情報は何も与えてくれない。
バグは変換そのものではなく、返還対象の変数にオブジェクトが格納される箇所にあるのだから当たり前だ。

681:デフォルトの名無しさん
16/01/12 08:31:04.57 EEhodjTq.net
だから最初から言ってるように、例外を投げないからasを避けてキャストを使え、なんて理屈を認めるのなら
TryXXXパターンについても同様でなければならない。
例外投げるメソッドよりTryXXXを好んで使うけどasはダメ、なんて態度は頭の悪い論理矛盾でしかない。

682:デフォルトの名無しさん
16/01/12 09:02:58.57 8rTTpObL.net
>>676
InvalidCastExceptonてだけでキャスト失敗したんだって一目で分からない?
Dictionaryの値取得も全部TryGetValue使うの?
凄いソースになりそう…

683:デフォルトの名無しさん
16/01/12 09:39:04.39 8YRirrTO.net
デバッグ済んでる(バグない)から大丈夫だよw
バグ出さない人がなぜデバッグしてるのか不思議w

684:デフォルトの名無しさん
16/01/12 11:15:58.30 sWEOWf3Z.net
デバッグ段階はともかく、本番だとバグが有ってもそれなりに動くほうが大事じゃね?
まあ記録は残せるようにした方がいいけど放置でも問題ない場合も少なくない

685:デフォルトの名無しさん
16/01/12 16:50:04.88 4jtZl+9X.net
>>673
デバッグってのは、バグが出てから修正する作業の事を言うんじゃないのか?
バグが無いかチェックするのはテストだろ

686:デフォルトの名無しさん
16/01/12 19:58:37.10 KW/Xw3D4.net
>>680
ソフトによるとしか言えんわな
かね扱うソフトでテキトーな結果出されても困るし
>>681
言葉遊びしたいなら、チラシの裏にでも書いとけよ…

687:デフォルトの名無しさん
16/01/12 20:22:54.77 jfJr9zeb.net
まだやってんのかよ。
お前らは人間初心者をいつ卒業すんの?

688:デフォルトの名無しさん
16/01/12 22:10:08.21 MMw4PyB+.net
asに構造体は使えないんだけど、その場合はどうすんの?

689:デフォルトの名無しさん
16/01/12 23:11:14.34 nYMhZmRI.net
配列を宣言するとき
int[] a = {0,1,2,3};
int[] b = new int {0,1,2,3};
の違いって何ですか?

690:デフォルトの名無しさん
16/01/12 23:35:20.63 NzXAV9Z/.net
上は配列変数宣言専用の構文で、右辺は式ではない
下の右辺はそれ単体で新しい配列を作って初期化する式で、その結果をbに代入している
右辺のintを省略したいなら上の書き方はやめて int[] c = new[] {0, 1, 2, 3}; とするのが今風
この場合もnew[] {0, 1, 2, 3}で一つの式になる

691:デフォルトの名無しさん
16/01/12 23:38:48.58 guZomEnP.net
ていうかbのほうは通らんでしょ
int[] b = new int[] {0,1,2,3};
が正しいな

692:デフォルトの名無しさん
16/01/12 23:50:25.04 nYMhZmRI.net
IDが変わらないうちにお礼を。
ありがとうございました!
newするときintを省略することもできるんですね。
bの表記は間違っていましたね。すみません。

693:デフォルトの名無しさん
16/01/12 23:54:15.55 8rTTpObL.net
型推論も使える
var a = new[] {1, 2, 3};

694:デフォルトの名無しさん
16/01/13 21:08:40.32 0D7P8fwj.net
疑問に思うソースコードがあります。
改行が多すぎて書き込めないので、分割をしつつ改行を縮尺しているソースです。
お見苦しい中、お答えできる方がいましたらよろしくお願い致します。

695:デフォルトの名無しさん
16/01/13 21:09:04.75 0D7P8fwj.net
using System;
namespace ConsoleApplication2
{class Program
{static void Main(string[] args)
{
Recurrence x = new Recurrence { Depth = 8 };
x.Excute();
Console.ReadLine();
}}
class Recurrence{
public int Depth { get; set; }
public void Excute() { Stack(0); }
private void Stack(int value)
{
++value;
Show(value);
if (value < Depth) Stack(value);
Show(value);
}
private void Show(int value)
{
for (int i = 0; i < value; ++i)
{
Console.Write("〇");
}
Console.WriteLine();
}}}

696:デフォルトの名無しさん
16/01/13 21:10:16.17 0D7P8fwj.net
実行結果
--------------------------------------

○○
○○○
○○○○
○○○○○
○○○○○○
○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○
○○○○○○
○○○○○
○○○○
○○○
○○

連投すみません。再帰でStackメソッドを呼び出して"○"を描画していますが、
実行結果の○が段々減っていく理由が分かりません。
デクリメントされているコードは何もないのに、どうして"○"が減っていく描画ができるのでしょうか?
"○"を8個描画した時点でプログラムは終了しそうな気もします。

697:デフォルトの名無しさん
16/01/13 21:10:49.48 ss4YLmpA.net
>>690
>>1にソースコード貼るサイトあるよ

698:デフォルトの名無しさん
16/01/13 21:18:54.54 0D7P8fwj.net
>>693
ありがとうございます。
あんまり使い方分からないのですが、URL作成できました!
URLリンク(ideone.com)

699:デフォルトの名無しさん
16/01/13 21:20:51.41 eQ7mLiC6.net
>>692
デバッガでステップ実行しながらスコープ内の変数を眺めてみろ

700:デフォルトの名無しさん
16/01/13 21:32:49.98 iJSjjgsI.net
Stackの中でStack再帰呼び出して、戻ってきたところにもShowあるでしょ

701:デフォルトの名無しさん
16/01/13 21:39:16.74 0D7P8fwj.net
>>695
F11でソースを追いました。
すると"○"を8個描画した後にプログラムは終了しそうなのに、何故か
if (value < Depth) Stack(value);
上記のコードにステップが移って、value値がデクリメントされながら再帰されます。
どうしてデクリメントされながら再帰されるのか理解できません。
知っている方がいらっしゃいましたら、ご教示お願い致します。
>>696
知っています。何故デクリメントされてしまうのかが疑問です。

702:デフォルトの名無しさん
16/01/13 21:45:46.55 fAujecyU.net
>>697
デクリメントしてるんじゃないぞ。
インクリメントする前の値が下の方のShow()で表示されているだけだ。

703:デフォルトの名無しさん
16/01/13 21:53:29.44 c8iEzaaj.net
>>697
呼んだ先で加えた変数と戻ってきたときの変数は別の箱だぞ
>>696が再起呼び出しってヒントくれてるんだからそこを意識してみよう

704:デフォルトの名無しさん
16/01/13 22:02:38.12 +fcVBJhy.net
ちょっとホッコリした

705:デフォルトの名無しさん
16/01/13 22:04:53.20 0D7P8fwj.net
>>698
>>699
ありがとうございました!
>呼んだ先で加えた変数と戻ってきたときの変数は別の箱だぞ
これで何とかピンときました。

706:デフォルトの名無しさん
16/01/13 22:06:54.36 c8iEzaaj.net
それはよかった!
おめでとう

707:デフォルトの名無しさん
16/01/14 00:25:40.16 Jez1UKoL.net
>>691
{class Program
{st
この括弧の付け方むかつくから辞めろ

708:デフォルトの名無しさん
16/01/14 00:32:52.74 NYaSS3ys.net
C#ってマイクロソフトのコーディング規約?かなにかで
中括弧をステートメントの後につけるか、改行した後につけるかって決まってますか?
例えば
if{
...
}
なのか
if
{
...
}
です
ご教授お願い致します。

709:デフォルトの名無しさん
16/01/14 00:36:44.01 WOK4h5YC.net
>>704
VSのデフォルトだと後者だよね

710:デフォルトの名無しさん
16/01/14 09:54:57.88 Xyg9nF3V.net
usingステートメントがあればflushもcloseももう必要ないという認識でよろしいでしょうか。

711:デフォルトの名無しさん
16/01/14 11:45:07.50 GjXsqQpw.net
何事も極端に考えるとバカになるぞ

712:デフォルトの名無しさん
16/01/14 12:41:48.14 E5jysWRa.net
>>706
当たり前だけど、usingはフィールドやプロパティに対しては使えないよ。
例えばストリームなんかフィールドで持つことも多いからそういう場合には使えない。

713:デフォルトの名無しさん
16/01/14 18:03:50.77 tOYn4HIE.net
最近プログラムの勉強を始めたのですが自分の勉強方法が本当に正しいのかが
よくわかりません。
今の自分の勉強法:
本のソースコードを写す
      ↓
解説を読み関数の役割を知る
      ↓
写しているのでエラーは出ない
      ↓
   始めに戻る
皆さんこのように勉強なさっているのでしょうか?
よろしければ皆さんがどのようにしてプログラミングを
学んだかを教えていただけないでしょうか?

714:デフォルトの名無しさん
16/01/14 18:30:09.70 ET7JKkBD.net
>>709
俺も最初はその手の本を読んで勉強してたな。
間違った勉強方法なんて基本的にないんだから
それで満足ならそのまま続ければいいと思う。
まあ目標によってはもっといい方法もあるだろうけどね。
あとはグーグルで知りたい知識を検索できる能力と
わからないことをちゃんと文章化して質問できる能力があればいいんじゃない?

715:デフォルトの名無しさん
16/01/14 18:59:40.54 FteGdT+l.net
>>706
Disopseがそれらと同一で、スコープ終了時以外にDisposeする必要がないなら
それでいいんじゃね
>>708
推奨はされないが、使えない事は無かったはずだが

716:デフォルトの名無しさん
16/01/14 20:58:14.08 YZJ24glt.net
>>709
最初はもどかしいが写経は読むたけより確実に効果ある。信じて続けたまえ

717:デフォルトの名無しさん
16/01/14 21:48:18.40 S/qmyCNx.net
>>709
俺はこんな感じだった(★が追加部分)
本のソースコードを写す
      ↓
解説を読み関数の役割を知る
      ↓
写しているのでエラーは出ない
      ↓
★いろいろ数値や変えたいところをいじってみる
      ↓
★結果がどう変わるか確認したり、エラーが出たら調べてみる
      ↓
★気が済んだところで
   始めに戻る
改造っていいぞ

718:デフォルトの名無しさん
16/01/14 22:12:56.03 wdzz2Qmv.net
>>709
こうしたい
 ↓
どーしたらこーできる?
 ↓
リファレンスを最初のページから順にペラペラ
 ↓
試す&デバッグ
どの言語もこの方法で覚えたような気がする
目的が先で、そのための手段を探してたと思う
本を写したり纏めたり蛍光ペン使ったりしたことは皆無
考えたら入門書の類も買ったことが無いと思う

719:デフォルトの名無しさん
16/01/15 11:23:26.57 y8oLhUCG.net
>>709
最初はソースコートやプロパティを色々と変更してみるのがいいな
わざとエラーを出してみるといいし
で、慣れたところで簡単な物を1から作ってみる
書籍は基本的に入門書だけでいい

720:デフォルトの名無しさん
16/01/15 14:16:50.39 Jozr4WCO.net
俺はとりあえずどんな言語始める時も電卓作ってみるわ
一つ作ってみたら色々判ることが多い

721:デフォルトの名無しさん
16/01/15 17:53:08.29 /akxGQYe.net
電卓作るってどういうレベルの?

722:デフォルトの名無しさん
16/01/15 18:58:43.56 jkJxSpfV.net
>>717
もちろん関数電卓さ

723:デフォルトの名無しさん
16/01/16 04:02:44.36 PH3YsaQA.net
デリゲートというものの仕組みが全く理解できません
移譲とか言われても意味が分かりません
他のメソッドの実行を肩代わりする意味が分からないです
普通にそのメソッド実行するのと何が違うのか・・・

724:デフォルトの名無しさん
16/01/16 04:36:59.21 RMhSJKcp.net
マルチキャストできる。

725:デフォルトの名無しさん
16/01/16 05:42:44.11 fCKattgx.net
linqでも使ってりゃイメージが掴める

726:デフォルトの名無しさん
16/01/16 07:54:09.81 4iVYdLKE.net
まるちぽすとできる

727:デフォルトの名無しさん
16/01/16 08:33:35.43 Huy9AB1c.net
C/CC++からなら、関数ポインタ/std::functionの高級版でOK。

728:デフォルトの名無しさん
16/01/16 09:32:50.53 PH3YsaQA.net
linqは何度か使ってるんですが、デリゲートを使わないlinqなので未だに分からないです
もちろんlinqについての解説ページ(未確認飛行とか)も何度も読みましたが
正直普通に理解できませんでした
頭が悪いと言われればそれまでなんですが・・・
やっぱり一番分かりやすいページって未確認飛行なんでしょうか

729:デフォルトの名無しさん
16/01/16 09:55:07.12 iwKS8iBR.net
Linqでデリゲート使わないのなんて数えるほどのケースしかないような気がするけど…
コレクションの中から条件に一致する最初の探して、っていう
Enumerable.First<T>(IEnumerable<T>, Func<T, bool>)
がある
まあざっと実装するなら
foreach (var item in collection) if (ISMATCH(item)) return item;
って感じのメソッドになるよね
でFirstメソッドはこのISMATCHっていう条件関数以外は実装してくれてて、
あとはISMATCHに該当するのだけくれればあとはやっとくよ、という状態
で、そのISMATCHを渡すためにデリゲートを使う
public bool IsMatching(Person p) { return p.Name == "hoge"; }
っていうメソッドが存在していれば、あとは
persons.First(new Func<Person, bool>(IsMatching))
と言う記述でFirstにIsMatchingを渡すことができる
// 実際には省略してpersons.First(IsMatching)とか書く
// さらにいちいち"hoge"しか探せないメソッド用意するのは馬鹿馬鹿しいので
// ラムダ式を使ってpersons.First(_person => _person.Name == "hoge")とか書く

730:デフォルトの名無しさん
16/01/16 10:04:13.28 RMhSJKcp.net
非同期処理とかデリで実装例おなしゃす

731:デフォルトの名無しさん
16/01/16 10:31:40.22 RZSnFlcj.net
>>726
C# Taskでググれ
昔はデリゲートの非同期呼び出しとかリモート呼び出しとかあったけど今は事実上の非推奨

732:デフォルトの名無しさん
16/01/16 10:55:35.08 Huy9AB1c.net
関数も変数の一つと考えろ

733:デフォルトの名無しさん
16/01/16 11:01:02.87 PH3YsaQA.net
>>725
ちょうむずかしいです…
サル向きのデリゲート解説ページとかないですかね
ラムダ式は、左辺を入力として右辺を実行するとか、ラムダ式使えば匿名メソッドが簡単に?書ける
とかくらいしか分かってないです
linqのorderbyあたりで使う分にはそれくらいで何とかなってしまったので

734:デフォルトの名無しさん
16/01/16 11:09:09.66 2WfpqfPQ.net
>>729
心配しなくていいよw
実はそんなに難しいことじゃないから

735:デフォルトの名無しさん
16/01/16 12:19:48.29 1tZpiiVY.net
何とかなってんならいいだろ
何ともならなくなったら考えろ
100%理解しないと前に進めないならそもそも向いてないから

736:デフォルトの名無しさん
16/01/16 13:27:02.32 ycK3j5Q3.net
ラムダ式・無名関数・クロージャなどは、大雑把に言えば同じ
コールバックしてもらいたい処理を渡すだけ。
関数ポインタ・関数の参照(アドレス)を渡すだけ

737:デフォルトの名無しさん
16/01/16 13:39:02.04 hyYE+GOR.net
>>719
MethodA()
{
 PreMethod();
 _MethodA();
 PostMethod();
}
MethodB()
{
 PreMethod();
 _MethodB();
 PostMethod();
}
こんな場合は、_MethodA,_MethodBをdelegateにすれば、PreMethodとPostMethod()を実行する部分を1つに纏められる。
MethodX( action X )
{
 PreMethod();
 X();
 PostMethod();
}
MethodX( _MethodA );
MethodX( _MethodB );

738:デフォルトの名無しさん
16/01/16 14:04:11.50 Vki0rxI6.net
質問です。
ADO.NET Entity でValidateはどこに書くのでしょうか?
DBから自動生成した.edmxファイルの中に書くと
上書きしたときに整合性がとれなくなりそうだけど
[Required]
public string test { get; set; }

739:デフォルトの名無しさん
16/01/16 18:05:49.48 kQ++eYvW.net
EFは廃れる運命しかない
リードモデルでなら使えるかなと思ってた時期もあったけど
今時は最初から非正規化されてるテーブルあるいはドキュメントをそのままGETが主流だし
View側もわざわざPOCOにマップするコストを払いたくない

740:デフォルトの名無しさん
16/01/16 19:42:42.71 qf+Fjc45.net
じゃあ主流は何ですか?

741:デフォルトの名無しさん
16/01/16 21:09:35.97 zciXAlmp.net
>>729
LINQ使えてるなら自分がLINQ自体を実装するならどうするか考えてみればいい
orderByメソッドの引数を評価関数にするにはどうするか?
それを汎用的に宣言するには?→delegate

742:デフォルトの名無しさん
16/01/16 21:58:33.49 Dk3A0eRo.net
WindowsでのコードファーフトのDBフレームワークとしては残るだろう。
>>734みたいな使い方は廃れるかもね。
単なるテーブルとクラスとのマッパーならDapperで事足りる。

743:デフォルトの名無しさん
16/01/16 22:11:31.39 nU3glmtt.net
>>719
自分も勉強中の初心者だけど、理解してる範囲で解説してみる。
デリゲートとは、「メソッドを入れる型」のこと。
int型の変数に整数が入るのと同様に、デリゲート型の変数にはメソッドが入る。
なんの役に立つかというと、「処理を場合に応じて随時変更できる」ということ。
(続く)

744:デフォルトの名無しさん
16/01/16 22:12:01.60 nU3glmtt.net
疑似コードで説明すると、例えば
void Convert()
{
処理1;
処理2;
処理3;
}
というメソッドがあるとする(>>733と同じような例だけど…)。
処理1と3は必ず固定の処理。処理2は、場合によって処理をいろいろ切り替えたいとする。
(ある場合は、処理2のところでMethodA()を呼びたい。また別の場合にはMethodB()を呼びたい、とか。)
こんなとき、処理2の部分で、デリゲート型変数fを使って、
void Convert(デリゲート f)
{
処理1;
f();
処理3;
}
と書けばいいい。
先に言ったように、デリゲートとはメソッドを入れる変数のこと。つまり、Convert()は、
「引数としてメソッドを受け取るメソッド」ということになる。
Convert()の呼び出し元では、
デリゲート f = MethodA;
Convert(f);
とする。これで、処理2のところでMethodA()が呼ばれるようになる。
MethodB()を呼びたいときは、かわりに
デリゲート f = MethodB;
とすればいい。
(続く)

745:デフォルトの名無しさん
16/01/16 22:12:28.22 nU3glmtt.net
上の例を見て、こう思うかもしれない。
「Convert()の引数で、メソッド自体を渡さなくても、かわりに処理番号か何かを渡せばいいじゃん」。
つまり、
void Convert(int n)
{
処理1;
if(n==1) { MethodA() };
else if(n==2) { MethodB() };
処理3;
}
とすればいいじゃん、と。
これは確かにその通りだが、問題がある。
それは、Convert()は、事前に想定したメソッド(MethodAとMethodB)しか呼べないということ。
デリゲートを使えば、どんな処理でも渡せるので、
・Convert()は >>719 が作成して、ライブラリとして他の人に公開する
・具体的な処理の中身は、そのライブラリを使う側の人が自由に作る
みたいなこともできるようになる。
「処理のひな型だけは作るけど、具体的な処理は、引数にメソッドとして渡してね」と。
(続く)

746:デフォルトの名無しさん
16/01/16 22:13:03.13 nU3glmtt.net
C#でGUIアプリを作れば、知らないうちに(?)、デリゲートの世話になっている。
例えば、Windowsフォームアプリで、フォームにボタンを貼り付ける。
ボタンをクリックしたら、自分の書いたハンドラが呼ばれる。
これは、デリゲートの仕組みを利用している。
Microsoftが作った.Netのライブラリの中では、
void ボタン押下()
{
f(); // fはデリゲート
}
みたいに、ボタンが押されたらデリゲートfを呼ぶ。(あくまで概念なので、実際にこんな感じかは知らない。)
ボタンを押された時に実際に何の処理をしたいかは、Microsoftはわからない(個々のアプリ作者にしかわからない)。
だから、ライブラリを作る側の人は、具体的に書きようがないので、デリゲートの形で呼ぶ。
一方、アプリの作者は、自分の書いた具体的なメソッドをデリゲートに結びつける。
これによって、ボタンを押したときに、自分の書いたメソッドが(デリゲート経由で)呼ばれるようになる。
なお、最後の例(Windowsフォームの例)は、厳密には、デリゲートじゃなくて「イベント」のはず。
だけどイベントもデリゲートの仕組みを使ってるので、ここでは単純に「デリゲート」と書いた。
(以上)

747:デフォルトの名無しさん
16/01/16 22:24:26.63 U350HfOb.net
長い
ストラテジーパターンだよ、で充分

748:デフォルトの名無しさん
16/01/16 22:43:24.18 Ip/Ue952.net
仕組みはともかく意味は経験がないと理解できない
だから言葉を尽くしたところで無駄

749:デフォルトの名無しさん
16/01/16 23:16:08.09 eoc6QJ5z.net
>>719はデリゲートがどうやって動いてるのか聞いてるのであってデリゲートを使う理由なんか聞いてないだろ

750:デフォルトの名無しさん
16/01/16 23:40:43.42 oUSx9HiB.net
>>745
1行目「だけ」読むとそう思えるね

751:デフォルトの名無しさん
16/01/16 23:42:57.81 nU3glmtt.net
> 移譲とか言われても意味が分かりません
> 他のメソッドの実行を肩代わりする意味が分からないです
> 普通にそのメソッド実行するのと何が違うのか・・・
ということだったので、自分なりに答えたつもりだったんですが、総スカンですね。
グダグダ長文を書いてしまってすみませんでした。
スレ汚し失礼しました。ごめんなさい。

752:デフォルトの名無しさん
16/01/16 23:47:24.63 Ip/Ue952.net
別に好かんとは言ってない
聞いたって理解できないだろってだけ

753:デフォルトの名無しさん
16/01/17 00:11:47.87 DW1lkDap.net
デリゲートについて質問した物です
たくさんレスありがとうございます
ちょっとすぐに理解して返信できないので、とりあえずついたレスを
全部読ませて頂きます
レスありがとうございました

754:デフォルトの名無しさん
16/01/17 00:18:25.50 DW1lkDap.net
すみません、所謂何が分かってないのか分からない状態なのかもしれません
デリゲートとは何だろう?

何サイトかググってデリゲートとは?の概要とサンプルをいくつか見る

移譲とも呼ばれ、C言語で言う関数ポインタに相当しメソッドの実行を肩代わりしてくれるものです
ラムダ式として使えば匿名関数を簡単に書けます

?????
となったので、結局「デリゲートが何か(何をするものか)分からない」
という事なのかもしれません
ラムダ式で使う使い方は、少なくともACTIONデリゲート型を使ったデリゲートよりは分かるのですが
デリゲート型変数にメソッドを入れて何の意味が?っていう感じです
ただ、複数のメソッドを一つのデリゲート型に入れられ、実行時には順次実行される、というのは
確かに複数の機能を手続きのように実行できるので、使い方として普通にメソッドコールするより便利だな
というのは分かりました

755:デフォルトの名無しさん
16/01/17 00:40:03.68 DW1lkDap.net
>>743
ストラテジーは一度だけ使った事あります�


756:i使い方が正しいかは分かりません・・・) その時はMethodAとMethodBで共通のIFを実装して  IViewer viewer;  switch (hoge)  {   case A:   viewer = new Viewer_A(); (breakは省略)   case B:   viewer = new Viewer_B();  }  spViewer.Start(); みたいな事をやりましたがデリゲート型にメソッド入れて実行する使い方っていうのは ID:nU3glmt様の説明を見ると、似たような意味合いで使われるんですね



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:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch