暇つぶし2chat TECH
- 暇つぶし2ch521:デフォルトの名無しさん
19/08/31 18:34:41.41 lSinYyRY0.net
>>510
どんなブラウザでも、標準でそうなってる(べき)と思ってる。meも

522:デフォルトの名無しさん
19/08/31 20:59:16.96 DOQSWUJb0.net
start url
って叩きゃ標準ブラウザが立ち上がるでしょ
引数ってブラウザのexeパス調べてそこに渡すの?
OSが知ってんだからOSにぶん投げればいいだけじゃん

523:デフォルトの名無しさん
19/08/31 22:02:09.86 3KJgwSNk0.net
>>508
Seleniumだな、それこそ。

524:デフォルトの名無しさん
19/09/02 13:12:29.24 x5YZ9uix0.net
Span<T>をコレクションに貯める事って出来ないんでしょうか?
受け取ったbyte[]から一部のみを必要としていますが、startIndexとlengthを一々記録するのも面倒であるため、現状は新たにnew byte[length]を作りコピーをして貯めています
別にこれでも全く困っていませんが、あんまりスマートではない気がしているので元のbyte[]を.AsSpan(startIndex, length)したものをコレクションに貯められればスッキリするのですが

525:デフォルトの名無しさん
19/09/02 13:30:51.46 DTXhuRLF0.net
できないよ
array[3..7]とかでSliceするとか元の配列を使うならArraySegment<T>使うとか

526:デフォルトの名無しさん
19/09/02 14:07:32.18 /BuOMso5a.net
へーSpanってそんな制約があるのか知らんかった
URLリンク(stackoverflow.com)

527:デフォルトの名無しさん
19/09/02 14:41:25.59 ZSYwkq3t0.net
>>508
例えば、Ruby, Selenium Webdriver なら、
下のファイルを、test.rb とすると、端末で、
ruby test.rb "ここにURL"
と入力すると、引数がARGV[0] に入ってくる
require "selenium-webdriver"
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to ARGV[0] # URL

528:デフォルトの名無しさん
19/09/02 17:47:47.05 btOIY8sya.net
>>515
MemoryExtensions.AsMemory()を経由してSystem.Memory<T>を管理するのはどう?

529:デフォルトの名無しさん
19/09/02 22:24:59.33 yMcQzedZ0.net
>>518
C#で書かないならスレチ

530:デフォルトの名無しさん
19/09/03 00:14:45.15 nBDYMOwL0.net
なんで突然ruby?

531:デフォルトの名無しさん
19/09/03 00:20:55.08 UWVASv0T0.net
>>521
ソイツはいくつかのスレタイにRuby禁止といれることになった元凶だから、考えるだけ無駄よ

532:デフォルトの名無しさん
19/09/03 04:53:21.49 uBbuO65f0.net
これもう半分まつもとゆきひろだろ

533:デフォルトの名無しさん
19/09/03 07:44:05.39 ZfMnDhcZ0.net
Matzから分離した闇の半身か何か(ダークファンタジー感)

534:デフォルトの名無しさん
19/09/03 15:02:01.60 qa0OGce90.net
zipファイルのパスワード総当たりのコードってどこかに落ちてたりしません?

535:デフォルトの名無しさん
19/09/03 15:23:56.69 gWEsYspAF.net
ム板なんだし自分で書いても大した手間じゃないだろ

536:デフォルトの名無しさん
19/09/04 23:01:10.22 YAGCYgl00.net
ラプラス使ったほうが早い

537:デフォルトの名無しさん
19/09/04 23:19:14.03 +3gE1skmF.net
ラプラス変換関係ないだろ

