X



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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001ななC ◆jPpg5.obl6
垢版 |
2020/05/27(水) 10:14:39.92ID:wHIUQvvs
■前スレ
ふらっと C#,C♯,C#(初心者用) Part147
http://mevius.5ch.net/test/read.cgi/tech/1582100741/
■関連スレ
C#, C♯, C#相談室 Part94
http://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/index
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
0900デフォルトの名無しさん
垢版 |
2020/09/16(水) 14:07:28.69ID:vxKpYawZ
初めて.NETCoreで作ったんだけどビルドすると単純なコンソールアプリなのにexeのファイルサイズが170KBくらいあるのはどういうこと?
0901デフォルトの名無しさん
垢版 |
2020/09/16(水) 14:38:31.56ID:6Cheug9B
>>900
ランタイムにあたる部分を内包しているから
無駄が多いとか思ってもMSがそう作っているんだからどうしようもない
0902デフォルトの名無しさん
垢版 |
2020/09/16(水) 14:49:33.33ID:AOSIq8NT
最近覗いてみたソースがこんな風に都度新しく生成して返すようになってたんだけどさ

return new float3(l.x + r.x, l.y + r.y,...)

こういうのって直接フィールド書き換えるよりパフォーマンス良かったりするの?
0903デフォルトの名無しさん
垢版 |
2020/09/16(水) 15:14:47.83ID:t9nFTYZt
生成したオブジェクトをどう使うか分からないから回答できません。

次の方どうぞ
0905デフォルトの名無しさん
垢版 |
2020/09/16(水) 15:44:35.74ID:wZC9/K7G
C#なら普通
0906デフォルトの名無しさん
垢版 |
2020/09/17(木) 05:54:26.40ID:d2VQcRA0
float3とやらがイミュータブルなclassとして設計されているんじゃないか?
0907デフォルトの名無しさん
垢版 |
2020/09/17(木) 09:17:47.87ID:6rmLHuYh
>>902
汎用化できる余地のためにそうしてるのでは?
値型という前提で話すと、確かにフィールド直接書き換えの方がコピー1回分減るはず(float x 3程度のサイズなら無視できるパフォーマンス差だけど)
ただしそれだとそのフィールド専用のメソッドになってしまう
0908デフォルトの名無しさん
垢版 |
2020/09/17(木) 12:22:42.65ID:K+TDBLvS
=を多用するような数学的な型で事情があって参照型にする必要があるなら
まともな頭の人ならイミュータブルにするよね
0910デフォルトの名無しさん
垢版 |
2020/09/18(金) 22:50:39.21ID:OlXrbJiY
初学者です
visual studio 2019 comunityでコンソールアプリをつくって勉強しています

製品A 大部品α 小部品T
製品B 大部品β 小部品U
製品A 大部品β 小部品V
・・・
という対応表を読み込み、製品Aを入力したら1行目と3行目を返すプログラムを考えています

この例では列が3ですが、対象によっては2〜5など変わり
列も年齢だったり役職だったり地名だったりするため、Class Person のageやnameのような型を固定出来ません
List<List<string>>とstring型の入れ子Listを作りデータを入れることは出来たのですが
勉強でLinqを使おうとしたのですが、うまくとりだせずスタックしています

すべての行をstring連結して一次元配列にし、Containで対象を取り出し、
出力時に結合文字をsplitする、というやり方以外の方法を教えてください

ありがとうございます
0911デフォルトの名無しさん
垢版 |
2020/09/18(金) 23:02:19.22ID:lOTfajhS
>>910
用途にもよるけど
とりあえず読み込む対象に応じた型を用意したらいいんじゃないの?

部品表を読み込むなら部品用の型に
従業員表を読み込むなら従業員用の型にする
0912デフォルトの名無しさん
垢版 |
2020/09/18(金) 23:24:08.87ID:CE0cDKtm
>>910
class 製品
{
public string 製品名;
public string 大部品;
public string 小部品;
public override string ToString() => $"{製品名} {大部品} {小部品}";
}
var item = new 製品();
item.製品名 = "製品A";
List<製品> list = new List<製品>();
list.Add(item);

製品名が"製品A"のものを取り出したいときはList<製品> listに対して
var result = list.Where(x => x.製品名 == "製品A").ToArray(); //これで製品Aだけの配列が返ってくる

