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

■ このスレッドは過去ログ倉庫に格納されています
2020/12/16(水) 11:29:35.35ID:TSvQ057dM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part148
https://mevius.5ch.net/test/read.cgi/tech/1590578921/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/01/28(木) 14:49:10.30ID:5GS4w4/Ua
System.Linq.Dynamic
363デフォルトの名無しさん (オッペケ Sr7b-bv8J)
垢版 |
2021/01/28(木) 15:13:49.91ID:VSUe7hwUr
同一PC上でのアプリ同士の連動のさせかたを教えてください

フォームアプリケーションA.Bを作り、
Aが単独でも動くメインアプリ、Bは拡張機能付きリモコン、という風にしたいんですが、
Aのサブフォームではなく、別のexeファイルからBを起動したいです
そのうえで、同時起動中にBを操作することでAのtextboxを変更したり、Aを動かすためのメソッドをBのソースに書いてボタンイベントで呼び出し、等できると最高なんですが、
これはそもそも可能なことなのか、検索ワードすらわからず詰まってます
可能であればできるだけシンプルな方法を教えてください、
現在、C#、windowsformでAの途中まで制作中です
2021/01/28(木) 15:14:46.55ID:r2+Y9V1O0
つ UIAutomation
2021/01/28(木) 15:26:15.90ID:7g2F6RGP0
>>363
IPCっていうやつ使えばいいよ
WCFという似たようなやつは有るけど、そっちはMSが見捨てた
2021/01/28(木) 16:28:24.36ID:VSUe7hwUr
ありがとう、検索して試してみます!
2021/01/28(木) 16:33:51.84ID:lJ0XEYQza
>>361
こんなのとか。
ただの思い付きなので動作するか確認してないし欲しいものと違ったらごめんね。

class DynamicComparer<T>:IComparer<T>
{
  public string PropertyToCompare { get; set; }

  public DynamicComparer(string propertyToCompare)
  {
    this.PropertyToCompare = propertyToCompare;
  }