538:デフォルトの名無しさん
19/09/04 23:23:33.02 YAGCYgl00.net
フリーソフトなんだけど(´・ω・`)

539:デフォルトの名無しさん
19/09/05 08:24:49.80 cdpeKhxuM.net
ラブプラスに見えたし

540:デフォルトの名無しさん
19/09/05 12:39:28.85 mWzCSlDu0.net
頭がc
胴体がDelphi
尻尾がJava
これはなんという生き物か?

541:デフォルトの名無しさん
19/09/05 12:52:58.36 IuZ8kmLDd.net
メインフォームと5つボタンがあるサブフォームあります。
サブフォームで押されたボタンをメインフォームに渡す方法として、下記のようなことが書いてあります。
「サブフォームの呼び出し時にメインフォームのインスタンスをサブフォームの変数に渡すか、もしくは Ownerプロパティを設定し、サブフォームにメインフォームのインスタンスを伝える必要があります。」
これ循環参照にならないのですか?
owner プロパティならフレームワークでうまくやってくれそうですが、そうしないなら典型的な循環参照でメモリにいつまでも残るように見えます。

542:デフォルトの名無しさん
19/09/05 12:57:57.83 IuZ8kmLDd.net
>532のコードで気になった部分
public FormMain() {
InitializeComponent();
fs = new FormSub();
fs.formMain = this;
}
private void button1_Click(object sender, EventArgs e) {
fs.Show();
}

543:デフォルトの名無しさん
19/09/05 13:07:57.99 /TG+lkXnd.net
昔のVBとかじゃないから
参照カウント方式とかじゃないから
大丈夫だよ

544:デフォルトの名無しさん
19/09/05 15:05:44.19 olW2Z8c3M.net
>>533
循環になってないやん
相互参照になってるだけ

545:デフォルトの名無しさん
19/09/05 15:11:39.37 MYIgyYNAM.net
>>535
相互参照⊂循環参照

546:デフォルトの名無しさん
19/09/06 07:39:44.27 ON7V4Cum0.net
awaitの仕組みって面白いな
プログラムは逐次実行と思い込んでいたから最初戸惑ったけど
プログラムの可読性を上げつつ非同期が書ける仕組み

547:デフォルトの名無しさん
19/09/06 12:21:39.70 5uKlWCRxp.net
バカ、逆に非同期の仕組みが分かりにくい事になってて最悪だわ。
若い奴らはある種のおまじないとしか思って無いぞ。
だからサンプル通りに書いたら動いたで思考停止してるわ。

548:デフォルトの名無しさん
19/09/06 12:23:25.42 5uKlWCRxp.net
だったら最初から完全に隠蔽しちまえばいいのにそれも出来ない半端な言語だよな。

549:デフォルトの名無しさん
19/09/06 12:27:55.87 RjtqJRZu0.net
>>537
async/awaitはとてもいいよな

550:デフォルトの名無しさん
19/09/06 12:36:51.77 dfZG2SkRd.net
>>539
へー半端な言語が大増殖してるねよかったね

551:デフォルトの名無しさん
19/09/06 13:29:27.52 TB1/9ae/0.net
ものすごく細かく気にする価値のないであろう上で質問させてください。
下記のようなコードではColorを予め変数として保持していますが、ColorではなくSolidColorBrushごと変数として持っておいた方が良いと思うのですが違うんでしょうか?(Colorの各変数は下記のConvertメソッドでしか使われていません)
private Color redColor = Colors.Red;
private Color blueColor = Colors.Blue;
public object Convert(object value)
{
switch ((int)value)
{
case 0:
return new SolidColorBrush(redColor);
default:
return new SolidColorBrush(blueColor);
}
}

552:デフォルトの名無しさん
19/09/06 13:30:16.71 I5nGSvp60.net
Occam 呼んだ~

553:デフォルトの名無しさん
19/09/06 13:38:31.81 qBxw88Xh0.net
Convert呼び出した側がOpacityとか勝手に変えたりすることがないことが明らかなら
SolidColorBrushで持っててもいいよ

554:デフォルトの名無しさん
19/09/06 13:43:03.96 TB1/9ae/0.net
>>544
上記のコードは色以外は初期化したいっていう意図だったんですね
理解出来ました、どうもありがとうございます。

555:デフォルトの名無しさん
19/09/06 20:41:34.27 QErA9RfTd.net
return HttpResponseMessage {
StatusCode=HttpStatusCode.InternalServerError

これでクライアントにレスポンス返しても、クライアントで受け取ったレスポンスコードが200になるんだが、どうすりゃ良い?

556:デフォルトの名無しさん
19/09/06 23:59:27.95 2XeZAy8C0.net
short lo = 500;
short hi = -1;
int value = hi << 16 & lo;
上記のプログラムでvalueに期待する結果が格納されません。
valueの右辺へおかしいところありますか?

557:デフォルトの名無しさん
19/09/07 00:04:12.02 1iyY1sdc0.net
まず期待結果を教えろよ
脳内に格納したままで喋るな

558:デフォルトの名無しさん
19/09/07 00:35:07.80 lng4b11Wa.net
ぶっ飛んでるねw

559:デフォルトの名無しさん
19/09/07 00:47:49.03 lKqYze8d0.net
>>547
なんとなく&(and)と|(or)を間違えてる気がするけど、期待値書いてくれなきゃ分からんねw

560:デフォルトの名無しさん
19/09/07 01:10:23.93 ClfuNVBY0.net
>>547
ビット演算?をしてる割には
unsignedじゃないのが気になった

561:デフォルトの名無しさん
19/09/07 01:21:40.06 SOW3zbb30.net
C派生のシフト演算子ってビット演算子よりも優先順位低いんじゃなかったか?
C#で入れ替わったのかもしれんが

562:デフォルトの名無しさん
19/09/07 01:30:36.24 spGdC07na.net
型変換か?

563:デフォルトの名無しさん
19/09/07 01:31:47.20 l9Sxm6Vo0.net
>>552
docsに演算子の一覧と優先順位がある
URLリンク(docs.microsoft.com)

564:デフォルトの名無しさん
19/09/07 01:52:37.97 lKqYze8d0.net
>>552
逆だぞ
Cの時から

565:デフォルトの名無しさん
19/09/07 01:57:56.73 7Z6eBjmW0.net
?はもっと上げてほしい

566:デフォルトの名無しさん
19/09/07 01:58:53.26 7Z6eBjmW0.net
じゃなくて??

567:デフォルトの名無しさん
19/09/07 11:12:31.90 53qID/ifa.net
async/await、読みやすいし書きやすいけどな。

568:デフォルトの名無しさん
19/09/07 11:14:11.92 LlCffhcK0.net
URLリンク(www.youtube.com)
Introduction into StockSharp training course
どうこれVisual Studioってこんなに速く作れるの?
自分で自動売買ソフト組めるってすごくね?

569:デフォルトの名無しさん
19/09/09 13:42:14.17 mFi2C/Ml0.net
クラスの継承について分からくなってしまったので教えて下さい。
以下のプログラムを実行すると、コメントの通り、False, True と表示されます。
[STAThread]
static void Main(string[] args)
{
  var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  var folderItems = new Shell32.Shell().NameSpace(desktopPath).Items();
  Console.WriteLine(folderItems is Shell32.FolderItems2); // False と表示される
  Console.WriteLine(folderItems is Shell32.FolderItems3); // True と表示される
}
Shell32.FolderItems3 は Shell32.FolderItems2 を継承しているので
2つ目が True なら必ず1つ目も True になると思っていたのですが、
これはどのようなことが起こっているのでしょうか。
FolderItems2 object
URLリンク(docs.microsoft.com)
FolderItems3 object
URLリンク(docs.microsoft.com)
.Net Framework 4.7.2 でコンパイルし、Windows 10 Pro で実行しました。
よろしくお願いいたします。

570:デフォルトの名無しさん
19/09/09 13:57:18.69 +ClizqJ4d.net
下記 は子フォームから親フォームへのデータ引き渡しのサンプルです。
ShowDialog(); の戻り値を使ってないのですが、ここがよくわかりません。
static public List<object> ShowForm2(List<object> argObjs) {
using (Form2 subForm = new Form2(argObjs)) {
subForm.ShowDialog(); // 戻り値は?
return subForm.resultObjs;
}
}
現在はデータの受け渡しは ShowDialog(); で表示、DialogResult を受け取り、これで処理を分岐。
これだと呼び出し側が少し膨らむと思って探していたサンプルが上のやつです。

571:デフォルトの名無しさん
19/09/09 14:01:51.48 FLVXg6p/0.net
>>560
type of


572:



573:デフォルトの名無しさん
19/09/09 14:25:45.50 wj5pBZXU0.net
>>561
それだけじゃ何とも言えないけど
ダイアログがキャンセルされたかどうかもresultObjsに含んでる
またはキャンセルされたかどうかは重要ではない
のどっちかでDialogResultは不要と考えたんじゃね
あとはただのチェック忘れか

574:デフォルトの名無しさん
19/09/09 14:33:19.47 +8Zg4WGY0.net
showdialogはあくまでサブフォーム表示中に
処理を進めないためだけに使っていて
表示したサブフォームがOKもキャンセルもない作りなら
返り値を使う必要がないんだろう
例えばファイルの検索処理とその経過を表示するだけの
サブフォームだったりするんじゃないかな

575:デフォルトの名無しさん
19/09/09 14:44:41.43 y33/yVcMa.net
>>560
FolderItems2とかFolderItems3はあくまでVSによって作られた
ラッパークラスなんだと思うけど、たぶんこのラッパークラスには
元のCOMの継承関係は反映されないんだろう。
知らないけど。

576:デフォルトの名無しさん
19/09/09 14:54:29.42 mFi2C/Ml0.net
>>562
レスどうもありがとうございます。
申し訳ないですが、おっしゃりたいことが理解できませんでした。
>>565
レスどうもありがとうございます。
>>560 で貼り付けた URL は不適切で、
本来は以下の URL を貼り付けるべきでした。
申し訳ないです。
FolderItems2 Interface
URLリンク(docs.microsoft.com)
FolderItems3 Interface
URLリンク(docs.microsoft.com)
この .Net の説明を見てもやはり継承関係はあるようですし、
if (folderItems is Shell32.FolderItems3 folderItems3)
{
  Shell32.FolderItems2 folderItems2 = folderItems3;
}
のようなコードもコンパイルエラーにならないので、
継承関係があることは間違いないと思います。
また何かお分かりのことがあれば教えていただけると嬉しく思います。
よろしくお願いいたします。

577:デフォルトの名無しさん
19/09/09 15:06:55.45 wj5pBZXU0.net
COMにおける継承はメンバを引き継ぐという意味であってキャスト可能かどうかは別の話だから
.NETのコード上で明示的または暗黙的にCOMオブジェクト(のラッパ)をキャストした場合
QueryInterfaceが呼び出されてそのインターフェイスに変換できるかどうかオブジェクト自身に問い合わせる
だから共通型システム的には問題ない暗黙的キャストでもその下のQueryInterfaceで拒否される可能性がある

578:デフォルトの名無しさん
19/09/09 19:12:21.94 ko6k1+RqM.net
正規表現を教えてください。
先頭一文字は大文字アルファベット、
次の一文字は大文字アルファベットかスペース、
残り五文字が数字、です。
文字数は多すぎても少なすぎてもダメてす。

579:デフォルトの名無しさん
19/09/09 19:34:55.30 N7SL81rE0.net
[A-Z][A-Z\s]\d{5}

580:デフォルトの名無しさん
19/09/09 19:51:19.13 P/8qmdeQ0.net
C#でdxfファイルを読み込んでどんなCADデータかなと表示するにはどんな方法がありますか?

581:デフォルトの名無しさん
19/09/09 19:51:40.30 +ClizqJ4d.net
>>563
戻り値使わないとエラーでビルドできないと思ったんですが、こんな書き方あるんですね。

582:デフォルトの名無しさん
19/09/09 19:58:03.26 ko6k1+RqM.net
>>569
ありがとうございます!
できました!!

583:デフォルトの名無しさん
19/09/09 19:58:22.06 8qRxx3SUa.net
>>570
Autodeskのサイトからviewerが落とせたと思うがそれ使うんじゃダメなのか?
C#を使って何か独自のことがしたいの?

584:デフォルトの名無しさん
19/09/09 20:38:09.86 /GXaCKPOd.net
>>570
自力でレンダリングしてるらしきサンプル見つけた
URLリンク(www.codeproject.com)

585:デフォルトの名無しさん
19/09/09 21:02:37.25 gB0pdJ5j0.net
>>570
結構大変。DWGならlibreDWGってライブラリーがある

586:デフォルトの名無しさん
19/09/10 22:30:01.75 /j9k/Fivd.net
>>573
最終型は建築のキープランってものがあって、そこに無数の符号という記号が丸の中に書いてあるんだけどそこを色塗りをしたい。
>>574
ありがとうございます。
難解過ぎてゆっくり休みの日にでも読んでみます。
>>575
やっぱ大変そうですよね。調べてもなかなか...

C#スレはあったかいな。ありがとうございます!

587:デフォルトの名無しさん
19/09/11 00:00:22.11 1SzE9pLa0.net
一般人「ウィンドウ」
キモオタ「フォームがーーー」

588:デフォルトの名無しさん
19/09/11 18:58:32.68 YXyi8nZ+0.net
フォームってなに?泡?

589:デフォルトの名無しさん
19/09/12 08:36:47.62 XbTCqLqm0.net
c#は食わず嫌いだったけど使ってみたら案外良かった
使いやすいように改良してるんだな

590:デフォルトの名無しさん
19/09/12 11:25:52.65 QIiZhm2T0.net
コントロールのタイマーの質問なんですが
private void Timer1_Tick(object sender, EventArgs e)
{
  MyClass myClass = new MyClass(this);
  myClass.//クラスの処理いろいろ
}
こう書くと毎回クラスが初期化されてしまいます
タイマー内で同じクラスのインスタンスを使い続けたい場合どのように書けばいいのでしょか?

591:デフォルトの名無しさん
19/09/12 11:31:00.31 AZGZd9Ny0.net
myClassをメンバ変数にする

592:デフォルトの名無しさん
19/09/12 11:40:42.95 2zGYYD27p.net
myClassなんて再利用性が皆無なネーミングすんなよ。

593:デフォルトの名無しさん
19/09/12 11:45:28.48 joMf8nOja.net
>>582
説明のための命名だろうよ

594:デフォルトの名無しさん
19/09/12 12:10:59.94 V+BKjeIEM.net
発達はコンテキストが想像できないから…

595:デフォルトの名無しさん
19/09/12 13:44:13.80 j3ZoG8EK0.net
>>582
aho

596:デフォルトの名無しさん
19/09/12 14:02:29.31 0aQt/zFJa.net
>>580
タイマーのイベントハンドラを消して、適当なタイミング(例えばFormのLoadイベントとか)で
private void Form1_Load(object sender, EventArgs e)
{
var count = 0;
timer1.Tick += (snd, ea) =>
{
Console.WriteLine($"count = {count++}");
};
}
でもこれだとイベントの購読解除ができないので注意
っていうか、ジョークだから真に受けないでw

597:デフォルトの名無しさん
19/09/12 20:25:20.03 QIiZhm2T0.net
>>581
レスサンクス、そもそも宣言しないってことですか
それもアリかも、今回はインスタンス1個で済みそうだし
>>586
レスサンクス、むむむ、どうなるん?
>>582
めっちゃわかりやすいし

598:デフォルトの名無しさん
19/09/13 14:33:13.49 FohQxIv6d.net
>>587
コンストラクタかTickイベント(初回のみ)でTimerのTagプロパティにMyClassインスタンスを設定
senderからTagに設定されているインスタンスを取得して利用するってやり方もある
1タイマー1MyClassって感じの設計ならこっちの方がいいかもね

599:デフォルトの名無しさん
19/09/13 16:09:57.39 GqasltTgM.net
再利用性のないクラスの名前に拘り過ぎるのは
効率的に無駄だなと感じる
ライブラリ用のクラスは拘るけどね

600:デフォルトの名無しさん
19/09/13 17:07:26.51 zz4VRjti0.net
>>588
レスサンクス
だけど考えても理解できませんでした

601:デフォルトの名無しさん
19/09/13 17:17:29.19 GqasltTgM.net
これでいいじゃない
private MyClass myClass = new MyClass(this);
private void Timer1_Tick(object sender, EventArgs e)
{
  myClass.//クラスの処理いろいろ
}

602:デフォルトの名無しさん
19/09/13 17:23:20.15 65eTAicb0.net
マイコラスの嫁がかわいい

603:デフォルトの名無しさん
19/09/13 17:47:41.70 FohQxIv6d.net
>>590
コンストラクタで、
Timer1.Tag = new MyClass(this);
イベントで
var myClass = ((Timer)sender).Tag as MyClass;
コンストラクタで作ったインスタンスがTimer1のイベントで使えるようになる
これで理解出来そう?

604:デフォルトの名無しさん
19/09/13 17:49:44.94 XXPMNkq8a.net
>>590
たぶんこう
var mc = (timer1.Tag ?? (timer1.Tag = new MyClass())) as MyClass;
でもこんなアホなことやったらあかんw

605:デフォルトの名無しさん
19/09/13 17:59:46.24 FohQxIv6d.net
捕捉でsenderの扱いに馴染みがなくて分かりずらいなら
var myClass = Timer1.Tag as MyClass;
って直接コントロールを見てもいいかな
10個のタイマーでそれぞれクラス作るとかだと、メンバに持つのが嫌になるからそういう時に便利

606:デフォルトの名無しさん
19/09/13 21:09:16.91 zz4VRjti0.net
>>591
サンクスです、やってみました
//キーワード 'this' は現在のコンテキストでは使用できません。
thisがなければいけるのですが、
>>593
サンクスです、コンストラクタってMyClassでしょか?
Timer1.Tag = new MyClass(this);  //thisが受け付けてもらえません
仕方ないのでButton1_Clickに置きました
var myClass = ((Timer)sender).Tag as MyClass;  //myClassがNullになります
var myClass = Timer1.Tag as MyClass;   //こっちもNullになります
>>594
サンクスです、うまく動きました
でも正直あまり理解できてません
注:理解するのに時間がかかります

607:デフォルトの名無しさん
19/09/13 21:48:16.79 PFGdVlPv0.net
windows form で背景色を白から青にジョジョにアニメーションで変化させるには?
今のところコードは下記です。
void timer_Tick(object sender, EventArgs e){
// 白 255,255,255 // 黒 0,0,0
var a = textBox1.BackColor.A;
var r = textBox1.BackColor.R;
var g = textBox1.BackColor.G;
var b = textBox1.BackColor.B;
if (a == 255) { a = 1; }
var a = a + 25;
if (a >= 255) { a = 255; }
var r = textBox1.BackColor.R - 25;
if ( r <= 0) { r = 0; }
var g = textBox1.BackColor.G - 25;
if ( g <= 0 ) { g = 0; }
var b = textBox1.BackColor.B + 25;
if (textBox1.BackColor.B >= 255) { b = 255; }
textBox1.BackColor = Color.FromArgb(a, r, g, b);
// 終了条件チェック、
// 終了処理
}

608:デフォルトの名無しさん
19/09/13 22:11:07.86 YdWi/cYta.net
>>597
int counter = 0;
void timer_Tick(object sender, EventArgs e)
{
counter++;
counter %= 256;
textBox1.BackColor = Color.FromArgb(255 - counter, 255 - counter, 255);
}

609:デフォルトの名無しさん
19/09/13 22:12:15.08 Gf0j4OgCd.net
>>596
>>580 でMyClassにthis を渡しているから皆thisを渡してインスタンスを作ってんだけどthisいらないの?
いらないならthisは消していいよ

610:デフォルトの名無しさん
19/09/13 22:27:35.64 zz4VRjti0.net
>>599
いやthisは欲しいです、Class内からtextboxコントロールのメソッド触りたいので
form1渡してます

611:デフォルトの名無しさん
19/09/13 23:44:37.81 aO4dryeFa.net
>>597
やってみた
public partial class Form1 : Form
{
  private Stopwatch mStopwatch = new Stopwatch();
  public Form1()
  {
    InitializeComponent();
  }
  private Color BlendColor(Color a, Color b, double pos)
  {
    Func<int, int, int> blend = (i, j) =>
    {
      var x = Math.Round((1 - pos) * i + pos * j, 0);
      return Math.Min(255, (int)x);
    };
    var A = blend(a.A, b.A);
    var R = blend(a.R, b.R);
    var G = blend(a.G, b.G);
    var B = blend(a.B, b.B);
    return Color.FromArgb(A, R, G, B);
  }

612:デフォルトの名無しさん
19/09/13 23:44:54.82 aO4dryeFa.net
  private void button1_Click(object sender, EventArgs e)
  {
    mStopwatch.Restart();
  }
  private void timer1_Tick(object sender, EventArgs e)
  {
    var timeout = 5d;
    var elapse = Math.Min(timeout, mStopwatch.ElapsedMilliseconds / 1000d);
    var pos = elapse / timeout;
    BackColor = BlendColor(Color.White, Color.Blue, pos);
  }
}

613:デフォルトの名無しさん
19/09/14 02:16:18.45 BYSNLn3J0.net
>>600
コンストラクタやフィールドだとthisって使えないんだっけ?
それならこれでいけるかな
Tagの方も同じ感じでいけるはず
private MyClass myClass;
private void Timer1_Tick(object sender, EventArgs e)
{
if(myClass = null)
{myClass = new MyClass(this);}
myClass.//クラスの処理いろいろ
}

614:デフォルトの名無しさん
19/09/14 09:11:10.12 weYOKlpc0.net
>>603
れすさんくすです
なるほど宣言と初期化をわけるのですね、うまく動きました

615:デフォルトの名無しさん
19/09/14 11:56:47.95 vC+cN/7F0.net
Action<T>は値型という解釈で良いのでしょうか?
var dic = new Dictionary<int, Action<float>>()という辞書に保持されているActionのメソッドを引いたり足したりしたいのですが、
下記のようにするとdicのvalueには反映されないようですが再度dicに追加してアップデートしないといけないということでしょうか?
var action = dic[1];
action += method; // action.GetInvocationList().Lengthを調べるとちゃんと足されてる一方、dic[1].GetInvocationList().Lengthは変化なし

616:デフォルトの名無しさん
19/09/14 12:17:37.64 iAxlaW7xa.net
デリゲートは参照型
action += method は文字通り action = action + method であり、結合後の新しいインスタンスが action に代入される
デリゲート同士の + は String と同様に言語仕様によって特別扱いされており、Delegate.Combine メソッドの呼び出しに変換される
ちなみにイベントに対する += は x.ev = x.ev + method ではなくプロパティと同様にxに対する特殊なメソッド呼び出しになる
作法的な話をすると、デリゲートのマルチキャストは歴史的経緯による遺物であり、イベントハンドラ以外には基本的に使わない方がいいよ

617:デフォルトの名無しさん
19/09/14 12:37:52.80 vC+cN/7F0.net
なるほど、action += methodは、action = new Action(action + method)的な形ということだったんですね
ありがとうございます

618:デフォルトの名無しさん
19/09/14 14:06:14.47 nQc/7xFt0.net
Windows form だとちょっとした色変えるだけのエフェクト書くの大変。
iPhone swift だと 下記みたいな 2行 でかけるのに。
UIView.animate(withDuration: 0.5, delay: 0.0, options:[]
, animations: { TextField.backgroundColor = .blue }
, completion : { _ in TextField.backgroundColor = .white } )
Form のクラスメソッドに色、透明度、位置、回転、大きさとかを変化させるアニメーション系のメソッド追加してほしいね。

619:デフォルトの名無しさん
19/09/14 16:27:56.54 y7dkXYFS0.net
>>608
そういう人はWPF使う方がええよ
mvvmにこだわらなければそんな差ないし

620:デフォルトの名無しさん
19/09/15 11:17:21.32 ZbgEJrYza.net
今でも業務系のASPって、MVCよりWeb formsのほうが多い?

621:デフォルトの名無しさん
19/09/15 11:21:19.74 0P7zcb1/0.net
>>610
多いと言うか更改されずに腫れ物システムとして生き残ってるのが多いよ

622:デフォルトの名無しさん
19/09/15 11:23:22.76 qUTb/lfg0.net
>>610
ASPとASP.NETは違うよ

623:デフォルトの名無しさん
19/09/15 14:39:22.86 CYqvBFjrF.net
ASP: Application Service Provider

624:デフォルトの名無しさん
19/09/15 17:44:41.18 DjqXGTBC0.net
>>612
aho

625:デフォルトの名無しさん
19/09/15 17:46:02.32 tc+PQ4bB0.net
アスペルガー

626:デフォルトの名無しさん
19/09/15 18:48:25.55 qUTb/lfg0.net
>>614
お前がな

627:デフォルトの名無しさん
19/09/15 19:36:43.99 50f2l1H40.net
application hosting options

628:デフォルトの名無しさん
19/09/15 20:38:22.87 IMDj4f3rd.net
>>612
アプリケーションサービスプロバイダ(英語: Application Service Provider、ASP)とは、
アプリケーションソフト等のサービス(機能)をネットワーク経由で提供するプロバイダ(= provide 提供する 事業者・人・仕組み 等全般)のこと[1]。
広義にはこうした仕組みのソフトウェア提供形態やビジネスモデルまでも指す[1]。
URLリンク(ja.m.wikipedia.org)

629:デフォルトの名無しさん
19/09/15 22:04:55.99 ZbgEJrYza.net
>>610です
>>612
ごめんなさい。自分が端折ってしまったのがいけませんでした。ASP.NETです
>>611
やはりそんな感じなんですかね。意外とASP.NET関連の求人が多いので保守メインなのか開発メインなのか気になったもので

630:デフォルトの名無しさん
19/09/15 22:31:35.04 007yvQzV0.net
ACTIVE SELF PROTECTION の求人だったりして
URLリンク(activeselfprotection.com)

631:デフォルトの名無しさん
19/09/16 01:27:46.19 2BSu07WM0.net
Bitmapを返すdllがあります(C#で作成)
それをWinFormsで参照し、Bitmapを受け取りたいのですが、空の?Bitmapが返ってきます。
デバッガでdll側がきちんとBitmapをreturnしているところまでは確認できました。
ほかにどごを見直せばいいでしょうか

632:デフォルトの名無しさん
19/09/16 01:45:47.54 2BSu07WM0.net
>>621
dll側をよく確認したところ、記述ミスがありました。
スレ汚ししてしまってすみません。

633:デフォルトの名無しさん
19/09/16 10:01:49.86 z/LnXMaR0.net
Process.Start()
で既に起動済みの外部コンソールアプリにコマンドを渡して結果を受け取りたいんですけど
どうすればいいですか?

634:デフォルトの名無しさん
19/09/16 10:55:23.20 1SVMjj7z0.net
>>623
起動時に繋いどかないと後からは無理
URLリンク(cammy.co.jp)

635:デフォルトの名無しさん
19/09/16 11:17:36.58 TvwShLRF0.net
>>623
processをどう作ったか書かないと

636:デフォルトの名無しさん
19/09/16 12:31:59.14 z/LnXMaR0.net
>>625
普通にこんな感じです
Process prc=new Process();
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.FileName = "hoge.exe";
psInfo.CreateNoWindow = true;
psInfo.UseShellExecute = false;
prc.StartInfo = psInfo;
prc.Start();
コンソールアプリはすぐに終了せずに待機してくれるタイプです

637:デフォルトの名無しさん
19/09/16 12:42:54.00 yFJZVYWt0.net
>>626
自分でプロセスを起動してるなら入出力をリダイレクトするだけ
psInfo.RedirectStandardOutput = true
psInfo.RedirectStandardInput = true;
起動後は
proc.StandardInput.WriteLine("hoge");
proc.StandardOutput.ReadToEnd();
proc.WaitForExit();

638:デフォルトの名無しさん
19/09/17 18:45:14.27 4wOD4j6P0.net
ポリモーフィズムに関しての質問なんですけど
よくある例えでdogクラスのオブジェクトもcatクラスのオブジェクトもまとめてanimalクラスの配列で扱えるみたいなのあるじゃないですか
でも例えばこの時catクラスでだけ定義されてるフィールドがあったとして、配列に格納した途端アクセスできなくなっちゃいませんか
privateとかpublicは置いといて、たとえば、bool isPrettyとか定義されてたとして、animals[0].isprettyは無理じゃないですか。親クラスから子クラスで独自に定義されてるもんは触れられないですよね
とりあえずまとめて親クラスで持っておいて使う時になったら子クラスの情報使いたいみたいなときなんかうまくやる方法ってないもんですかね。

639:デフォルトの名無しさん
19/09/17 18:49:22.91 6boldAmf0.net
C#的にはパターンマッチングで分岐すればそれは可能だが
親クラスが持っていない情報を子クラスが持っている時点でそのクラス設計は疑わしい
その例ならanimalクラスにvirtual bool IsPrettyを持たせるべき

640:デフォルトの名無しさん
19/09/17 18:50:41.39 fvAMDErgd.net
そもそも使うものをまとめておくのが親クラスというかインターフェースや抽象クラスの役目なので、持ってるかどうかもわからないisprettyを使いたいのが間違ってる。無理やりやるんならリフレクションで存在確認するしかないよ

641:デフォルトの名無しさん
19/09/17 18:51:12.83 6boldAmf0.net
親クラスが持っていない情報というのは言い過ぎだな
親クラスが持っていないpublicプロパティを子クラスが持っているのは怪しい設計

642:デフォルトの名無しさん
19/09/17 18:54:14.01 fvAMDErgd.net
例えばヒゲのプロパティは猫しか持ってないと思うけど、そういう場合は is か as で具象クラスの型を確認してキャストして取ることは出来るけど、それはなんか気持ち悪い気がする

643:デフォルトの名無しさん
19/09/17 19:11:59.16 6boldAmf0.net
全動物のうち猫しかヒゲを持ってないわけじゃあるまいし
Animal型にNullable型のヒゲプロパティを持たせてそれがnullかどうかで処理を分岐させればいいだけでは
Animalクラスがヒゲを持ってるのは唐突過ぎると思うならFaceプロパティでも挟めばいい

644:デフォルトの名無しさん
19/09/17 19:13:48.81 189yfApBd.net
>>628
親クラスを無駄なメンバーで膨らませるのはバッドパターン。
インターフェイスを使うべき。
IPrety InterFace を付けたなんらかの型のリストをループすればいい。
// IPrety InterFace で拡張した型ならなんでもループで回せる。
if myUnit.isPrety == true {
myUnit.doSomething();
}

645:デフォルトの名無しさん
19/09/17 20:02:19.06 5qQz1pKl0.net
>>628
ダウンキャストしなされ
as クラス名;でよろし

646:デフォルトの名無しさん
19/09/17 20:15:43.47 4wOD4j6P0.net
色々勉強になりました
こう共通のメソッドとフィールドがあるからくくりだして親にしようくらいの気持ちだったんですけどぐぐったらそういうのそもそもダメらしいですね
素直に各クラスで同じフィールド定義して継承関係全部なくそうと思います。

647:デフォルトの名無しさん
19/09/17 20:16:03.96 mLXav9Fo0.net
まあそれだったらanimalに純粋仮想メソッド作ってCatにだけ必要な処理書くほうがいいって考えはわかる

648:デフォルトの名無しさん
19/09/17 20:45:51.61 gcZDzsnLa.net
>>631
えー、そうなんか
それけっこう使ってるなぁ、、、

649:デフォルトの名無しさん
19/09/17 21:13:37.27 XDhMjXUv0.net
.NET Framework の Object クラスを全否定してるじゃんw

650:デフォルトの名無しさん
19/09/17 21:14:22.17 D+I+Wj20M.net
親クラスが持ってないプロパティを子クラスが持ってるって
.Netですらわんさかあるじゃないの

651:デフォルトの名無しさん
19/09/17 21:15:50.88 D+I+Wj20M.net
あ、かぶった
機能を追加するために継承して関数やプロパティを増やすのが
ごく普通の設計じゃね
子クラスの全プロパティを親が網羅してたら使いにくいわ

652:デフォルトの名無しさん
19/09/17 21:42:46.98 hXcOzvgxa.net
機能を追加するための継承は現代的なOOPではあまり積極的には行われないんだよ
現代的なOOPにおいては実装継承は本質的に悪であるとされ、明確なメリットがある場合を除いて基本的に避けるんだよ
端的に言えば、抽象クラスを定義して、明確に拡張ポイントとして用意されたメソッドのみをオーバーライドする、
という使い方が今時の唯一の実装継承の使い方であると理解しておけばマサカリを食らうことはない
機能を追加したいだけなら継承する必要は全くなくて、ただそれぞれのクラスを別個に使うか、包含すりゃいいだけだ

653:デフォルトの名無しさん
19/09/17 21:44:46.02 02KenGFka.net
それほんとにその親いる?って感じの実装だったらabstractにするんじゃなくて?

654:デフォルトの名無しさん
19/09/17 21:45:27.86 02KenGFka.net
あっ被った?

655:デフォルトの名無しさん
19/09/17 23:37:00.02 PSgriU0H0.net
>>641
.NETだとコントロールの大半がそうなっているなw
親の方のクラスでまとめて配列にして場合に応じてキャストして子のプロパティを取り出すとか実装したことはある

656:デフォルトの名無しさん
19/09/17 23:46:29.64 e7oun/vJ0.net
すみません、初歩的な質問なのですが、クラスやらメソッドやらメンバーやらにアクセシビリティを設定するのは、他の誰かが使用するライブラリーを作成することを想定しているからなのでしょうか?
できるならpublicだらけで作りたいのですがそれがどんな問題に繋がるのかわからずモヤモヤしてます。

657:デフォルトの名無しさん
19/09/17 23:59:21.95 rQ8N7dRz0.net
>>646
問題ない

658:デフォルトの名無しさん
19/09/18 00:04:42.53 PFlVcPVS0.net
>>645
ふーむダウンキャストも絶対やっちゃダメってわけでもないのか

659:デフォルトの名無しさん
19/09/18 00:12:27.01 o3BZQkX70.net
>>646
システムが巨大になったときにpublicばかりだと複雑過ぎて手に負えなくなる
巨大になる予定も無いし他人に開示する予定も無いなら好きに作れば良いよ

660:デフォルトの名無しさん
19/09/18 00:13:40.45 MOtnHukC0.net
>>647
>>649
ありがとうございます!

661:デフォルトの名無しさん
19/09/18 00:46:19.09 XJgNYgHy0.net
>>648
わざわざ言語仕様にダウンキャストがあるのはそれが有用だからで、使っていけないわけではないよ。下手な設計で濫用されるのが非難されるだけで、適切な使い方をする分には問題ない。
理由も説明せずに杓子定規に◯◯は使うななんて書いているサイトがあれば、おそらくその書き手もちゃんと分かってないと疑ってかかった方がいいくらい。

662:デフォルトの名無しさん
19/09/18 01:18:05.53 cuUyZOV2a.net
>>650
普通に考えて問題だから真に受けたらあかんw
外からアクセスする必要がないメンバーがpublicになってるクラスは
滅多に使わない機能のボタンがてんこ盛りのリモコンみたいなもの。
使いたい機能を探すのに不必要な苦労するでしょ
インテリセンスに使いもしないメソッドやプロパティが100とか
表示されるようなクラス使いやすいと思うか?

663:デフォルトの名無しさん
19/09/18 02:24:45.00 haPYpedoa.net
使いやすさなんて結局はドキュメントの質や命名規約などの高レイヤーの話であって、アクセス制御自体はそれほど重要ではない
メンバをpublicにするということは、そのメンバが利用できることをクラス外に対して約束するということに他ならない
そして、それを後で変更しようとすればクラス外へ波及する破壊的変更となる
将来的な変更の余地を残すために、客に対して不必要な情報公開を避けるという判断は、コーディングに限らずIT業界のビジネスのあらゆるシーンにおいて非常によく行われる

664:デフォルトの名無しさん
19/09/18 02:39:11.63 cuUyZOV2a.net
そういう議論は為にする議論ってやつだと思うよw
晒すメンバーの数だけ拘束されて自由が減るってのは論理的に


665:はその通りだけど、 現実問題いらないメンバーに故意にアクセスするコードを書くことなんかまずない。 だっていらないんだからw 本質的に重要なのは見えるメンバーの数を減らして複雑性を下げ、生産性を上げること。 時間が一番貴重なんだから



666:デフォルトの名無しさん
19/09/18 07:50:17.10 PFlVcPVS0.net
何から何までそれこそループ変数までパブリックフィールドにしていろいろなメソッドで使い回すクラスと対峙しているのでなかなか響く話題
辛い

667:デフォルトの名無しさん
19/09/18 07:58:41.43 5e31sw6sa.net
>>655
全部書き換えてしまへ

668:デフォルトの名無しさん
19/09/18 08:07:10.60 n4vg2Vie0.net
Windowsでbluetooth BLEの心拍計とケイデンスセンサーから
データを取得したいんだけど
どういうコードを書くと取得できるかな?
わかる人いるだろうか

669:デフォルトの名無しさん
19/09/18 08:24:07.29 o3BZQkX70.net
デバイスのAPI仕様書読め

670:デフォルトの名無しさん
19/09/18 14:09:46.88 uVuJujwEF.net
Process.Startにディレクトリを渡すとエクスプローラで開いてくれるけど、同じことをスマホなどMTP接続されたデバイスのフォルダでやりたいのですが
エクスプローラでスマホのフォルダを開いた時のウインドウタイトル(PC�デバイス名�~)を渡してもエラーになります。
ProcessでMTPのフォルダを開くことは出来るでしょうか?

671:デフォルトの名無しさん
19/09/18 14:50:14.61 9K+6bCRKa.net
>>659
MTPってことはPCからはストレージに見えてるってこどだよね?
普通にそのパスを渡すだけじゃないの?
ドライブレターが不変じゃないのが困るってこと?

672:デフォルトの名無しさん
19/09/18 15:08:01.73 n4vg2Vie0.net
スマホの場合、標準のエクスプローラに相当するものがないから
ひらけないんじゃね?

673:デフォルトの名無しさん
19/09/18 15:11:26.73 n4vg2Vie0.net
ああごめん、スマホをデバイスとしてPCに刺してる場合ね
ファイル名を指定して実行でアドレスを入れて開けないなら
ファイルパスが認識できていないのかもしれない
エクスプローラのexeにパスを引数で渡して起動するよりないんじゃね

674:デフォルトの名無しさん
19/09/18 17:08:55.83 8TRa6KIP0.net
エクスプローラーはMTPを通常のフォルダと変わらないように見せかけてるだけ
自分でアクセスするにはそれ用のAPIを使う必要がある

675:デフォルトの名無しさん
19/09/19 00:42:07.12 d/lXkOqta.net
質問です
VisualStudioとかUnityってメモリ4GBのノートパソコンでも動きます?
それともゲーミングノート買った方が良い?

676:デフォルトの名無しさん
19/09/19 00:43:51.43 bue4KA2uM.net
動かなくは無いかな
重いかどうかはやるのが早いんじゃない?
速度に不満で長く続けられそうなら
新しいのを買えばいいんじゃないの

677:デフォルトの名無しさん
19/09/19 01:05:46.17 d/lXkOqta.net
>>665
ありがとうございます

678:デフォルトの名無しさん
19/09/19 01:08:28.00 +/h2Zlffd.net
そふとうぇあなど実態のないデジタルデータを売ってお金をだまし取るのは詐欺なのでは?

679:デフォルトの名無しさん
19/09/19 03:08:03.44 VsuqkEyW0.net
何を売ろうが騙し取れば詐欺だろw

680:デフォルトの名無しさん
19/09/19 07:20:07.81 2k5+XP3O0.net
文字列を検索して文字数と行数を同時に取得する方法はないでしょうか?
VisualStudioのフォルダ検索みたいにヒットした行の行数と内容を表示して
ダブルクリックで該当ファイルを表示→選択箇所へジャンプとかやりたいです

681:デフォルトの名無しさん
19/09/19 09:52:48.59 AAQe7fcf0.net
文字列探索の要件が判らないとエスパー回答になるな
C#ならではの方法としては、オブジェクトのハッシュコードを照合するという
方法もあるね

682:デフォルトの名無しさん
19/09/19 10:34:03.67 2Fbpp9uL0.net
文字数はstring.Lengthで良いのでは?
行数はそのstringをforして1charづつ改行charなら++して数えていくとか

683:デフォルトの名無しさん
19/09/19 12:14:01.52 EhHD1H1Td.net
File.ReadAllLineで全部とるか、メモリ上なら改行コードでsplitして配列の添字を取ればいいじゃない

684:デフォルトの名無しさん
19/09/19 12:29:35.89 +/YZqQed0.net
>>672
その場合、テキストボックスでフォーカスを当てるための文字数って地道にカウントしてくしかないっすよね?

685:デフォルトの名無しさん
19/09/19 12:31:08.07 VB98Oc2p0.net
>>673
基本的にそう
テキストエディタとかはそんな感じで実装してる

686:デフォルトの名無しさん
19/09/19 13:00:06.50 cKzRnh020.net
>>674
なるほど
地道にやってんすね
やってみた感じ
文字数から行数出した方が楽だったのと
検索しながらは検索文字列に改行コード入ると面倒だったので
①検索文字列のヒットした文字数を出す
②文字数に対する行数を出す
の順でやりました
ありがとう御座いました

687:デフォルトの名無しさん
19/09/19 14:17:59.08 R2S0qhpOa.net
何言ってるのかよく分からんかったけど、
文字数 ⇒ 一致部分の最初の文字のインデックス
行数 ⇒ 一致部分の行の行番号
ってことかw
数え方の問題があるからだろうけど、Stringには一致箇所の数をカウントする
メソッドは存在しないんだね。

688:デフォルトの名無しさん
19/09/19 14:45:37.14 6IKimtYb0.net
検索一致箇所までの文字列を切り出して
改行でspritして要素数から行を得るというのはどうかな
折り返しは考慮されないけどね
あとtextboxなら折り返し込みで
文字インデックスから行に変換する
メソッドがあった気がする

689:デフォルトの名無しさん
19/09/19 14:58:17.90 R2S0qhpOa.net
検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。
RegexかString.IndexOfでベタにやった方が

690:デフォルトの名無しさん
19/09/19 15:15:08.89 VB98Oc2p0.net
文字数多いとsplitはパフォーマンス辛い可能性があるね
regexもそれなりに…
パーサー的なものなら頭から逐次処理するのが一番だったりするし

691:デフォルトの名無しさん
19/09/19 15:41:06.68 6IKimtYb0.net
ググったらreplaceを使ってlengthの差で求める方法があったけど
これも一時的にメモリ上で二重化されるから
巨大なログファイルとかだとあまりいい方法ではないな
IndexOfの検索結果を次の検索開始インデックスにしながら
カウントするのが一番楽で無駄がなさそうだ

692:659
19/09/19 21:16:22.29 sYHr9xpc0.net
自己解決
MTPデバイスへのショートカット(.lnk)をメモ帳で開くと見えるリンク先
(こんなの→"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_12d1&pid_1031&mi_00#7&22311cc4&0&0000#{6fa27828-a61a-4555-ba33-f28f495d4f31}")
をProcess->Start()にそのまま突っ込んだら、エクスプローラが起動してMTPデバイスを開いてくれました。
ちなみに、テキストの末尾に(~5d4f31}\内部ストレージ\Android")というようにディレクトリを追加すれば、そのフォルダを開いてくれます。

693:デフォルトの名無しさん
19/09/20 00:06:22.05 Z+Dr4fZe0.net
private class Parameter
{
public DateTime setTime { get; set; }
public string Name { get; set; }
public int Ag


694:e { get; set; } public string address { get; set; } public int sex { get; set; } } ↑のParameterのListデータで setTime,Name,Ageが重複している情報を取得と排除したいんですがループでチェックするのは時間がかかりすぎるので 簡単で早く処理できる方法はないでしょうか?



695:デフォルトの名無しさん
19/09/20 00:15:35.18 JBznBYO/0.net
Parameter.Equals() をオーバーライドして
用意した HashSet<Parameter> foreach で Add() を呼ぶ

696:デフォルトの名無しさん
19/09/20 00:15:52.99 MWgaILTA0.net
>>682
個々の要素参照するんだからループするしか無いんじゃないの
あらかじめどこか他にデータ持っているのならともかく
簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる

697:デフォルトの名無しさん
19/09/20 00:17:07.07 JBznBYO/0.net
なんか色々おかしかった
↓正
Equals() をオーバーライドして
用意した HashSet<Parameter> に対して foreach で Add() すればよい

698:デフォルトの名無しさん
19/09/20 00:20:11.39 H/0RNa6Fa.net
>>682
普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから
効率よくしたいならHashSetを使うといい
ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある

699:デフォルトの名無しさん
19/09/20 00:21:51.81 JBznBYO/0.net
>>686
HashSet の重複判定って GetHashCode() 絡んでるのかね?
名前的には関係ありそうだけど
仕様が見付からない…

700:デフォルトの名無しさん
19/09/20 00:32:56.51 Z+Dr4fZe0.net
まだ試してないけどHashSetってことはsetTime, Name, Ageだけのチェックにはならないのかな
setTime, Name, AgeがDBのキーになる予定なので無理そうな気が

701:デフォルトの名無しさん
19/09/20 00:33:33.46 73yDKPmS0.net
Reference Source で実装みればええやん
GetHashCode と ICompare 指定しなければ Default の Equals の両方やね

702:デフォルトの名無しさん
19/09/20 00:34:05.25 H/0RNa6Fa.net
>>687
Microsoft Docs見てきたが明言はされてないのか……ただ
URLリンク(docs.microsoft.com) ではDictionaryなどで使われるとあって
URLリンク(docs.microsoft.com) ではDictionaryのKeyアクセスと同様のハイパフォーマンス集合操作を提供、とあるから
HashSetで扱う型についてもGetHashCode()の実装は必要なはず

703:デフォルトの名無しさん
19/09/20 00:41:13.96 WJxc7oYHa.net
>>689
質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど

704:デフォルトの名無しさん
19/09/20 00:57:02.51 JBznBYO/0.net
キーの重複は
GetHashCode() の一致 → Equals()
みたいだな
GetHashCode() は重複しにくいメンバの GetHashCode() で
Equals() で完全一致の判定をすれば大丈夫そう

705:デフォルトの名無しさん
19/09/20 00:58:18.71 Z+Dr4fZe0.net
あるサイトを参考にしてみたのが
private class Parameter
{
public DateTime setTime { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string address { get; set; }
public int sex { get; set; }
}

private class ParameterDistinct : IEqualityComparer<Parameter>
{
public bool Equals(Parameter i_lhs, Parameter i_rhs)
{
if (i_lhs.setTime == i_rhs.setTime && i_lhs.Name == i_rhs.Name && i_lhs.Age == i_rhs.Age)
{
return true;
}
return false;
}
public int GetHashCode(Parameter i_obj)
{
return i_obj.setTime.GetHashCode() ^ i_obj.Name.GetHashCode() ^ i_obj.Age;
}
}

706:デフォルトの名無しさん
19/09/20 01:02:47.93 Z+Dr4fZe0.net
//データ追加
var ParameterList = new List<Parameter>();
//重複排除
ParameterDistinct qualityComparer = new ParameterDistinct();
IEnumerable<Parameter> ParameterLister = ParameterList.Distinct(qualityComparer);
でやってみたんだけど重複がでたんだけど何かまずいだろうか
参考にしたところはDatetimeは使っていなかったので駄目なのかな

707:デフォルトの名無しさん
19/09/20 01:09:28.14 73yDKPmS0.net
DateTime をつめるときに DateTime.Now とか使ってると ミリ秒で


708:差がでてるかもしれない。 DateTime を == で比較すると 内部的には DateTime.Tick 同士で比較するから



709:デフォルトの名無しさん
19/09/20 01:21:43.10 Z+Dr4fZe0.net
なるほどDateTime.Nowは使っているので調べてみます。
ありがとうございました!

710:デフォルトの名無しさん
19/09/20 01:31:14.65 v9n6qqFa0.net
なんで単なる取得でメモリ使うんだよ
unsafeかなんか付けて昔ながらの方法でやるのが一番速い

711:デフォルトの名無しさん
19/09/20 01:35:53.41 JBznBYO/0.net
ライブラリ作ってるわけでもないのにunsafeとか論外なんだが
その上unsafe付けてやることが2重ループでの完全一致検索とかじゃ
どうせHashSetのパフォーマンスに大敗する

712:デフォルトの名無しさん
19/09/20 02:27:15.79 pTVI5tHY0.net
NGID:JBznBYO/0

713:デフォルトの名無しさん
19/09/20 11:53:09.00 URFVhEsV0.net
git使わずに、自宅のデスクトップ環境とノートPCのプロジェクトファイル類を同期させたいです。
現在Onedrive使ってますが、binやobj配下まで同期されるのが残念な感じ。
binやobjの出力先はWPFプロジェクトなら変更できましたが、ASP.NET coreプロジェクトでどう変更するのか不明
VSTSで上記を実現または他の方法あったりしますか?
ちなみに現在はVS pro サブスクリプションに入ってます

714:デフォルトの名無しさん
19/09/20 12:00:15.35 Ew/p9Snjp.net
Microsoftの開発ソフト使ってんならOneDrive使えるだろ?

715:デフォルトの名無しさん
19/09/20 12:02:00.53 Ew/p9Snjp.net
最後にcleanすりゃいいだけだから。
もしくは同期ドライブ直接はコンパイルしないとかな。

716:デフォルトの名無しさん
19/09/20 12:02:42.34 bfuJBtmYd.net
svnを使う
onedrive以外の場所で開発してonedriveフォルダに必要なファイルを同期ツールとかでローカルコピーするようにする
なんでonedriveはokでgitがngなのかがわからんと提示しづらい

717:デフォルトの名無しさん
19/09/20 12:48:37.25 uLmjcKMSa.net
OneDriveって特定のフォルダだけ同期しない設定にできないのか
6,7年前にオンラインストレージが流行った時には
タダで大容量で高機能のがいっぱいあったのになんだか退化してるよねw

718:デフォルトの名無しさん
19/09/20 12:56:56.83 uH7l3KIr0.net
labelの文字列の一部を太文字にしたり色を変えたりといった表現をしたいのですが
何か良い方法はないでしょうか?
コントロールではなくメインプログラムのほうで操作できるようにしたいです
labelと同じ見た目ならなんでもよいです
textboxの様な感じではなくlabelのような感じが目標です

719:デフォルトの名無しさん
19/09/20 13:13:16.41 WW0nVoDA0.net
のような感じと言われてもどういうのがNGでどういうのがOKなのかよく分からんが
手軽なのはRichTextBoxを使うことで
そうでなければPaintイベントで全部自前描画ということになる

720:デフォルトの名無しさん
19/09/20 14:28:02.26 9RWO75b+d.net
>>700
ちと面倒だけど、ブランチとか使えるのが便利だから、サーバ立てるまでOneDriveのフォルダ上にgitのリポジトリ作ってた事がある。
OneDrive内の任意のフォルダの中でgit init --bareするだけ。
したら、そのフォルダをremoteとして登録出来る。
あとは任意のタイミングでpush/pullするだけ。
作業フォルダをOneDrive内に置いて自動的に同期もやったけど、objとかが共有される問題よりも、同時に開いて悲惨なことになる事があったので、今はしてない。
(競合したら「もとのファイル名-端末名」ってファイルが大量にできる)

721:デフォルトの名無しさん
19/09/20 15:01:20.41 riKFjdTV0.net
ああ、確かにリポジトリをonedriveに入れるのが一番スマートかも
昔dropboxにsvnリポジトリ作ってたことあるわ

722:デフォルトの名無しさん
19/09/20 17:01:09.25 9F0x+J+E0.net
メモリ消費は税のようなもの
しょとくだけに
消費だけに

723:デフォルトの名無しさん
19/09/20 19:34:13.48 dvP1e2Mn0.net
環境はWindows formアプリです。
TableLayoutPanel と DataGridView の使い分け方がわかりません。
datasource property の有無だけ?

724:デフォルトの名無しさん
19/09/20 19:53:22.57 +tHFIfxx0.net
>>705
自分で描画するのはメソッド作るのも指定するのもめんどくさいよ
URLリンク(dobon.net)
>>706の言う通りRichTextBoxをBorderStyle.Noneにして背景色を合わせた方が楽じゃないかな
どうしても文字以外を透過させたいとかならともかく
>>710
HTMLのテーブルとExcelの表が同じに見えるのならそうかもね

725:デフォルトの名無しさん
19/09/21 10:00:25.29 DmWWMvK20.net
コンソールアプリが作れればいいやと思ってpaizaでシコシコ勉強してますが他にどんなことすればいいですか?
目標は外部のファイルを読み込んでコンバートするアプリを作ることです。

726:デフォルトの名無しさん
19/09/21 10:08:45.30 ZhDsxJHf0.net
外部のファイルを読み込んでコンバートするアプリを作ればよいのでは?
そんなに難しくないよ
何をどうコンバートするかにはよるかもしれないけど

727:デフォルトの名無しさん
19/09/21 11:05:31.91 wLZyePcca.net
プログラミング未経験者です
すいません、ちょっと趣旨から外れるかもしれませんが質問です
電気(強電)、計測(コンビナートとかのプラント計装)の知識ってC#で活かせますか?
C#の求人や書籍を検索すると、電気回路の制御ソフトとか計測器制御とかがヒットするので気になって質問させていただきました

728:デフォルトの名無しさん
19/09/21 11:05:33.11 DmWWMvK20.net
SQLもどき文をパース?して出力したいです

729:デフォルトの名無しさん
19/09/21 11:42:35.85 uzyGV4kra.net
>>714
FAの制御系だったら測定器やPLCとの通信がメインになるからそれなりに知識あったほうがいいとは思うよ

730:デフォルトの名無しさん
19/09/21 12:00:01.02 wLZyePcca.net
>>716
ありがとうございますm(_ _)m

731:デフォルトの名無しさん
19/09/21 13:30:42.97 ox/L2PXG0.net
>>715
SQLの整形をしたいの?
SQLって方言が結構あるしパース(字句解析+構文解析)自体の難易度も初心者がやるものじゃ無いと思う

732:デフォルトの名無しさん
19/09/21 13:39:06.70 cHmpI1M9M.net
>>715
SQLのパーサーなんて出来合いのライブラリがいくらでもあるよ
自分でわざわざ使い物にならないゴミを作って時間をドブに捨てる必要はない

733:デフォルトの名無しさん
19/09/21 14:11:59.87 gZFDeRYs0.net
オライリーのlex & yacc がsqlのパースの
サンプルだったけど
C#は対応していないかと

734:デフォルトの名無しさん
19/09/21 14:57:58.99 8edEcM0R0.net
すまんが、スレッドを指定して実行ってできないもんなの?
指定できればロックが必要な箇所が減っていい気がするんだけど・・・・どうなんだろう

735:デフォルトの名無しさん
19/09/21 15:03:52.53 gZFDeRYs0.net
スレッド起動しないかWaitしておけば、
良いんじゃね

736:デフォルトの名無しさん
19/09/21 15:21:35.32 Ef6g+Zfma.net
>>721
Producer-Consumerパターンを使って特定スレッドでだけ処理するのはどう?
BlockingCollection<T>使うと楽に実装できるよ

737:デフォルトの名無しさん
19/09/21 15:59:40.26 3kDOCDXv0.net
Dllimortで呼び出す関数の引数にはジェネリックは使えないのでしょうか?

738:デフォルトの名無しさん
19/09/21 17:32:33.11 CRAyGleP0.net
使えない

739:デフォルトの名無しさん
19/09/21 17:41:38.79 dMKiDHPTa.net
>>724
どんな使い方を想定してるの?
っていうかそれ、呼び出されたアンマネージド関数側はどうしたら


740:いいの?www



741:デフォルトの名無しさん
19/09/21 17:50:18.96 GoVsp8loa.net
>>726
.NETのジェネリックは実行時に特殊化されるから、技術的にはそんなに無茶な話ではないよ

742:デフォルトの名無しさん
19/09/21 17:57:47.91 rw4WtgZd0.net
まあどのみち今のところできないから、いんぽ関数自体はIntPtrで受け取って
Marshal.PtrToStructureとかでごにょごにょするジェネリック関数でラップする感じでやるしかないね
SystemParametersInfoとかでそういう欲求があること自体はわかる

743:デフォルトの名無しさん
19/09/21 17:59:11.73 ox/L2PXG0.net
>>727
それじゃ質問者に回答してやってくれ

744:デフォルトの名無しさん
19/09/21 18:12:58.46 GoVsp8loa.net
>>729
質問者を馬鹿にするほどには突飛な発想ではないということだよ
.NETのジェネリックがどのように実装されているかを知っていれば、できてもいいと考えてもおかしくはない

745:デフォルトの名無しさん
19/09/21 18:32:15.65 dMKiDHPTa.net
十分突飛だと思いますけどね。
これ、アンマネージドに限らない。
マネージドだろうが、他のアセンブリで既に定義されてる
非ジェネリックなstaticメソッドをジェネリック化したいと言ってるのと同じ。
だから、呼ばれた側は何すりゃいいんだよw

746:デフォルトの名無しさん
19/09/21 18:43:55.34 GoVsp8loa.net
>>731
CのAPIだと、サイズが同一の異なる型を一緒に扱ったり、条件に応じてポインタの指す型の解釈を変えたりとか珍しくないでしょ

747:デフォルトの名無しさん
19/09/21 18:44:55.69 dMKiDHPTa.net
>>732
そういうのは共用体とかオーバーロードで解決できるでしょ。
ジェネリックを使うって発想は意味不明だよ

748:デフォルトの名無しさん
19/09/21 18:46:58.39 3kDOCDXv0.net
>>726
具体的にはLPVOID引数で自己責任ながら参照型からref、outやintなどの値渡しまで色々な型のオーバーロードを作って実際にちゃんと機能しています
なので一々オーバーロードとそのラップだけで30行ほど使ってしまってる現状が無駄に思えてどうにか方法ないかなと

749:デフォルトの名無しさん
19/09/21 19:46:47.84 rw4WtgZd0.net
一例としてはこんな感じ
APIの想定される構造体がBlittableのみならマーシャリング不要なので
unmanaged制約にしてアドレス渡しの方が効率は良い
public static T GetSystemParametersInfo<T>(SPI uiAction, uint uiParam, SPIF fWinIni) where T : struct {
  T value;
  var buffer = Marshal.AllocCoTaskMem(Marshal.SizeOf<T>());
  SystemParametersInfo(uiAction, uiParam, buffer, fWinIni);
  value = Marshal.PtrToStructure<T>(buffer);
  Marshal.FreeCoTaskMem(buffer);
  return value;
}
まあぶっちゃけお行儀的にはオーバーロードだらだら並べる方が正解ではあるんだけどねw

750:デフォルトの名無しさん
19/09/21 19:58:38.68 A1p2bytl0.net
c# で必殺技みたいなメソッドがあったのですが思い出せません。どなたかご存知ないでしょうか?

751:デフォルトの名無しさん
19/09/21 20:03:15.85 y68BphyG0.net
>>736
リフレクション?

752:デフォルトの名無しさん
19/09/21 22:34:09.60 rnFOOH9a0.net
>>736
privateメソッドを外部から無理矢理呼び出すやつ?

753:デフォルトの名無しさん
19/09/21 22:42:59.80 70YMyRx+a.net
リフレクションならDynamicInvoke()がなんともかっこいいメソッド名
>>736のはおそらくはデストラクタあたりを想定してるんじゃないかと思うけど

754:デフォルトの名無しさん
19/09/21 23:13:56.71 GoVsp8loa.net
DangerousAddRefもなかなか

755:デフォルトの名無しさん
19/09/22 01:11:49.71 YKAr5fZO0.net
>>736
オーバーライド!!

756:デフォルトの名無しさん
19/09/22 01:26:33.02 01VTDUEXM.net
オーバーロード!!

757:デフォルトの名無しさん
19/09/22 01:39:55.72 V8FjsYeid.net
>>736
ラムダ式!

758:デフォルトの名無しさん
19/09/22 07:51:48.39 Wx+hr3d10.net
>>718
>>719
さんきう
とある製品のRDBMSのSQLに独自の書き方やら関数やら記法やらが混じってるからなんとかしたかったんだけどライブラリとやらを使えばいけるのかな。

759:デフォルトの名無しさん
19/09/22 08:33:40.66 6LYYKR960.net
1) githubで"sql parser"と検索
2) C#で絞り込む
3) 上から順に試す
4) 好みのが見つかったら改造を試みる
少なくとも1から作るよりは圧倒的に楽だし勉強にもなるよ

760:デフォルトの名無しさん
19/09/22 09:28:54.26 p/RNYxc40.net
>>726
dllってことは既にasm化されてるんだから型なんて関係なく受け取ったもんを問答無用でバイナリとして処理するだけだろ
C#はそういうのをコーディング段階で防いでるだけであって

761:デフォルトの名無しさん
19/09/22 12:11:14.62 PittLpUUa.net
>>746
~だろ
馬鹿ほどぞんざいで偉そうな口調なのは法則なのかねwww

762:デフォルトの名無しさん
19/09/22 12:16:38.76 PittLpUUa.net
少なくともC#のジェネリックはstringとbyte[]を透過的に扱ったり、
longをint2つと透過的に扱ったりするための仕組みじゃありませんwww
だからそういうのは共用体やオーバーロードを使うんだってw

763:デフォルトの名無しさん
19/09/22 12:28:14.42 GskCdwYSM.net
端的に答えとけばいいんだよ
余計な講釈を垂れるな

764:デフォルトの名無しさん
19/09/22 22:36:43.63 584djEVu0.net
BitmapをBitmapDataにしたいのですが、使用されたパラメータが有効ではありませんと言われてしまいます。
ファイルから読み込んだbitmapは変換できるのですが、このようにコード上で作ったbitmapはダメです。
何がいけないのでしょうか?
Bitmap trimBmp = baseBmp.Clone(rect, baseBmp.PixelFormat);
BitmapData bitData = trimBmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

765:デフォルトの名無しさん
19/09/22 22:44:27.94 6/LwH+kT0.net
rectで切り出した後、その切り出した後のビットマップから
さらにrectで一部分のロックしようとしてるけど大丈夫? 全面じゃない?

766:デフォルトの名無しさん
19/09/22 22:53:39.23 584djEVu0.net
>>751
baseBMPからrectで切り抜いてますが、trimBMPにとってはrectは全面だと思うのですがダメなのですかね?
でも
Bitmap bmp = new Bitmap(100,100)
みたいな素画像でもやっぱりLockBitsできないです

767:デフォルトの名無しさん
19/09/22 23:53:45.92 yl5BH+I+0.net
>>752
>trimBMPにとってはrectは全面
ではなくbaseBmpのrectの範囲って自分で指定しているよね
BitmapData bitData = trimBmp.LockBits(new Rectangle(0, 0, trimBmp.Width, trimBmp.Height), ImageLockMode.ReadOnly, trimBmp.PixelFormat);
>Bitmap bmp = new Bitmap(100,100)
>みたいな素画像でもやっぱりLockBitsできないです
できる。そっちもちゃんと引数の指定してみて

768:デフォルトの名無しさん
19/09/23 01:34:07.15 CAyWI0VB0.net
private Point CalcPopupLoction(Form launcher, Form popupForm) {}
ボタン押したときに上部に表示する モーダルな popup フォーム の位置を計算するメソッドを書きました。
ボタンが左の方にあると、親フォームの左枠をはみ出さないように、popupForm は左揃えで表示。
真ん中へんにあると中央揃え、右端ならボタンとpopupForm を右揃えで表示する感じです。
1つ目の引数の良い名前が思い付きません。
主にボタンを想定してる引数です。
launcher (発射台)はどうもしっくりきません。
parent や baseForm はなんかおかしいのでやめました。

769:デフォルトの名無しさん
19/09/23 03:14:26.31 QdBzCxoka.net
>>754
そもそもそんなメソッドいらんでしょ。
ポップアップがどこに表示されるべきかはボタンを持つFormが知っているんだから
そいつに聞く(そいつのプロパティーとして実装)のが一番

770:デフォルトの名無しさん
19/09/23 03:28:32.57 QdBzCxoka.net
あー、右に揃える場合もあるのね。
じゃあボタン持ってるFormに
void ShowModalPopup(Form popup)
みたいなメソッドを持たせればいい

771:デフォルトの名無しさん
19/09/23 03:42:05.85 ltbH9/U50.net
こういう使い回しが効きそうなのはいちいちフォームに実装しないで拡張メソッドにでもした方が

772:デフォルトの名無しさん
19/09/23 03:56:41.99 QdBzCxoka.net
本当はボタン持ってる方のFormに
interface IDialogOwner:IWin32Window
{
  HorizontalAlignment DialigHAlignment { get; }
  Rectangle Rectangle { get; }
}
みたいなのをかぶせて、Popupする方のFormでShowDialogをオーバーロードして
void ShowDialog(IDialogOwner owner)
みたいにするのがいいのかも。
酔っぱらってるんでよく分からなくなってきたw

773:デフォルトの名無しさん
19/09/23 08:49:12.84 l2jPGLgc0.net
C#でawaitに対応していないメソッドをawaitで非同期実行できるようにする方法を教えてください.
以下のようにしてもActionが実行されませんでした.
private async static void SomeHandler()
{
Console.Write("Burn");
await new Task(new Action(() =>{
Console.Write("[Start]");
Thread.Sleep(2000);
Console.Write("[Completed]");
}));
Console.Write("End");
}

774:デフォルトの名無しさん
19/09/23 08:58:35.82 ZRlL2jPD0.net
URLリンク(docs.microsoft.com)

775:デフォルトの名無しさん
19/09/23 12:17:14.67 3qdqqJ07F.net
bitmapinfo とか
dibsection とか
bitmapinfoheader とか
勉強してみたら

776:デフォルトの名無しさん
19/09/23 14:47:11.75 vpc5pW+6d.net
>>759
TaskCompletionSourceだっけ?うろ覚えですまんが、jsのPromiseオブジェクト的に使える。

777:デフォルトの名無しさん
19/09/23 15:20:09.58 LbTjUCX60.net
taskをstartしてないだけだから...

778:デフォルトの名無しさん
19/09/23 15:46:49.67 s6/Kehza0.net
>>763
ありがとうございます!

779:デフォルトの名無しさん
19/09/23 18:09:27.70 7f5aVpAAd.net
どういたしまして!

780:デフォルトの名無しさん
19/09/23 19:11:24.16 24/7TZbh0.net
ID:QdBzCxoka
何の話してんのこの人
>>754
変数名が思いつかないとかはこのスレじゃなく
クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
スレリンク(tech板)

781:デフォルトの名無しさん
19/09/23 22:40:56.88 6ZQTgZjHa.net
>>766
交通整理バカw
設計が間違ってるのに名前付けて何の意味がある

782:デフォルトの名無しさん
19/09/23 22:48:38.96 CAyWI0VB0.net
>>766
レスありがとうございます。
そんなスレあるの知らなかった。

783:デフォルトの名無しさん
19/09/23 23:35:14.83 CAyWI0VB0.net
>>754
private Point CalcPopupLoction(Form launcher, Form popupForm) {}
上記は下部のボタンの位置に応じて、大きさのことなるpopupForm の表示位置を計算するメソッド
exportButton_Click 内で、
ShowDialog(); で表示する popupForm に戻り値を設定
URLリンク(i.imgur.com)

784:デフォルトの名無しさん
19/09/24 00:01:07.45 OEzHH54a0.net
>>754
・Loctionて何
・ボタンの置いてあるオーナーウィンドウと対象のボタンを引数に取った方がいいと思う
・計算だけなら全部Rectangleでいいんじゃないの
Rectangle CalcPopupLocation(Rectangle Owner, Rectangle TargetButton, Rectangle Popup)

785:デフォルトの名無しさん
19/09/24 00:03:53.21 ftn8dtDua.net
>>769
だからさ、そのメソッドをどこに書くおつもり?
ポップアップを左右どちらに寄せるべきかを知ってるのは特定のFormだけのはずなのに
その例のllauncherの型がFormってのは変じゃないか?
そもそも何で「左右どちらに寄せるべきかを知ってる」奴のメソッドとして実装しないの?
それなら引数で渡す必要ないと思うんだけど。

786:デフォルトの名無しさん
19/09/24 00:09:30.85 ftn8dtDua.net
>>770
必要な情報は
(1) 左右どちらに揃えるか?(HorizontalAlignment)
(2) 揃える位置のx座標
だけだね

787:デフォルトの名無しさん
19/09/24 11:39:03.69 vbZsX/Wo0.net
書き込みは、人を憎んでコードを憎まずのこころで行いましょう。
たとえクソコードであっても悪いのは書いた人だけです。
コードやプログラミング言語に罪は一切ありません。
コードの悪口はやめましょう。
クソコードの修正と言わず、リファクタリングといえばいいのです。
大量殺人犯や c# プログラマーの醜い心はリファクタリング不可能ですが、コードのリファクタリングはカンタンですよ。
URLリンク(www.google.co.jp)

788:デフォルトの名無しさん
19/09/24 12:11:17.28 yrtqWHxIM.net
性格の悪さもリファクタリングしてくれ

789:デフォルトの名無しさん
19/09/24 14:58:01.43 oiN+60axF.net
性格はコードに滲み出るよ

790:デフォルトの名無しさん
19/09/24 23:29:02.86 OoYPx0Tk0.net
性格は分からないけど姿勢みたいなものは見えると思ってる
こんなコピペばかりして少しはおかしいと思わないのかな?とかこんな古い書き方して言語の文法ざっとでもいいから一通り見たのかな?とか
いいコードを書こうとしてる人とそうでない人の差ってすごくよく分かる。本当に能力無くて頑張って頑張ってるのにひどいって場合もきっとあるんだろうけど

791:デフォルトの名無しさん
19/09/24 23:44:57.44 3clb0+hp0.net
ようわからんけど動いてるからヨシ!

792:デフォルトの名無しさん
19/09/25 07:36:43.68 apbfD+2I0.net
式木がイケてるらしいですが使いどころが解りません
プロの皆さんはどこで使ってますか?

793:デフォルトの名無しさん
19/09/25 10:16:37.93 HV92OfVjM.net
>>778
使わない
高度なフレームワークを作るための機能であり、ドカタグラマには全く必要ないから忘れていいよ

794:デフォルトの名無しさん
19/09/25 22:57:19.53 5YRgoX3y0.net
>人を憎んでコードを憎まず
逆じゃないんかおい

795:デフォルトの名無しさん
19/09/25 23:01:24.46 1MbrNFaz0.net
自分より給料貰ってる先輩(笑)が
クソコードを産み落としていた場合は人もコードも憎む
というか蔑む

796:デフォルトの名無しさん
19/09/25 23:16:09.44 5YRgoX3y0.net
何をもってくそコードと言ってるのか

797:デフォルトの名無しさん
19/09/25 23:38:23.64 1MbrNFaz0.net
何を以ってクソコードかは難しいところだが具体例なら無数に挙げられるぞ
switchを使わず延々とif-else if分岐
if(flag) return ture; return false;
一行違うだけのメソッド大量生成
マジックナンバーだらけ
コレクションはほとんどList
かと思えば特にライブラリに必要とされているわけでもないobject[]
もちろんパターンマッチングなんて概念は存在しない
out代わりにrefを使う
boolではなくintをフラグとして使う
クラス内のあらゆる場所から明示されず書き換えられるフィールド
どう見ても親子関係にない継承
メソッド1個300行以上
これがさぞ大変な処理かと思えばリファクタリングしたら40行で書けた
1行に300文字以上
リソースでもFormsでもない普通のクラスが4000行

798:デフォルトの名無しさん
19/09/25 23:54:44.99 NtFNmlTfp.net
>>778
ドカタだけどlinqのwhereメソッドの引数を動的に生成するときに使った
ここ参考になるよ
URLリンク(www.atmarkit.co.jp)

799:デフォルトの名無しさん
19/09/26 00:03:29.50 68XB546j0.net
>>783
ぜんぜん許容範囲だな!
その程度でくそ呼ばわりされたらたまらん

800:デフォルトの名無しさん
19/09/26 00:08:48.21 QoSQSwcY0.net
>>783
>>switchを使わず延々とif-else if分岐
>>マジックナンバーだらけ
>>クラス内のあらゆる場所から明示されず書き換えられるフィールド
>>メソッド1個300行以上
>>リソースでもFormsでもない普通のクラスが4000行
今直面してるのにまさに当てはまっててもう
>>コレクションはほとんどList
こっちはListどころか配列しか使わないんだぜ。もう書き方が完全にC

801:デフォルトの名無しさん
19/09/26 00:09:16.61 NU/jFtK40.net
メソッド以外はどれも影響は大きくないし
多少大きくてもテストできればなんとかなる
ちょっとした文化の違い程度の話だ

802:デフォルトの名無しさん
19/09/26 00:10:34.86 NU/jFtK40.net
初心者が一見してくそ呼ばわりするコードはたぶんくそじゃない
わかるから細かい粗が目に付く
普遍的恐怖を知るべきだ

ぐちゃぐちゃな循環参照
テストできないメソッド
う そ っ ぱ ち の 名 前

803:デフォルトの名無しさん
19/09/26 00:15:27.94 ThQ6mTfg0.net
突然現れるlinqの長々としたクエリ式
せてめメソッド式にしてくれ

804:デフォルトの名無しさん
19/09/26 00:18:57.61 NU/jFtK40.net
しかしC#いつのまにやらパターンマッチまで入ってたんか…

805:デフォルトの名無しさん
19/09/26 00:28:52.23 ZFJdpCv/0.net
sqlを全て文字列結合で作ってるうえに500行以上あったときは後輩に丸投げした

806:デフォルトの名無しさん
19/09/26 03:16:32.66 wZcpOMsUd.net
>>780
バグやコードを憎んで、人を憎まず。
こんなこと言ってるプログラマーは意識高い系の偽善者のクズ。

807:デフォルトの名無しさん
19/09/26 11:30:46.50 Av/VHz3vp.net
あいつに任せた俺の責任だからって最初から頭数に入れていないから憎みもしない。必要なら全面書き直しもいとわない。

808:デフォルトの名無しさん
19/09/26 20:59:42.99 7bLC7yvk0.net
なんでListがいかんのか?

809:デフォルトの名無しさん
19/09/26 21:12:02.17 aLxxu1ok0.net
ビットで判定とるのがいかんのか?

810:デフォルトの名無しさん
19/09/26 21:18:55.30 fUfQlO4W0.net
7f63-aXvPからクソグラマーの臭いがする

811:デフォルトの名無しさん
19/09/26 21:21:22.68 fUfQlO4W0.net
>>794
時と場合を考えて最適なコレクションを検討しろ
>>795
特別な理由がないなら褒められないな

812:デフォルトの名無しさん
19/09/26 21:37:16.13 aLxxu1ok0.net
ZDDをboolの配列で評価するの?orz

813:デフォルトの名無しさん
19/09/26 21:40:05.70 fUfQlO4W0.net
>>798
特別な理由がないならと言ってるだろうが

814:デフォルトの名無しさん
19/09/26 22:03:13.49 QoSQSwcY0.net
windows formsの書き方についてなんですけど
メイン画面にタブがいっぱいあってそれを切り替えて……みたいなアプリなんです
んで中身見たらFormクラスが1万行オーバーで。画面一つだからって何もかも突っ込んでる感じなんです
画面というかフォーム一つで1クラスみたいなのが通常の書き方なんでしょうか

815:デフォルトの名無しさん
19/09/26 22:10:14.52 Av/VHz3vp.net
普通はブロックに分ける。

816:デフォルトの名無しさん
19/09/26 22:13:41.16 fJKX2zi80.net
>>800
タブ毎にユーザーコントロールを作ればスッキリはすると思うよ

817:デフォルトの名無しさん
19/09/26 22:23:35.32 lGqB6oAG0.net
>>800
「通常」はどうか知らないけど例えば
MDIアプリケーションを作成する
URLリンク(dobon.net)
こういう作り方もある
あと一つのフォームに普通のコードはともかくコントロール(InitializeComponentのなか)を多く詰め込みすぎると起動に時間がかかるようになる
現状で問題ないのならそこは気にすることは無いが

818:デフォルトの名無しさん
19/09/26 22:53:44.29 d7SzDWCz0.net
>>800
parcial class でタブごとにファイルわける。

819:デフォルトの名無しさん
19/09/26 23:38:48.19 QoSQSwcY0.net
なるほど参考になりました。
今思えば既にタブごとに部分クラスわけしてファイル別になってたような気がしないでもない……となると実質一クラス10万行か。笑えない

820:デフォルトの名無しさん
19/09/27 06:43:42.33 N2euUEC0M.net
>>800
1000行超える時点でオブジェクト指向できてない証拠

821:デフォルトの名無しさん
19/09/27 08:33:35.75 1dreLMG90.net
フォーム以外で使わない処理を
わざわざ外部のファイルやクラスに作る必要なんてある?

822:デフォルトの名無しさん
19/09/27 08:42:46.73 eAUqf5T9a.net
>>807
それで可読性が高まるならやる意味はある

823:デフォルトの名無しさん
19/09/27 09:06:13.84 ikgA/i06d.net
C#は1ファイルに全部書けるので必要ないです

824:デフォルトの名無しさん
19/09/27 10:07:45.04 NnPkuVhE0.net
再利用しないならそれでいいんじゃね?

825:デフォルトの名無しさん
19/09/27 22:47:27.06 uik+OEWH0.net
お前を含めた全人類が未来永劫そのコードに手を加えない保証があるなら好きにすればいい

826:デフォルトの名無しさん
19/09/27 23:28:58.48 MmWjZkvh0.net
ググったらタブ大量にあるような場合>>802がクラス分割のためのメジャーな手法なのね

827:デフォルトの名無しさん
19/09/28 08:43:54.27 uN9Z5b+x0.net
游ゴシックの英数文字をMeasureStringで取得した矩形を使ってDrawStringすると高さ不足で表示されない
矩形を使わなきゃ表示はできるから良いけどもやもやする

828:デフォルトの名無しさん
19/09/28 10:37:47.08 elJniuwU0.net
フォント周りおかしいのはMS伝統では
ないだろうか?


829:デフォルトの名無しさん
19/09/28 14:09:54.66 51nJyp6ja.net
そんなざっくりした話じゃ、どうせお前自身のコードのバグだろって
反応しか返ってこないと思うw

830:デフォルトの名無しさん
19/09/29 01:52:26.51 sVRG+wNI0.net
インターフェイスと抽象クラスってどう使い分ければ良いのでしょう?
ググってもよくわかりません。

831:デフォルトの名無しさん
19/09/29 02:47:00.08 TNnn17Gh0.net
インターフェースなら継承関係のない複数のクラスのように
振る舞うことができる

832:デフォルトの名無しさん
19/09/29 02:49:22.44 HU0MDVmv0.net
大雑把言えば
プロパティとフィールド(値)を保持するのがクラス
クラスのメソッド(挙動)を公開するのがインターフェイス

833:デフォルトの名無しさん
19/09/29 02:54:07.57 TNnn17Gh0.net
それが抽象クラスとなにが違うのだ?と彼は聞いているわけで

834:デフォルトの名無しさん
19/09/29 03:01:23.20 HU0MDVmv0.net
インターフェイスは値を持たないし
原則として挙動の実装も持たせない

835:デフォルトの名無しさん
19/09/29 03:20:49.12 m1n6jIU5a.net
>>816
使い分けで悩む必要はないと思うよ。
インターフェイスで目的が達成できるならあえて抽象クラスを使う理由はないのだから。
たぶん使い分けが分からないのではなく、インターフェイスの使いどころが分からないだけじゃないのか。
よくわからなくてもとにかく実際コードを書いて使ってみることが重要。
別に難しい話じゃないので使ってるうちに自ずと分かる。たぶん

836:デフォルトの名無しさん
19/09/29 03:35:49.46 TNnn17Gh0.net
多重継承的なことがしたくなったらインターフェースを使う
くらいな感じでいいのかもね

837:デフォルトの名無しさん
19/09/29 07:08:46.93 5VaVy3IA0.net
私もよくわからないんですが、インターフェースって実装内容は問わないけどこの名称のメソッドは用意しなさいよってコトですかね?
インターフェースでメソッドを定義しても、継承したクラスがそのメソッド名に合ってない実装をしてしまったらと考えるとインターフェースのメリットがイマイチピンときません

838:デフォルトの名無しさん
19/09/29 07:26:53.36 ehZkSMIn0.net
疎結合

839:デフォルトの名無しさん
19/09/29 08:56:25.44 qdFsd7WD0.net
>>823
継承したクラスで変にオーバーライドされたら…
なんて気にしたら何も書けなくなるよw
それはオーバーライドした奴の責任だから気にしてもしょうがない


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