プログラミング自体初心者なのであれば、Linqより先にforeach (var x in list) if (x.製品名 == "製品A") Console.WriteLine(x.ToString());
というループ+if文による原始的な判別の方から入ったほうが分かりやすいと思う
Linqはラムダ式やら遅延評価やら初心者には理解しづらい概念が多いから
0913デフォルトの名無しさん
垢版 |
2020/09/18(金) 23:32:00.69ID:OlXrbJiY
>>911
>>912
こんな時間にもかかわらずありがとうございます

やはりclass製品と対象にあったクラスを設計するのが王道なのですね
具体のプログラム指針まで示して頂き感動しました

早速ためしてみようとおもいます
0914デフォルトの名無しさん
垢版 |
2020/09/19(土) 00:15:08.80ID:N4ZzMqlk
なんか優しい流れになっててワロタw
いや、5chもせっかく人が激減したんだからこういうのが普通の場所になってほしいよねそろそろ
0916デフォルトの名無しさん
垢版 |
2020/09/19(土) 06:35:51.73ID:JSd39pzr
>>910
同じくビギナーだけど、こんなことがしたいんじゃないかって思った
目的:
1.表の1列目データを使って検索して、マッチした行データの1個目と3個目を返す
2.列数の異なった表に対応したい
3.多次元のListでLINQを使いたい
違ってたらすんません

//2次元のListを作る(適当)
var list = new List<List<string>>();
list.Add(new List<string> { "A", "a", "1" });
list.Add(new List<string> { "B", "b", "2" });
list.Add(new List<string> { "C", "c", "3" });


Console.Write("製品名を入力してください(A,B,Cのいずれか):");
var searchWord = Console.ReadLine();
var result = list.Where(x => x[0] == searchWord).Select(x => x);

foreach (var item in result)
{
Console.WriteLine("製品名" + item[0] + " 小部品" + item[2]);
}
0918デフォルトの名無しさん
垢版 |
2020/09/19(土) 11:50:06.05ID:rQqkhAHw
こんなのもあるよね。

1) var data = new object[] { new { model = "製品A", parts1 = "大部品", parts2 = "小部品" } ... 以下略
2) var CLASS = new Reflection.DynamicClass( ... ); CLASS.AddProperty( "[プロパティ名]", [プロパティの型] ); var inst = CLASS.CreateInstane(); inst.[プロパティ名] = ... 以下略

1 の方はそこでしか使わない単純なデータ型にたまに使うかな。
2 は面倒くさすぎるから滅多にやらない。
ビギナーのうちにいろいろ失敗しておくと後が楽。かも。
0919デフォルトの名無しさん
垢版 |
2020/09/19(土) 14:40:50.79ID:iNSc+wes
>>917
シェルスクリプトスレ、Pythonスレ、VBAスレ。
CやC++も酷い時がある。

共通項を理解しておくと技術や人の選定に役立つ
0920デフォルトの名無しさん
垢版 |
2020/09/19(土) 14:54:59.03ID:fEw8E5B5
時間がかかってしまいましたが作ることができました
楽しいですね、ありがとうございます

>>916
Linqはそのとおりです
1列目だけでなく、他の列でも引っかかるようにするため、
foreachを使ったバージョンでは全体検索
Linqを使ったバージョンではresult1とresult2を用意し、それぞれs.製品 b.部品・・・といった形で対応しました

追加でお付き合いください

[1]class製品でプログラムを作った場合、csvやexcelなどからデータを取得する際、
List<string> rows = new List<string>();
foreach (var cell in currentRow.Cells("1")) // colmunA
{
rows.Add(cell.GetString());
}
製品.Add(new 製品(rows[0], rows[1], rows[2]));
といった形で取得しました
ネットのサンプルプログラムでは数データをコードに直接打っているものは見ましたが
//{製品.製品名="zzz",製品.大部品="yyy",製品.小部品="xxx"}というような
ループを使って取得する場合、itemのようなバッファは必須でしょうか?

[2]今作ったプログラムではclass製品に特化しているため、methodなどはList<製品>で作っています
<T>とすることで<製品>や<会社>などに対応出来るジェネリックという仕組みを知りましたが
classのメンバ変数は対応表ごとに作る必要がありますか?
>>918 の2の例が答えになるかとおもい調べています


読んで頂きありがとうございます
0921デフォルトの名無しさん
垢版 |
2020/09/19(土) 15:36:42.05ID:4RgVivY3
後出し禁止
0922デフォルトの名無しさん
垢版 |
2020/09/19(土) 16:00:13.10ID:2HkJedVD
>>920
>classのメンバ変数は対応表ごとに作る必要がありますか?