  int IComparer<T>.Compare(T x, T y)
  {
    var t = typeof(T);
    var p = t.GetProperty(PropertyToCompare, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
    var xp = p.GetValue(x);
    var yp = p.GetValue(y);
    return System.Collections.Comparer.Default.Compare(xp, yp);
  }
}
2021/01/28(木) 21:47:36.42ID:SNcV832D0
何回も上がっているけどSystem.Linq.Dynamicを使いなよ
2021/01/29(金) 00:11:56.19ID:SOOUWe4N0
System.Linq.Dynamic使うとどんな風に書けるの
2021/01/29(金) 00:14:38.17ID:hhAzUQXda
var list = customers
.Where("Name.Contains(@0)","ZZZ Projects")
.ToList();
2021/01/29(金) 13:25:03.45ID:Hs1mJoLC0
>>363
SendMessage PostMessageは
2021/01/29(金) 16:32:59.15ID:5pIDnM+SF
pipe
socket
2021/01/29(金) 19:24:38.38ID:IAlTEreC0
COM公開して操作とかできんか?
2021/01/30(土) 10:31:51.17ID:U3K72huj0
gRPC使ってプロセス間通信でよくね?
2021/01/30(土) 10:32:40.83ID:pteiWSPF0
もう何もかもなくなってしまったのか
2021/01/31(日) 09:44:26.84ID:RldRqHno0
入門書には、クラスの設定系のメンバーは、公開する必要が無ければprivateにせよ、
みたいなことがよく書かれています。

ですが、例えば自作クラス ClassA, ClassBがあるとして、
ClassA
{
 public int IntVal { get; private set; }
 public ClassB BVal { get; private set; }
}

IntValはいいとして、BValに関しては、getプロパティでBValへの参照を取得できてしまいます。
その参照を通してBValにある設定メソッドを呼べば、BValの内容を外部から変更し放題です。

これを防ぐ方法として
1. ClassBを不変にする(ClassB内には、コンストラクタ以外に設定方法を用意しない)
2. ClassBのクローンを返す
3. ClassB内の取得系メソッドのみを集めたインターフェースを返す
4. ClassBを値型(構造体)にする
一応、以上のようなことを思いつくのですが、ここで質問です。

この問題(メンバがクラス型の場合に、セッターを単にprivateにしてもカプセル化できない)について、
皆さんはどう対処してますか?

単に「カプセル化したければこんなテクニックもあるよ」というのを紹介してほしいのではありません。
皆さんが(使い捨てでない)プログラムを書く際に、実際に、どういう考え方で、どう対処しているのか、
あるいは特に対処していないのか、を知りたいです。

よろしくお願いします。
2021/01/31(日) 09:50:34.81ID:RldRqHno0
ちなみに、お前自身はどう対処するんだ?と聞かれるかもしれませんが、
C#の経験が乏しいこともあって、どうすればいいのか正直よくわからないです。
(だからみんなのやり方を参考にしたい)

C++なら、公開したい相手だけをfriendにするとか、constなポインタを返すとかするのですが。
2021/01/31(日) 09:55:53.85ID:wMusnPrAM
ClassBについても設定系のメンバがprivateになってれば何も問題ない
むしろprivateでないsetterがClassBにあるなら必要があって公開してるはず
2021/01/31(日) 10:14:39.41ID:8OVECKvh0
そもそもpublicじゃん
2021/01/31(日) 10:29:08.15ID:RldRqHno0
例えばint型は自由に値を設定できます(その必要があります)が、
ClassAにとっては、int型の内部データであるIntValを、ClassAの外から
変更されたくない(値の参照はしたい)ため、setのみをprivateにしています。

同様のことをClassBでもやりたいと考えているのですが・・・。
そもそもそういう考え方自体がおかしいのかな?
2021/01/31(日) 10:43:24.54ID:Xb450EhAa
とりあえずイミュータブルにしとけばいいよ
どうしてもイミュータブルではいけない理由が出来たときにどうするか悩めばいい
2021/01/31(日) 10:57:10.85ID:8OVECKvh0
>>380
まず前提だけど
publicやprivateで改修時の設計を制限しようと思ってるの?
正直、こんなもんお飾りだし
いざ自分がやりたい機能の邪魔になったら問答無用でpublicにする
俺だったら

まあちょっとしたメモアピールぐらいに思っておけばいいんじゃない?

会社として公開するライブラリやdllのクラスだったらそもそもクラスを丸ごと渡すような仕組みにしちゃ駄目だろ
やるにしてもアクセス用のクラス挟んでって長ったらしい設計になることは致し方ない
2021/01/31(日) 10:59:20.78ID:RldRqHno0
イミュータブルというのは、>>376の方法1のことですよね?

たしかに、.Netに標準で用意されているクラスの多くは、インスタンスを一度作成したら、
内容を変更できないようになっている気がします

内容の一部を変更したいとき(例えばFontのサイズだけを変更したいとか)は面倒ですが・・・
2021/01/31(日) 11:07:26.15ID:RldRqHno0
>>382
たしかに、あくまでメモ程度に考えて、気にしなければいいのかもしれません

以前、C++で、引数をポインタで渡す際、引数の中身を関数内で変更されたくないので
引数をconstポインタ型にしてたのに、関数の中でconstをキャストで外すように関数内を
書き換えられてしまっていたことがあります

気にしたらきりがないですね
2021/01/31(日) 11:14:00.48ID:Xb450EhAa
>>383
1のことでいいよ

イミュータブルの内容を少し変えたオブジェクトがほしいけどコード書くのめんどくさい問題は昔からあった
昔は言語サポートがなかったのでコード生成で対処していた
新しいC#ではwith構文が追加されたのでこの問題は解決済み
2021/01/31(日) 11:25:38.47ID:RldRqHno0
ありがとうございます
With構文というのは知りませんでした
2021/01/31(日) 12:05:56.26ID:+uTrKl1S0
with式の前にその前提となってるレコード型を調べるといい
2021/01/31(日) 13:37:12.02ID:RldRqHno0
レコード型とwithについてざっとですがWebで調べてみました。
これらの機能を実際に使うかどうかはともかくとして、イミュータブルにすべきという
指針が得られたのはとても参考になりました。
ありがとうございました。
2021/01/31(日) 14:24:54.16ID:pXICYBtJ0
俺はコードの仕組みまでいじってやるほどの問題ではないと思う
ちょっとした仕様の変更でprivateをpublicにしなければならないときクソ邪魔過ぎて作ったやつ呪うレベル
2021/01/31(日) 15:52:52.73ID:QuI6Fit80
C#で作ったアプリケーションをVS2019でビルドしました。

実行ファイルが作成されたbin>releaseのフォルダに、実行ファイルがあると正常に実行できるのですが、
他のフォルダにコピーすると実行できない(ダブルクリックしても反応しない)
状態です。

なぜなんでしょう?
2021/01/31(日) 15:55:01.39ID:AZLe64Sd0
releaseフォルダをまるっとコピーしたんか?
exeだけ移動させても、dllが不足してたら動かんぞ
2021/01/31(日) 16:02:29.10ID:RldRqHno0
>>389
既存のコードを書き直すことは、実際にはたぶんやらないと思います(手間のわりに得られる効果は少なそうなので)。

ただ、自分がプログラミングしてると、>>376に書いたような状況にしばしば出くわすので、
他の人はどうしてるのかな?と思い、今後の参考に質問させてもらいました。

・そういう状況になるような設計がそもそも悪いのか?
・他の人はそういう状況にならないように設計してるのか?
・不便を感じているのか?いないのか?
・不便を感じているなら、どう対処してるのか?
等を知りたかったのです。
2021/01/31(日) 16:24:40.13ID:Xb450EhAa
>>389
privateをpublicにするのは構わないがイミュータブルなクラスをミュタブルにするのは絶対に駄目
2021/01/31(日) 16:36:30.32ID:TH60xXxXM
>>392
そういう状況になるような設計がそもそも悪い、に一票
他のクラスAの内臓を引き摺り出さないといけないような処理があるなら、それはA自身に持たせるべき
Tell, Don't Ask でググるといい
2021/01/31(日) 17:15:07.79ID:QuI6Fit80
>>391
ありがとうございます
以前にtobii社のアイトラッカーを使っていてこのSDKをインストールしていたので、
知らないdllがたくさん生成されていました・・・
2021/01/31(日) 17:16:51.45ID:QuI6Fit80
ちょっとやっかいなことになったなぁ・・・
現在tobiiのアイトラッカーは使っていないので、
tobii抜きでビルドしたいのですが、どこで設定しているのかわからないので取り除けません
sdkのアンインストールツールなんてものもなさそうだし・・・
2021/01/31(日) 17:19:17.00ID:QuI6Fit80
開発したオブジェクトをtobiiを使っていない旧バージョンのプログラムにコピーしたらうまく行かないかと思ったんですが、
プロジェクト間でオブジェクトのコピーができない・・・
2021/01/31(日) 17:57:24.91ID:QuI6Fit80
プロジェクトをまたいでフォームをコピーしようとすると

「この操作のソースファイルがこのソリューションに見つかりません。」

と表示されるのですが、何が悪いのでしょうか?
2021/01/31(日) 18:13:15.24ID:Xb450EhAa
>>392
根本的な設計は問題ないよ
例えば注文と注文明細のようにオブジェクトが別のオブジェクトを含むという構造はよくあることだ
それ自体にはなんの問題もない

では何が問題かというとそれは注文明細をミュータブルにしてしまったこと
注文明細をミュータブルにしてしまうと
注文と注文明細の間にあったはずの不変条件を簡単に壊すことができてしまう
2021/01/31(日) 18:57:41.42ID:QuI6Fit80
C#というかVSではソリューションをまたいでフォームをコピーするとかは不可能なんでしょうか?
またいでコピーすると

「この操作のソースファイルがこのソリューションに見つかりません。」

と表示されコピーできないのですが、これが出来ないとフォームを別アプリとかで再利用できないですよね
コピーできないはずがないだろうと思って調べているのですがやり方が分からい・・・
2021/01/31(日) 19:36:48.60ID:N+Pm82Ll0
エクスプローラーでファイルをコピーするという発想は無いの?
2021/01/31(日) 20:20:00.00ID:QuI6Fit80
>>401
ありがとうございます
知りませんでした・・・

ファイルコピーしたらプロジェク内に表示されましたが、
SDK導入前のプロジェクトにSDK導入後開発したフォームを移植してもうまく動かないですね
SDKを一度導入すると取り除くのは不可能なのか・・・
全く使わないDLLファイルが大量にあるってなんか気持ち悪いですが、我慢するしかないのかな・・・
2021/01/31(日) 21:08:22.28ID:RldRqHno0
>>394
>>399

色々とアドバイスいただき、ありがとうございます。

Tell, Don't Askについても調べてみました。
より良いコーディングができるよう精進します!
2021/01/31(日) 21:42:41.93ID:1LV1XQdcr
>>400
共通のソリューションにあり納めてからだと
プロジェクトエクスプローラで
コピー、移動出来ない?
2021/01/31(日) 21:49:02.35ID:d4v/P7z60
List<int>の中で最大の数値の個数をLINQで数えたいのですが
どう書いたらいいのでしょうか?
2021/01/31(日) 22:20:10.23ID:AZLe64Sd0
>>405

var hoge = new List<int> { 1, 2, 3, 4, 5, 4, 5, 4, 5 };
var maxCount = hoge.Where( x => x == hoge.Max() ).Count();
2021/01/31(日) 22:20:29.15ID:nDa51Aej0
Max()で最大値取った後Count(x => x == max)すればいいんじゃない普通に
2021/01/31(日) 22:23:53.17ID:AZLe64Sd0
たしかに、Whereの中にhoge.Max()を書いちゃうと毎回評価されて効率わるいのかな。
すまん
2021/01/31(日) 22:24:43.04ID:6uii1UZd0
>>405
GroupByでキーを値、バリューを個数にしたグループを作ってキーで並び替えて最後の行を取得するってのが1回の実行で完結する時の一般的なやり方
2021/01/31(日) 22:24:51.03ID:tsmk7oeqa
計算量と可読性考えた素直に自分で書いた方がよい気がするよw
2021/01/31(日) 22:36:08.49ID:d4v/P7z60
みなさまありがとうございました
GroupBy調べてみます。
2021/01/31(日) 22:36:31.74ID:jjH+MY7o0
いえいえ
2021/01/31(日) 22:47:04.53ID:tsmk7oeqa
LINQというかその乱用者が嫌われる理由の一端を見た気がするw
2021/01/31(日) 23:08:40.21ID:r9k2b4HI0
>>413
あんたがついてけて無いだけ。
2021/01/31(日) 23:14:50.67ID:8OVECKvh0
ループでMax出しながらカウントも行けると思うんやけど
速度的にもわかりやすさ的にも
絶対こっちのが上やんか?
それに対する反省はないん?
けったいな方法使って性能も悪いなんてなんや最高にダッサイなぁ?
2021/01/31(日) 23:36:34.74ID:tsmk7oeqa
>>414
これ言ってる本人は語るに落ちてるって気付いてないんだろうねw

KISSの原則とか青臭いこと言いたくないけど、
ダメな人は自分が自己確証を目的にしてる自覚がないからダメなんだな

前にも書いたけどこの業界にはイキってる連中が群がってる技術は
絶対に衰退する法則があるけどそれも上記が理由の一つだねw
2021/02/01(月) 00:28:41.11ID:YBzqaDjv0
>>407
これすら理解できんの?
2021/02/01(月) 00:49:03.93ID:BmIrX0ai0
>>405
dotnet add package System.Interactive

using System;
using System.Collections.Generic;
using System.Linq;

var q = new List<int>() { ... };
var ans = q.MaxBy(x => x).Count();
System.Console.WriteLine(ans);
2021/02/01(月) 01:19:51.10ID:LuxfmHdua
>>417
そっちは可読性は問題ないので
2回スキャンすることになる非効率が問題ないなら
普通にありだと思うよ。
2021/02/01(月) 01:48:39.77ID:YBzqaDjv0
>>419
これはSQLでも一般的じゃん。
一回とか概念的に無理じゃない?
2021/02/01(月) 07:56:42.00ID:SHJOz7VI0
>>420

>>415に書いてあるよ
2021/02/01(月) 08:16:36.29ID:iKAM042Ld
ループでMax出しながらカウントはListに限って言えばまあ許容範囲内だけど、
IEnumerableに対する処理としては微妙じゃない?
全件かならず読み込む必要があるのと、裏がDBならクエリになって集計だけ行われるのではパフォーマンス差出ると思うが。
そのへん、バックエンドがどう、だからコードはこう、って考えるよりも、Linqで処理して弾力をもたせるってのは有りだと思うけど。
けったいな方法だとは思わん
2021/02/01(月) 08:39:43.77ID:70GW+0Z90
linq使わなきゃワンループ余裕でしょ?

max値更新するときカウンタリセットして同値見つかったらインクリメントすればいいっしょ?
2021/02/01(月) 08:49:27.91ID:f9q1oLiO0
foreachなら普通にループ一回で済むわな
2021/02/01(月) 08:59:56.25ID:YMWDOp3Pa
>>422
DBうんぬんはIQueryableなので関係ない
IEnumerableになってる時点で最も効率がいいのは1回スキャン
ソースが小さいListなら効率は気にしなくていい
ファイル読み込みとかだと無視できないので汎用化したいなら1回スキャンで済むようにするのがLinqのマナー
2021/02/01(月) 10:06:42.50ID:5LLgSMFp0
a.Aggregate((int.MinValue,0), (cur,next) => cur.Item1 < next ? (next, 1) : (cur.Item1 == next ? (next, cur.Item2 + 1) : cur));

これじゃダメなの?
2021/02/01(月) 10:24:56.67ID:laVzODdgM
>>426
さすがにこれはひどい
2021/02/01(月) 10:26:19.00ID:iKAM042Ld
>>425
あ、そうか。納得。
2021/02/01(月) 14:37:18.05ID:PZUYg2ag0
>>426
いいね。
何やってるかすぐ分かる
2021/02/01(月) 15:26:59.74ID:DEyQGLil0
MoreLinqにもMaxBy()あるよ
>>418と一緒でループ1回ですむ
標準だけでやりたければ自分でExtension定義すればいい
431デフォルトの名無しさん (ワッチョイ 6610-IZeX)
垢版 |
2021/02/02(火) 20:45:05.39ID:uZjppo1+0
すみません 教えてください
using Windows.System.Diagnostics;

SystemCpuUsageReport.UserTime
SystemCpuUsageReport.KernelTime
SystemCpuUsageReport.IdleTime
は それぞれ
ユーザーがCPUを使用していた時間(The amount of CPU user time consumed by the system.)
カーネルがCPUを使用していた時間(The amount of CPU kernel time consumed by the system.)
CPUがアイドルであった時間(The amount of time the CPU was idle.)
となっているのですが、 それぞれ、なにを表しているのでしょうか?
タイマー関数で、1秒ごとに、idoletime+Kernaltime+Usertime の差分をを求めても、
14秒から15秒になってしまうので、単純にな数字ではないと思うのですが、どのような理論で
この数字が出ているのかが皆目わかりません

よろしくお願いいたします。
2021/02/02(火) 21:08:40.40ID:kveRc3Dr0
CPUスレッド数
433デフォルトの名無しさん (ワッチョイ 3933-merL)
垢版 |
2021/02/03(水) 00:26:51.19ID:v8/308I10
publicなプロパティにはxmlコメントを付けると思いますが、
バッキングフィールドってどこに記入してますか?
クラスの先頭付近に書いても、
自動実装プロパティはコード上ではバッキングフィールドは無いし、
納まりが悪いです。

private string _name; //←これどこに書きますか?

/// <summary>名前</summary>
public string Name {
get => _name;
set => _name = value.ToUpper();
}

/// <summary>年齢</summary>
public int Age { get; set; }
2021/02/03(水) 01:43:39.37ID:1I0faZoba
>>433
質問の趣旨は要するにただ「バッキングフィールドをどこに書くべきか?」それだけ?

自分はスニペットのテンプレのままなのでプロパティー本体の直前に書くけど
そんなの別にどこでもお好みでいいと思うよ。
うるさいがこう書けと言うならおとなしくそれにしたがっておけばいいと思う。
2021/02/03(水) 02:41:30.85ID:7CsH6q/40
https://qiita.com/toshi0607/items/801a0d37fb48313cbdbd

C#6.0
自動プロパティ初期化子を与えて、初期値指定ができるようになりました。
public string Name { get; set; } = "Nyanchu"

以下と同意です。

private string _name = "Nyanchu";

public string Name
{
get { return _name; }
set { _name = value; }
}

これでいいんじゃね?
2021/02/03(水) 08:22:20.89ID:0ICj5PSn0
何がこれでいいの?質問を理解してる?
2021/02/03(水) 08:24:12.18ID:qNul9lFK0
久しぶりに触ってんだけど
vs2019でフォームにクラスファイルを追加するときは
右側のプロジェクトウィンドウみたいなところで右クリックして追加ないとダメなんだっけ?
メニューバーのだとただのクラスファイルを作るだけ?
2021/02/03(水) 08:42:49.88ID:7CsH6q/40
>>436
_nameを消したいのかとESP
2021/02/03(水) 08:55:41.75ID:9jfq2zZC0
>>438
そんなこと言ってないよ
ちゃんと質問読もうね
2021/02/03(水) 08:59:26.01ID:7CsH6q/40
そもそも書かなくて良くなるじゃん
set{value=略;}にすれば


なるっけ?
2021/02/03(水) 09:03:06.99ID:9jfq2zZC0
書きたくないんじゃなくて書く必要がある場合にどこに書くのか?だろ
勝手に質問変えないで
自動実装プロパティでは不都合があるため自前でバッキングフィールドを用意する、は大前提
2021/02/03(水) 09:05:26.44ID:7CsH6q/40
>>441
書く必要があるときってあるん?
2021/02/03(水) 09:10:29.51ID:drzEfAtQ0
>>437
「フォームにクラスファイルを追加する」が意味わからん プロジェクトにファイルを追加する?
「メニューバーの」が具体的にどれを指してるのか分からん
「ただのクラスファイルを作るだけ」がやりたいこととどう異なっているのか分からん
2021/02/03(水) 11:07:31.11ID:7CsH6q/40
>>440
自己レス

ホントだ
違う話なんだな
変数なしで初期化ができるのって
自動プロパティって処理の中身がないやつだけ?なのか
2021/02/03(水) 14:11:05.34ID:QuhKbcfMM
>>359
調べてみましたが、サンプルコードを見ても良く分かりませんでした。
あとで勉強してみます。

>>367
これでも出来そうでした。アドバイスありがとう。


結果報告ですが、ExpressionTreeを使って動的にラムダ式を生成することで解決しました。
完成したコードは以下の通り。

void DynamicOrderBy(string propName){
//引数の文字列に対応するプロパティを返すラムダ式の生成
Func<Person, string> keyFunc = GetDynamicPropertyExpression(propName).Compile();

//動的に生成したラムダ式を使ってOrderBy
var sortedPeople = people.OrderBy(keyFunc)
}

static Expression<Func<KoyouPerson, string>> GetDynamicPropertyExpression(string columnName){
var type = typeof(KoyouPerson);
var property = type.GetProperty(columnName);
var parameter = Expression.Parameter(type, "p");

//p.{columnName}
var propertyAccess = Expression.MakeMemberAccess(parameter, property);

//p => p.{columnName} というラムダ式を格納した式ツリーを返す
return Expression.Lambda<Func<KoyouPerson, string>>(propertyAccess, parameter);
}
2021/02/03(水) 15:14:33.67ID:qlx5EMsl0
>>441
code maid使うと、プライベートフィールドは纏められるからそのまま放置するな
大体メンテすることもないから特に困ることもない
2021/02/03(水) 15:24:45.11ID:q3Uucr840
>>445
OrderByのサンプル見れば分かるやろ
https://dotnetfiddle.net/GdxsMG

Customers.OrderBy(c => c.City)を
Customers.OrderBy("City”)にできる
2021/02/03(水) 16:56:36.24ID:ADWHn1WBd
>>432
ありがとうございます
4こあ8スレッドなのでその2倍いっているのが
やや気になります
今度 同時に計って見て検証してみます
2021/02/03(水) 17:10:24.98ID:PTI/2U/t0
Form上のテキストボックスにファイルのパスを記入してもらって、

このパスにあるファイルをpythonで起動したいのですが

var pass = this.passSetting.Text;
System.Diagnostics.Process.Start("python.exe", @pass);

では何も起動しません。
多分
@pass
ではパスを示せてないんだと思うんですが、どうすればテキストボックスから取得したパスをProcess,Startの引数にできるんでしょう?
2021/02/03(水) 17:33:43.76ID:PTI/2U/t0
System.Diagnostics.Process.Start("python.exe", @"""L:\AAAAAA\USN_analyzer\time_series_analysis26.py""");

だとpythonのファイルを実行できるんですが、

var pass = "L:\AAAAAA\USN_analyzer\time_series_analysis26.py"
System.Diagnostics.Process.Start("python.exe", @pass);

みたいに変数で実行ファイルのパスを渡すことってできないのでしょうか?
2021/02/03(水) 17:42:11.05ID:q3Uucr840
>>450
その2つだとpython.exeに渡す引数がquoteされてるかどうかの違い出るからうまく行くほうに合わせたら?

var pass = @"""L:¥AAAAAA¥USN_analyzer¥time_series_analysis26.py""";
System.Diagnostics.Process.Start("python.exe", pass);

ちなみにpassじゃなくてpath
2021/02/03(水) 18:29:48.39ID:dgpbKw5W0
>>450
頭の@は文字列リテラルに付けた時と変数に付けた時は意味が違う
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/tokens/verbatim
2021/02/03(水) 23:04:55.84ID:PTI/2U/t0
>>451
ありがとうございます。
解決しました!

これでようやっとC#とPythonのアプリケーションを統合することができました。
2021/02/04(木) 03:54:16.03ID:8ASdjdRY0
エクセルの表みたいな
一行に複数の列(項目が並んでる 二次元の配列って
ArrayListじゃだめなんだっけ?

独自のプロプロパティをもったクラスつくってそれを列に放り込むんだったっけ?
2021/02/04(木) 07:35:49.07ID:mMDqMLln0
フィールドがプロパティで
レコードが件数になりまつ
って言うと通じるの?

List<myclass> dtcls = new List<myclass>();

的な
myclassのメンバがプロパティで
456デフォルトの名無しさん (ラクッペペ MM3e-mj3q)
垢版 |
2021/02/04(木) 08:09:30.76ID:+vIUF0nDM
通じない
フィールド、プロパティ、メンバ
それぞれに言語上の意味がある
2021/02/04(木) 09:33:50.26ID:5uFosyLe0
書き込めない
2021/02/04(木) 09:37:28.17ID:5uFosyLe0
WebRequestでウェブページを取得しているのですが、POSTに必要なFormDataがうまく取得できません
普通なら対象ページのHTMLを見れば取得できるのですが、対象ページの”実行”ボタンを押した時にjavascriptでPOSTに必要な情報を
生成しているようで、この値を取得できないのです。
何か方法がありましたら教えてください
2021/02/04(木) 09:38:55.99ID:5uFosyLe0
HTMLはこんな感じです
<input type="submit" value="実行" onclick="sid()">
2021/02/04(木) 11:07:52.39ID:NUvwu5Ez0
自分でJavaScript解析できないならSeleniumで
461デフォルトの名無しさん (ワッチョイ a59b-qCTK)
垢版 |
2021/02/04(木) 11:24:29.52ID:ZzRKCYY/0
selenium
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況