1 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:36:23.74 ID:i1fbuZ/pM.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part95 https://mevius.5ch.net/test/read.cgi/tech/1508168482/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part143 https://mevius.5ch.net/test/read.cgi/tech/1558002486/ ■情報源 https://docs.microsoft.com/ja-jp
610 名前:デフォルトの名無しさん mailto:sage [2019/09/13(金) 22:27:35.64 ID:zz4VRjti0.net] >>599 いやthisは欲しいです、Class内からtextboxコントロールのメソッド触りたいので form1渡してます
611 名前:デフォルトの名無しさん [2019/09/13(金) 23:44:37.81 ID: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 名前:デフォルトの名無しさん [2019/09/13(金) 23:44:54.82 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/14(土) 02:16:18.45 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/14(土) 09:11:10.12 ID:weYOKlpc0.net] >>603 れすさんくすです なるほど宣言と初期化をわけるのですね、うまく動きました
615 名前:デフォルトの名無しさん mailto:sage [2019/09/14(土) 11:56:47.95 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/14(土) 12:17:37.64 ID:iAxlaW7xa.net] デリゲートは参照型 action += method は文字通り action = action + method であり、結合後の新しいインスタンスが action に代入される デリゲート同士の + は String と同様に言語仕様によって特別扱いされており、Delegate.Combine メソッドの呼び出しに変換される ちなみにイベントに対する += は x.ev = x.ev + method ではなくプロパティと同様にxに対する特殊なメソッド呼び出しになる 作法的な話をすると、デリゲートのマルチキャストは歴史的経緯による遺物であり、イベントハンドラ以外には基本的に使わない方がいいよ
617 名前:デフォルトの名無しさん mailto:sage [2019/09/14(土) 12:37:52.80 ID:vC+cN/7F0.net] なるほど、action += methodは、action = new Action(action + method)的な形ということだったんですね ありがとうございます
618 名前:デフォルトの名無しさん mailto:sage [2019/09/14(土) 14:06:14.47 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/14(土) 16:27:56.54 ID:y7dkXYFS0.net] >>608 そういう人はWPF使う方がええよ mvvmにこだわらなければそんな差ないし
620 名前:デフォルトの名無しさん [2019/09/15(日) 11:17:21.32 ID:ZbgEJrYza.net] 今でも業務系のASPって、MVCよりWeb formsのほうが多い?
621 名前:デフォルトの名無しさん mailto:sage [2019/09/15(日) 11:21:19.74 ID:0P7zcb1/0.net] >>610 多いと言うか更改されずに腫れ物システムとして生き残ってるのが多いよ
622 名前:デフォルトの名無しさん mailto:sage [2019/09/15(日) 11:23:22.76 ID:qUTb/lfg0.net] >>610 ASPとASP.NETは違うよ
623 名前:デフォルトの名無しさん [2019/09/15(日) 14:39:22.86 ID:CYqvBFjrF.net] ASP: Application Service Provider
624 名前:デフォルトの名無しさん mailto:sage [2019/09/15(日) 17:44:41.18 ID:DjqXGTBC0.net] >>612 aho
625 名前:デフォルトの名無しさん [2019/09/15(日) 17:46:02.32 ID:tc+PQ4bB0.net] アスペルガー
626 名前:デフォルトの名無しさん mailto:sage [2019/09/15(日) 18:48:25.55 ID:qUTb/lfg0.net] >>614 お前がな
627 名前:デフォルトの名無しさん mailto:sage [2019/09/15(日) 19:36:43.99 ID:50f2l1H40.net] application hosting options
628 名前:デフォルトの名無しさん mailto:sage [2019/09/15(日) 20:38:22.87 ID:IMDj4f3rd.net] >>612 アプリケーションサービスプロバイダ(英語: Application Service Provider、ASP)とは、 アプリケーションソフト等のサービス(機能)をネットワーク経由で提供するプロバイダ(= provide 提供する 事業者・人・仕組み 等全般)のこと[1]。 広義にはこうした仕組みのソフトウェア提供形態やビジネスモデルまでも指す[1]。 https://ja.m.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80
629 名前:デフォルトの名無しさん [2019/09/15(日) 22:04:55.99 ID:ZbgEJrYza.net] >>610 です >>612 ごめんなさい。自分が端折ってしまったのがいけませんでした。ASP.NETです >>611 やはりそんな感じなんですかね。意外とASP.NET関連の求人が多いので保守メインなのか開発メインなのか気になったもので
630 名前:デフォルトの名無しさん mailto:sage [2019/09/15(日) 22:31:35.04 ID:007yvQzV0.net] ACTIVE SELF PROTECTION の求人だったりして https://activeselfprotection.com/
631 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 01:27:46.19 ID:2BSu07WM0.net] Bitmapを返すdllがあります(C#で作成) それをWinFormsで参照し、Bitmapを受け取りたいのですが、空の?Bitmapが返ってきます。 デバッガでdll側がきちんとBitmapをreturnしているところまでは確認できました。 ほかにどごを見直せばいいでしょうか
632 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 01:45:47.54 ID:2BSu07WM0.net] >>621 dll側をよく確認したところ、記述ミスがありました。 スレ汚ししてしまってすみません。
633 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 10:01:49.86 ID:z/LnXMaR0.net] Process.Start() で既に起動済みの外部コンソールアプリにコマンドを渡して結果を受け取りたいんですけど どうすればいいですか?
634 名前:デフォルトの名無しさん [2019/09/16(月) 10:55:23.20 ID:1SVMjj7z0.net] >>623 起動時に繋いどかないと後からは無理 cammy.co.jp/technical/2017/05/16/c-%e6%a8%99%e6%ba%96%e5%87%ba%e5%8a%9b%e3%82%92%e8%87%aa%e5%88%86%e3%81%ae%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ab%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e3%81%99/
635 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 11:17:36.58 ID:TvwShLRF0.net] >>623 processをどう作ったか書かないと
636 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 12:31:59.14 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/16(月) 12:42:54.00 ID:yFJZVYWt0.net] >>626 自分でプロセスを起動してるなら入出力をリダイレクトするだけ psInfo.RedirectStandardOutput = true psInfo.RedirectStandardInput = true; 起動後は proc.StandardInput.WriteLine("hoge"); proc.StandardOutput.ReadToEnd(); proc.WaitForExit();
638 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 18:45:14.27 ID:4wOD4j6P0.net] ポリモーフィズムに関しての質問なんですけど よくある例えでdogクラスのオブジェクトもcatクラスのオブジェクトもまとめてanimalクラスの配列で扱えるみたいなのあるじゃないですか でも例えばこの時catクラスでだけ定義されてるフィールドがあったとして、配列に格納した途端アクセスできなくなっちゃいませんか privateとかpublicは置いといて、たとえば、bool isPrettyとか定義されてたとして、animals[0].isprettyは無理じゃないですか。親クラスから子クラスで独自に定義されてるもんは触れられないですよね とりあえずまとめて親クラスで持っておいて使う時になったら子クラスの情報使いたいみたいなときなんかうまくやる方法ってないもんですかね。
639 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 18:49:22.91 ID:6boldAmf0.net] C#的にはパターンマッチングで分岐すればそれは可能だが 親クラスが持っていない情報を子クラスが持っている時点でそのクラス設計は疑わしい その例ならanimalクラスにvirtual bool IsPrettyを持たせるべき
640 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 18:50:41.39 ID:fvAMDErgd.net] そもそも使うものをまとめておくのが親クラスというかインターフェースや抽象クラスの役目なので、持ってるかどうかもわからないisprettyを使いたいのが間違ってる。無理やりやるんならリフレクションで存在確認するしかないよ
641 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 18:51:12.83 ID:6boldAmf0.net] 親クラスが持っていない情報というのは言い過ぎだな 親クラスが持っていないpublicプロパティを子クラスが持っているのは怪しい設計
642 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 18:54:14.01 ID:fvAMDErgd.net] 例えばヒゲのプロパティは猫しか持ってないと思うけど、そういう場合は is か as で具象クラスの型を確認してキャストして取ることは出来るけど、それはなんか気持ち悪い気がする
643 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 19:11:59.16 ID:6boldAmf0.net] 全動物のうち猫しかヒゲを持ってないわけじゃあるまいし Animal型にNullable型のヒゲプロパティを持たせてそれがnullかどうかで処理を分岐させればいいだけでは Animalクラスがヒゲを持ってるのは唐突過ぎると思うならFaceプロパティでも挟めばいい
644 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 19:13:48.81 ID:189yfApBd.net] >>628 親クラスを無駄なメンバーで膨らませるのはバッドパターン。 インターフェイスを使うべき。 IPrety InterFace を付けたなんらかの型のリストをループすればいい。 // IPrety InterFace で拡張した型ならなんでもループで回せる。 if myUnit.isPrety == true { myUnit.doSomething(); }
645 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 20:02:19.06 ID:5qQz1pKl0.net] >>628 ダウンキャストしなされ as クラス名;でよろし
646 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 20:15:43.47 ID:4wOD4j6P0.net] 色々勉強になりました こう共通のメソッドとフィールドがあるからくくりだして親にしようくらいの気持ちだったんですけどぐぐったらそういうのそもそもダメらしいですね 素直に各クラスで同じフィールド定義して継承関係全部なくそうと思います。
647 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 20:16:03.96 ID:mLXav9Fo0.net] まあそれだったらanimalに純粋仮想メソッド作ってCatにだけ必要な処理書くほうがいいって考えはわかる
648 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 20:45:51.61 ID:gcZDzsnLa.net] >>631 えー、そうなんか それけっこう使ってるなぁ、、、
649 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 21:13:37.27 ID:XDhMjXUv0.net] .NET Framework の Object クラスを全否定してるじゃんw
650 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 21:14:22.17 ID:D+I+Wj20M.net] 親クラスが持ってないプロパティを子クラスが持ってるって .Netですらわんさかあるじゃないの
651 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 21:15:50.88 ID:D+I+Wj20M.net] あ、かぶった 機能を追加するために継承して関数やプロパティを増やすのが ごく普通の設計じゃね 子クラスの全プロパティを親が網羅してたら使いにくいわ
652 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 21:42:46.98 ID:hXcOzvgxa.net] 機能を追加するための継承は現代的なOOPではあまり積極的には行われないんだよ 現代的なOOPにおいては実装継承は本質的に悪であるとされ、明確なメリットがある場合を除いて基本的に避けるんだよ 端的に言えば、抽象クラスを定義して、明確に拡張ポイントとして用意されたメソッドのみをオーバーライドする、 という使い方が今時の唯一の実装継承の使い方であると理解しておけばマサカリを食らうことはない 機能を追加したいだけなら継承する必要は全くなくて、ただそれぞれのクラスを別個に使うか、包含すりゃいいだけだ
653 名前:デフォルトの名無しさん [2019/09/17(火) 21:44:46.02 ID:02KenGFka.net] それほんとにその親いる?って感じの実装だったらabstractにするんじゃなくて?
654 名前:デフォルトの名無しさん [2019/09/17(火) 21:45:27.86 ID:02KenGFka.net] あっ被った?
655 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 23:37:00.02 ID:PSgriU0H0.net] >>641 .NETだとコントロールの大半がそうなっているなw 親の方のクラスでまとめて配列にして場合に応じてキャストして子のプロパティを取り出すとか実装したことはある
656 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 23:46:29.64 ID:e7oun/vJ0.net] すみません、初歩的な質問なのですが、クラスやらメソッドやらメンバーやらにアクセシビリティを設定するのは、他の誰かが使用するライブラリーを作成することを想定しているからなのでしょうか? できるならpublicだらけで作りたいのですがそれがどんな問題に繋がるのかわからずモヤモヤしてます。
657 名前:デフォルトの名無しさん mailto:sage [2019/09/17(火) 23:59:21.95 ID:rQ8N7dRz0.net] >>646 問題ない
658 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 00:04:42.53 ID:PFlVcPVS0.net] >>645 ふーむダウンキャストも絶対やっちゃダメってわけでもないのか
659 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 00:12:27.01 ID:o3BZQkX70.net] >>646 システムが巨大になったときにpublicばかりだと複雑過ぎて手に負えなくなる 巨大になる予定も無いし他人に開示する予定も無いなら好きに作れば良いよ
660 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 00:13:40.45 ID:MOtnHukC0.net] >>647 >>649 ありがとうございます!
661 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 00:46:19.09 ID:XJgNYgHy0.net] >>648 わざわざ言語仕様にダウンキャストがあるのはそれが有用だからで、使っていけないわけではないよ。下手な設計で濫用されるのが非難されるだけで、適切な使い方をする分には問題ない。 理由も説明せずに杓子定規に◯◯は使うななんて書いているサイトがあれば、おそらくその書き手もちゃんと分かってないと疑ってかかった方がいいくらい。
662 名前:デフォルトの名無しさん [2019/09/18(水) 01:18:05.53 ID:cuUyZOV2a.net] >>650 普通に考えて問題だから真に受けたらあかんw 外からアクセスする必要がないメンバーがpublicになってるクラスは 滅多に使わない機能のボタンがてんこ盛りのリモコンみたいなもの。 使いたい機能を探すのに不必要な苦労するでしょ インテリセンスに使いもしないメソッドやプロパティが100とか 表示されるようなクラス使いやすいと思うか?
663 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 02:24:45.00 ID:haPYpedoa.net] 使いやすさなんて結局はドキュメントの質や命名規約などの高レイヤーの話であって、アクセス制御自体はそれほど重要ではない メンバをpublicにするということは、そのメンバが利用できることをクラス外に対して約束するということに他ならない そして、それを後で変更しようとすればクラス外へ波及する破壊的変更となる 将来的な変更の余地を残すために、客に対して不必要な情報公開を避けるという判断は、コーディングに限らずIT業界のビジネスのあらゆるシーンにおいて非常によく行われる
664 名前:デフォルトの名無しさん [2019/09/18(水) 02:39:11.63 ID:cuUyZOV2a.net] そういう議論は為にする議論ってやつだと思うよw 晒すメンバーの数だけ拘束されて自由が減るってのは論理的に
665 名前:はその通りだけど、 現実問題いらないメンバーに故意にアクセスするコードを書くことなんかまずない。 だっていらないんだからw 本質的に重要なのは見えるメンバーの数を減らして複雑性を下げ、生産性を上げること。 時間が一番貴重なんだから [] [ここ壊れてます]
666 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 07:50:17.10 ID:PFlVcPVS0.net] 何から何までそれこそループ変数までパブリックフィールドにしていろいろなメソッドで使い回すクラスと対峙しているのでなかなか響く話題 辛い
667 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 07:58:41.43 ID:5e31sw6sa.net] >>655 全部書き換えてしまへ
668 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 08:07:10.60 ID:n4vg2Vie0.net] Windowsでbluetooth BLEの心拍計とケイデンスセンサーから データを取得したいんだけど どういうコードを書くと取得できるかな? わかる人いるだろうか
669 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 08:24:07.29 ID:o3BZQkX70.net] デバイスのAPI仕様書読め
670 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 14:09:46.88 ID:uVuJujwEF.net] Process.Startにディレクトリを渡すとエクスプローラで開いてくれるけど、同じことをスマホなどMTP接続されたデバイスのフォルダでやりたいのですが エクスプローラでスマホのフォルダを開いた時のウインドウタイトル(PCデバイス名〜)を渡してもエラーになります。 ProcessでMTPのフォルダを開くことは出来るでしょうか?
671 名前:デフォルトの名無しさん [2019/09/18(水) 14:50:14.61 ID:9K+6bCRKa.net] >>659 MTPってことはPCからはストレージに見えてるってこどだよね? 普通にそのパスを渡すだけじゃないの? ドライブレターが不変じゃないのが困るってこと?
672 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 15:08:01.73 ID:n4vg2Vie0.net] スマホの場合、標準のエクスプローラに相当するものがないから ひらけないんじゃね?
673 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 15:11:26.73 ID:n4vg2Vie0.net] ああごめん、スマホをデバイスとしてPCに刺してる場合ね ファイル名を指定して実行でアドレスを入れて開けないなら ファイルパスが認識できていないのかもしれない エクスプローラのexeにパスを引数で渡して起動するよりないんじゃね
674 名前:デフォルトの名無しさん mailto:sage [2019/09/18(水) 17:08:55.83 ID:8TRa6KIP0.net] エクスプローラーはMTPを通常のフォルダと変わらないように見せかけてるだけ 自分でアクセスするにはそれ用のAPIを使う必要がある
675 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 00:42:07.12 ID:d/lXkOqta.net] 質問です VisualStudioとかUnityってメモリ4GBのノートパソコンでも動きます? それともゲーミングノート買った方が良い?
676 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 00:43:51.43 ID:bue4KA2uM.net] 動かなくは無いかな 重いかどうかはやるのが早いんじゃない? 速度に不満で長く続けられそうなら 新しいのを買えばいいんじゃないの
677 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 01:05:46.17 ID:d/lXkOqta.net] >>665 ありがとうございます
678 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 01:08:28.00 ID:+/h2Zlffd.net] そふとうぇあなど実態のないデジタルデータを売ってお金をだまし取るのは詐欺なのでは?
679 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 03:08:03.44 ID:VsuqkEyW0.net] 何を売ろうが騙し取れば詐欺だろw
680 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 07:20:07.81 ID:2k5+XP3O0.net] 文字列を検索して文字数と行数を同時に取得する方法はないでしょうか? VisualStudioのフォルダ検索みたいにヒットした行の行数と内容を表示して ダブルクリックで該当ファイルを表示→選択箇所へジャンプとかやりたいです
681 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 09:52:48.59 ID:AAQe7fcf0.net] 文字列探索の要件が判らないとエスパー回答になるな C#ならではの方法としては、オブジェクトのハッシュコードを照合するという 方法もあるね
682 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 10:34:03.67 ID:2Fbpp9uL0.net] 文字数はstring.Lengthで良いのでは? 行数はそのstringをforして1charづつ改行charなら++して数えていくとか
683 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 12:14:01.52 ID:EhHD1H1Td.net] File.ReadAllLineで全部とるか、メモリ上なら改行コードでsplitして配列の添字を取ればいいじゃない
684 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 12:29:35.89 ID:+/YZqQed0.net] >>672 その場合、テキストボックスでフォーカスを当てるための文字数って地道にカウントしてくしかないっすよね?
685 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 12:31:08.07 ID:VB98Oc2p0.net] >>673 基本的にそう テキストエディタとかはそんな感じで実装してる
686 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 13:00:06.50 ID:cKzRnh020.net] >>674 なるほど 地道にやってんすね やってみた感じ 文字数から行数出した方が楽だったのと 検索しながらは検索文字列に改行コード入ると面倒だったので @検索文字列のヒットした文字数を出す A文字数に対する行数を出す の順でやりました ありがとう御座いました
687 名前:デフォルトの名無しさん [2019/09/19(木) 14:17:59.08 ID:R2S0qhpOa.net] 何言ってるのかよく分からんかったけど、 文字数 ⇒ 一致部分の最初の文字のインデックス 行数 ⇒ 一致部分の行の行番号 ってことかw 数え方の問題があるからだろうけど、Stringには一致箇所の数をカウントする メソッドは存在しないんだね。
688 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 14:45:37.14 ID:6IKimtYb0.net] 検索一致箇所までの文字列を切り出して 改行でspritして要素数から行を得るというのはどうかな 折り返しは考慮されないけどね あとtextboxなら折り返し込みで 文字インデックスから行に変換する メソッドがあった気がする
689 名前:デフォルトの名無しさん [2019/09/19(木) 14:58:17.90 ID:R2S0qhpOa.net] 検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。 RegexかString.IndexOfでベタにやった方が
690 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 15:15:08.89 ID:VB98Oc2p0.net] 文字数多いとsplitはパフォーマンス辛い可能性があるね regexもそれなりに… パーサー的なものなら頭から逐次処理するのが一番だったりするし
691 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 15:41:06.68 ID:6IKimtYb0.net] ググったらreplaceを使ってlengthの差で求める方法があったけど これも一時的にメモリ上で二重化されるから 巨大なログファイルとかだとあまりいい方法ではないな IndexOfの検索結果を次の検索開始インデックスにしながら カウントするのが一番楽で無駄がなさそうだ
692 名前:659 mailto:sage [2019/09/19(木) 21:16:22.29 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:06:22.05 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:15:35.18 ID:JBznBYO/0.net] Parameter.Equals() をオーバーライドして 用意した HashSet<Parameter> foreach で Add() を呼ぶ
696 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:15:52.99 ID:MWgaILTA0.net] >>682 個々の要素参照するんだからループするしか無いんじゃないの あらかじめどこか他にデータ持っているのならともかく 簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる
697 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:17:07.07 ID:JBznBYO/0.net] なんか色々おかしかった ↓正 Equals() をオーバーライドして 用意した HashSet<Parameter> に対して foreach で Add() すればよい
698 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:20:11.39 ID:H/0RNa6Fa.net] >>682 普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから 効率よくしたいならHashSetを使うといい ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある
699 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:21:51.81 ID:JBznBYO/0.net] >>686 HashSet の重複判定って GetHashCode() 絡んでるのかね? 名前的には関係ありそうだけど 仕様が見付からない…
700 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:32:56.51 ID:Z+Dr4fZe0.net] まだ試してないけどHashSetってことはsetTime, Name, Ageだけのチェックにはならないのかな setTime, Name, AgeがDBのキーになる予定なので無理そうな気が
701 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:33:33.46 ID:73yDKPmS0.net] Reference Source で実装みればええやん GetHashCode と ICompare 指定しなければ Default の Equals の両方やね
702 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:34:05.25 ID:H/0RNa6Fa.net] >>687 Microsoft Docs見てきたが明言はされてないのか……ただ https://docs.microsoft.com/en-us/dotnet/api/system.object.gethashcode ではDictionaryなどで使われるとあって https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.hashset-1 ではDictionaryのKeyアクセスと同様のハイパフォーマンス集合操作を提供、とあるから HashSetで扱う型についてもGetHashCode()の実装は必要なはず
703 名前:デフォルトの名無しさん [2019/09/20(金) 00:41:13.96 ID:WJxc7oYHa.net] >>689 質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど
704 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:57:02.51 ID:JBznBYO/0.net] キーの重複は GetHashCode() の一致 → Equals() みたいだな GetHashCode() は重複しにくいメンバの GetHashCode() で Equals() で完全一致の判定をすれば大丈夫そう
705 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:58:18.71 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:02:47.93 ID:Z+Dr4fZe0.net] //データ追加 var ParameterList = new List<Parameter>(); //重複排除 ParameterDistinct qualityComparer = new ParameterDistinct(); IEnumerable<Parameter> ParameterLister = ParameterList.Distinct(qualityComparer); でやってみたんだけど重複がでたんだけど何かまずいだろうか 参考にしたところはDatetimeは使っていなかったので駄目なのかな
707 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:09:28.14 ID:73yDKPmS0.net] DateTime をつめるときに DateTime.Now とか使ってると ミリ秒で
708 名前:差がでてるかもしれない。 DateTime を == で比較すると 内部的には DateTime.Tick 同士で比較するから [] [ここ壊れてます]
709 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:21:43.10 ID:Z+Dr4fZe0.net] なるほどDateTime.Nowは使っているので調べてみます。 ありがとうございました!
710 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:31:14.65 ID:v9n6qqFa0.net] なんで単なる取得でメモリ使うんだよ unsafeかなんか付けて昔ながらの方法でやるのが一番速い