必要かもしれないし必要ないかもしれない
扱う対象と用途次第

ただ初心者なら最初から汎用的な実装を実現しようとせずに
めんどくさくてもまず冗長な実装をしてから
必要に応じて汎用化することを考えたほうがいい
0923デフォルトの名無しさん
垢版 |
2020/09/19(土) 16:26:06.33ID:sBNFMd+f
static string[] 製品列名 = new string[] { "製品名", "大部品", "小部品" };

Dictionary<string, string> ToMap(this List<string> row, string[] columnNames) => Enumerable.Range(0, columnNames.Length)
.ToDictionary(i => columnNames[i], i => row[i])

foreach(var 製品 in rows.Select(r => r.ToMap(製品列名))) {
Console.Write(製品["製品名"]);
Console.Write(製品["大部品"]);
}

これでいいよ
ただのテーブル処理なのだから行をいちいちクラスにする必要はない
製品が特有の振る舞いを持ち始めたらクラスにすればいい
0925デフォルトの名無しさん
垢版 |
2020/09/19(土) 19:19:32.75ID:eWy/siAc
>>923
辞書をExpandoObjectにすれば完璧だね

IEnumerable<List<string>> rows = MyParser.Parse(src);
var query = rows.Select(row => row.ToDynamic("ProductName", "Part1", "Part2"));

foreach(var x in query) WriteLine($"{x.ProductName}, {x.Part1}, {x.Part2}");
0927デフォルトの名無しさん
垢版 |
2020/09/19(土) 19:47:03.76ID:x3FdUm9j
なんか質問と回答が微妙に噛み合ってないような気もするけど
正直質問者さんが結局何が聞きたいのか何度読んでも読み取れないので何も言えんw
0928デフォルトの名無しさん
垢版 |
2020/09/19(土) 20:10:04.96ID:EqM+rWOJ
>>918,923,925 は俺こんなテク知ってるぜ、すげーだろって言うガキでしょ
初心者スレではマジ邪魔
0929デフォルトの名無しさん
垢版 |
2020/09/19(土) 20:19:53.08ID:fEw8E5B5
基本をしっかりしてからとのこと承知いたしました
辞書については当初考えたのですが、重複あり得るため棄却しました
身に余るご助言につきましてもキーワードを手がかりに勉強をしています
出発点のわたしの質問がずれていたり、仕様が不明瞭なため
みなさまには様々斟酌いただいてしまい申し訳ございませんでした

この度は大変勉強になりました
ありがとうございました
0935デフォルトの名無しさん
垢版 |
2020/09/19(土) 23:22:10.91ID:KiLpFWrg
>>934
ところで君は高卒かい?
0940デフォルトの名無しさん
垢版 |
2020/09/20(日) 06:10:09.41ID:04W6zQEw
>>923
List<string>を対象とした拡張メソッドをラムダ式で書いたものですか
メソッドの内容は引数の配列をkey、List<string>をvalueとするDictionaryの生成

rows.Select(r => r.ToMap(製品列名))
の部分で入れ子になったList<string>を1つずつToMapでDictionaryに変換していく

なるほどー
面白かったです
0941デフォルトの名無しさん
垢版 |
2020/09/20(日) 06:15:58.11ID:PjKYg0xs
ショートカットキーの中にはvisual studioのCtrl + K, Ctrl + Dのように、特定のキーと就職キーを押した後に更に押したキーで判定するものがあるけど、winformsでどう実装したらいいのかな?

検索してもよくあるControl+キー一回分のしかヒットしない……
0943デフォルトの名無しさん
垢版 |
2020/09/20(日) 23:19:27.09ID:q0HaTbqo
>>941
ToolStripMenuItemsを継承してサクッとできるだろ...と思ったけど
ちょっとやってみた感じ意外とハードル高そうw

いい感じで出来たら是非シェアして欲しい
0944デフォルトの名無しさん
垢版 |
2020/09/21(月) 14:38:23.53ID:VOZ/uMsJ
>>941
「C# キー同時押し」でググれば出てくるように見えるが?
特定のキーと修飾キーの「後にさらに押したキー」じゃなく単純に同時押しならKeyDownイベントでWinAPIのGetKeyboardStateかGetKeyStateを使ってキーボードの状態を参照
0946デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:22:28.33ID:fotjvOj5
ctrl k d みたいなタイプのショートカットキー使ったこと無いんでしょ
こういうタイプみるようになったの割と最近だと思うから
0947デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:45:04.47ID:G1EXro4t
10年以上前からあったよな
0949デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:53:16.29ID:2PWsXAVJ
>>946
馬鹿は黙っていればいいのに
0950デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:07:58.59ID:+MA8+KhA
Rx使ってシンプルに実装してるの見たことあるがどこで見たのかは忘れた
モードの状態遷移を管理しないといけないから少し面倒だよね

>>948
Visual Studio用語ではchordとかkey chord
0951デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:34:46.47ID:+MA8+KhA
JSだけどVS Codeはソース見れる
https://github.com/microsoft/vscode/blob/master/src/vs/platform/keybinding/common/abstractKeybindingService.ts#L198

C#のサンプルあったけどあんまりきれいなコードじゃなく少しわかりにくい
Global Shortcut Manager.csってクラスのInChordMode変数を追っかけていけば参考にはなるかと
(タイマーは付いてないっぽい)
https://www.codeproject.com/Articles/442285/Global-Shortcuts-in-WinForms-and-WPF
0954デフォルトの名無しさん
垢版 |
2020/09/21(月) 18:39:57.98ID:apXLM6YN
>>946みたいなショートカットはemacsとかそれに影響を受けたプログラムではよく見るね。
Microsoftのアプリで使ってたかどうかは知らんが。
0955デフォルトの名無しさん
垢版 |
2020/09/21(月) 19:01:47.61ID:fotjvOj5
20年前からよくみる機能だったなら俺の知識不足だ
ここ10年くらいでいろんなアプリで見るようになったなぁという感覚だったから
0956デフォルトの名無しさん
垢版 |
2020/09/21(月) 19:15:33.53ID:IbOijUaT
ToolStripMenuItemに実装するのがベストだと思うけどやっぱりこっちはハードル高いな。
どうやったらいいかさっぱり分からん。

Form自身にショートカットのリストを持たせるのは割と簡単にできた
0957デフォルトの名無しさん
垢版 |
2020/09/21(月) 20:58:09.17ID:2PWsXAVJ
>>955
20年なんてもんじゃない、もっと前だ
0958デフォルトの名無しさん
垢版 |
2020/09/21(月) 22:50:14.81ID:tJiD4dQC
難しいんだなこのショートカット
タイマーでどうにかなるかなあ
ありがとう
0959デフォルトの名無しさん
垢版 |
2020/09/21(月) 23:12:07.36ID:NtH/CUwc
客が入れたいっつーなら仕方ないけど
こんな操作一般的じゃないし
ショートカットキーまで覚えて押してるやつアホだろって思うし
ライブラリについてない機能だとやりたくねぇなって思う
0960デフォルトの名無しさん
垢版 |
2020/09/21(月) 23:58:16.97ID:fotjvOj5
>>957
初出がいつかなんぞどうでもよくて
よく見る機能だったかどうか?なんだけど本気で言ってる?
0961デフォルトの名無しさん
垢版 |
2020/09/22(火) 02:47:05.71ID:4iwC6Uia
>>960
お前が無知なだけ
emacsとかbriefとか知らんのだろ
馬鹿は黙ってろよ
0963デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:23:34.34ID:H4U+QONT
WPFなら簡単に出来そうな気がするな
0964デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:28:14.46ID:ArJlNb7A
僕、最近英語が読めるようになりました。
英語は最近できたものですよね?
0965デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:50:00.87ID:jgJuWXzl
emacsに入ってりゃよく見る機能に分類されるんか
せめてofficeやadobe製品に入ってるレベルだと思ってたよ
0966デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:59:09.18ID:4Xfh/11g
馬鹿の言い訳が続きます
0972デフォルトの名無しさん
垢版 |
2020/09/22(火) 06:56:35.18ID:017YSu2o
昔からあるでしょ
昔はguiなんて無かったしメニューも無かったし
機能を増やすにはそうならざるを得なかった
マウス操作が当たり前の世代の人には判らんかも
0973デフォルトの名無しさん
垢版 |
2020/09/22(火) 07:38:41.84ID:EwzeVKsQ
話の前提がWindowsアプリなのかそれ以外も含むのか明確にしておかないと話が混乱するだけ
0974デフォルトの名無しさん
垢版 |
2020/09/22(火) 08:16:10.63ID:+Q6QH+fq
> せめてofficeやadobe製品に入ってるレベルだと思ってたよ
って言う流れなのでGUI以前とかの昔の話をされても困る
0975デフォルトの名無しさん
垢版 |
2020/09/22(火) 09:14:37.43ID:4iwC6Uia
突然後付けでOfficeとか言い始めた馬鹿
Windowsができる前からあるのに
低レベルの知識で知ったかして後付けの言い訳をするとか
最初に書いたように、
「馬鹿は黙っていればいいのに」
0976デフォルトの名無しさん
垢版 |
2020/09/22(火) 09:19:35.00ID:sns7Lvqb
自分もいいオッサンだけど、「emacs知らんのか?」とか、恥ずかしくて口が裂けても言えんわ。
しまいには「JUNET知らんのか?」「パンチカード知らんのか?」とか言いそう。

こういう老害は、リアルでも「俺の若い頃は〜」とか「今の若いもんは〜」とか言ってるんだろうな。
0978デフォルトの名無しさん
垢版 |
2020/09/22(火) 10:15:32.17ID:4iwC6Uia
ID変えて必死に言い訳する馬鹿
元の書き込みはこれだからな


946 デフォルトの名無しさん[sage] 2020/09/21(月) 16:22:28.33 ID:fotjvOj5

ctrl k d みたいなタイプのショートカットキー使ったこと無いんでしょ
こういうタイプみるようになったの割と最近だと思うから
0979デフォルトの名無しさん
垢版 |
2020/09/22(火) 10:18:56.14ID:jgJuWXzl
いつからあるかないかなんて話してないっつってんのに…
よく見るの?一般的だったの?様々なアプリに搭載されてたの?
そんな広まってる機能がなんでライブラリ等々でサポートされて無くて実装例を探さなきゃならないの?
0980デフォルトの名無しさん
垢版 |
2020/09/22(火) 10:26:23.81ID:z0UOCGjY
無知蒙昧で幼稚な輩は自分基準だから、
自分が始めて知った時=一般に使われ始めた時
なのだろうね。
0983デフォルトの名無しさん
垢版 |
2020/09/22(火) 11:28:26.06ID:Bk3UY7xi
もういいでしょ。
全部>>944が悪い

建前論としてはC#の開発環境はVSだけじゃないが実態としてC#のスレで
VSのショートカットのシステムを知らない人が偉そうなこと言っちゃうのはかなり滑稽
元はそういう話だよね

起源は何かとかどれだけ一般的かとかは関係がない
0985デフォルトの名無しさん
垢版 |
2020/09/22(火) 13:30:31.17ID:2NLhbRwC
>>983
いや、そういうキーの組合せは最近のものだ!と知ったから始めた頭の弱い人が出てきたから変になったのでしょ
0989デフォルトの名無しさん
垢版 |
2020/09/22(火) 21:40:27.39ID:multK6hC
このスレは元々ワッチョイ有り148を立てるときのミスがそのまま使われてしまった物です
続きはお好きな方へどうぞ

ワッチョイ無し
ふらっと C#,C♯,C#(初心者用) Part141
https://mevius.5ch.net/test/read.cgi/tech/1544838367/

ワッチョイ有り
ふらっと C#,C♯,C#(初心者用) Part148
https://mevius.5ch.net/test/read.cgi/tech/1590578921/
0990デフォルトの名無しさん
垢版 |
2020/09/23(水) 10:51:28.15ID:9G1AlVdB
このスレは間違って立てられたもので立てた本人が「立て直しお願いします」って書いていて本来落とすべきスレ
C#の質問は>>989のスレでいいけどレスバトルの続きはマ板でどうぞ
0991デフォルトの名無しさん
垢版 |
2020/09/24(木) 01:52:09.27ID:RHFrLxY0
wpfで画面起動時Loaded?に最小化ボタンを無効化する方法を教えて下さい
起動後、特定のプロパティ変更で有効化したいです。
0993デフォルトの名無しさん
垢版 |
2020/09/25(金) 01:08:22.70ID:M9uVftQk
Windows標準の動作を破壊するようなことは枠なしウインドウでやるかな
0994デフォルトの名無しさん
垢版 |
2020/09/25(金) 01:39:55.75ID:hOD9Ibdx
Windowの標準属性だけどな
0996デフォルトの名無しさん
垢版 |
2020/09/25(金) 03:38:56.77ID:M9uVftQk
WPFじゃなくても閉じます
レス数が950を超えています。1000を超えると書き込みができなくなります。