ふらっと C#,C♯,C#(初心者用) Part159
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part158
https://mevius.5ch.net/test/read.cgi/tech/1679783460/
■関連スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします
http://www.visualstudio.com/downloads/
■情報源
https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://learn.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
https://source.dot.net/
・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
++C++; // 未確認飛行 C
https://ufcpp.net/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured char型って1バイトって書いてあるところもあるし2バイトってのもある
どっちが正しいんですか? >>1スレたて乙
>>3
前スレから使ってください
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/char
>char 型のキーワードは、Unicode UTF-16 文字を表す .NET System.Char 構造体型のエイリアスです。
charは「一文字」 charの定義はプログラム言語によるけどここはC#スレなので
2バイト、UTF-16の符号単位1つ分
が正しい
「1文字」は定義そのものが面倒なのでそれで説明するのはまずい
C#が世に出た時点ですでにサロゲートペアがあったしね string abc = "文字列";
foreach(char c in abc)
{/*処理*/}
確かに使ってないな〜って思ったら、こういう処理でcharは時々使ってるわ。 KeyPressEventArgsのKeyCharはcharだし
意外と使ってる varで書いていて無意識につかってるってのはあるだろうなぁ さすがに decimal・long 封印されたら地獄。 C#のintに相当するIntegerが16bitのVBAではほとんどLongを使っていたが、
C#だとintが32bitなのでほぼintで済ませてる。
VBAはExcelが32bit版だとC#のLongに相当するLongLongが使えないんだなー。 任意精度の倍精度実数型が無いのは
やっぱり自作しろということなのでしょうか? .net6.0 windows11 でUIAutomationを使おうと思っていますが
using System.Windows.Automation;
でエラーが出ます
Automationが名前空間System.Windowsに存在しないというメッセージが出ています
ソリューションエクスプローラーの依存関係を右クリック→
COM参照の追加→UIAutomationClientにチェックを入れています
ほかに何かしないといけないことはありますか?
それともこの環境だとUIAutomationは使えないのでしょうか 「COM参照の追加」でUIAutomationという文字が含まれるものはあと2つありますが
これらにチェックをいれてもやはりダメでした そもそもSystem.Windows.AutomationはCOM参照の方じゃないよ
そして.NET 6だと多分参照を追加しなくても使える
ただし.csprojのTargetFrameworkがnet6.0-windowsみたいなwindows指定じゃないと使えない >>22
<TargetFramework>net6.0-windows</TargetFramework>
となってます
でも使えないのはなぜでしょうか? using System.Windows.Automation;
と書いた段階で、Automationのところに赤色の波線が出ている状態です
ビルドした段階で初めてでるようなエラーではありません Automationは名前空間じゃなくてクラスだから
using書くなら「using System.Windows;」だぞ もしくは↓
using 適当な別名 = System.Windows.Automation; これを.csprojに追加してみたらどうかな
<ItemGroup>
<FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup> >>25
>>26
だめでした
状況は何も変わっていません
>>27
すごい!使えるようになりました
Projectタグのすぐ内側に入れてみました
まだ動作確認してませんが、見た目大丈夫な感じです
なぜこれで動くのかはまったく分からないので調べてみようかと思います
みなさんありがとうございました こういうのがあるからc#は不人気なんだよな
意味不明の呪文が多すぎる C/C++ Win32APIでリンクライブラリとか指定するのと同じことだろうに何言ってんだw VSは何をベースにするかの選択が後付けされていくからな
公式の選択肢の検証が不十分なんだろう あー、そうか
デフォだと参照されてるフレームワークはMicrosoft.Windows.Desktop.App.WindowsFormsで
Microsoft.Windows.Desktop.Appを個別に入れる必要があったのか DataGridView自身のサイズを
中のマスの数に合わせて余白なく変更される機能ってないの? VisualStudioを使ってコメント文のショートカットは
他のVSCodeで使われてるCtrl + /にしてつかってるよね、みんなは?
デフォルトの二段階のやつは面倒。 コメント文のショートカットなんて初めて聞いたので、使ってないが回答です >>37
いやtoggle方式になっててCtrl+/だけでアンコメントできる >>36,39
情報弱者か頭がハゲてるのでは?
カーソルが対象の行のどこに存在していてもショートカット1つでコメント/アンコメントが切り換えられるのはすごく便利。 >>41
それ、コメントアウトされた行を含む複数行を、まとめてコメントアウトできるの? >>43
それ、コメントアウトされた行を含む複数行を、まとめてコメントアウトできるよ。 >>44
じゃあ、その行はトグル操作になってないよね
同じコマンドでトグルしたりしなかったりとか俺は嫌だな
つかそもそもの話はキータッチの数であって、トグル動作かどうかじゃなかった気はするがな >>35
変えてないからいつもvscodeのctrl /と間違う コメントショートカット君は何そんなに鬱憤溜めてるの VSCodeスレでも無ければVSスレでもないんだよなぁ リストのreverseってtolist()できたほうがいいですよね
reverseした後代入したりするとき面倒です。
なんでvoidなんですかね Reverse後に代入ってのがどうしたいのかわからないけど
Reverseはリストクラス自体のメソッドでそのインスタンスを直接操作するけど
OrderByやOrderByDescendingは拡張メソッドでコピーを操作するからコピーが返却されるってだけだよ? Reverseも拡張メソッドにしてコピーを操作したらよくないですかね? Reverse使うことになったことが無いけど
ソース自体かコピーかどっちがいいかは人によるだろう 反転したくてしてんだから反転前のは要らんだろ
つまり今のままでいい List<T>のReverseじゃなくてEnumerableのReverseを使えば?
list.AsEnumerable().Reverse().ToList() アプリ画面だけでウインドウフォームかwpfか判断する方法ってありますか? WPFだとフォームのBackColorが、デフォではControlではなかったような記憶 VS2022でC#コンソールアプリのテンプレートを開くと
Console.WriteLine("Hello, World!");
の一行だけでした。
確か昔(VS2017とか)なら
class Program
{
static void Main(string[] args)
}
みたいなテンプレートだったと思うんですが、変わったんですか? .NET Frameworkの方のテンプレートなら見慣れた構造になってると思うよ >>62
>>63
そうなんですね。
数年ぶりにプログラムをやりはじめたら、
大きく変わっていて右往左往しました。 数年ならそれ以外大幅には変わってないとは思うけどね
色々便利にはなってるけど他の言語も同じ .NET Frameworkから.NET5以降になったら随分変わってると思うよ そらまあ.NETで言えばね。。
数年なら多く見てもせいぜいC#7とか8の頃くらいからやろし。。
まあc#6とか5以前ともなると結構変わった感あるかもね スクラッチみたいなヴィジュアルスクリプティングって余計難しくならないですか? プログラミンってどれだけ整理してかけるか、みたいな能力が大事ですか?
こんがらがる >>70
スレ違い
小学生レベルなのでここ見て勉強してね
https://www.nhk.or.jp/school/sougou/texico/
C#での質問があったらここに書き込んでください >>70
場違いな質問をしていることに気付かない頭の悪さをまずは何とかしろ 自作ツールの起動中のみ、エクスプローラでファイルを右クリックした際のコンテキストメニューに項目を追加したいのですが、参考ソースはありませんでしょうか?
ググったらフォルダーとドライブの該当ソースはあったのですが、ファイル向けがありませんでした。レジストリーーいじるソースなので、知識不足で… 起動時にレジストリ書き込んで終了時に削除するってやれば一応できるんだろうか… できなくはないだろうけど、なんかの拍子にレジストリぶっ壊しそう… ミューテックスで起動しているかチェックしたらどう?
消すのは難しくても無効には出来る そんなに動的ではなくていいので、初回起動時に登録、アンインストール時に削除します。そこが知りたい訳では御座いません そういうときにはChatGPT
運が良ければ解決するかもしれん ツール起動中のみって要件があるのに初回起動時に登録、アンインストール時に削除ってのがわからん
起動中のみって要件外せば幸せになれるのに stackoverflowには絶対にあると思う
あとは7zipのソースでも読んだらいいんじゃね >>82
ありがとう!探してみます!
>>81
そこは重要では無く、質問は、C#のプログラムから下記を行いたいだけの質問です。
>エクスプローラでファイルを右クリックした際のコンテキストメニューに項目を追加したいのですが、参考ソースはありませんでしょうか?
ググったらフォルダーとドライブの該当ソースはあったのですが、ファイル向けがありませんでした。レジストリーをいじるソースなので、知識不足で… >>83
事前に項目を定義した上で LegacyDisable や Extended を着脱(orリネーム)しよう
全ファイル(フォルダ含む)を対象としたいなら * 以下のshell、任意の拡張子/カテゴリ向けなら SystemFileAssociations 下にある各拡張子/カテゴリを示すキー以下の shell に定義すればOK 二次元配列の取り出し方なんですが、c#の場合はどう展開するんでしょうか?
int[,] map = {
{ 0,0,0,0,0},
{ 0,1,1,0,0},
{ 0,0,0,0,0},
};
for(int i=0;i < array.Length;i++){
for(int j=0;j < array[i].ToString.Length;j++)
{
print(array[i,j]);
}
}
これだとジャグ配列用の書き方になるみたいです。
数値を1つずつプリントしたいです。 i < array.GetLength(0)
j < array.GetLength(1) ありがとう
取り出し方が違うんですね
ありがとう(*´ω`*) 配列の構造をそのまま出力するような関数はc#にはあるでしょうか?
forで要素1つずつ出力する方法はあると思います
配列をそのままprintするとsystem.int32などと出ます そもそもそのまま出力っつってもどういう風に表示したいんだって
なんか区切り文字でも挟んで列挙表示したいならstring.Joinすればいいし プロパティの書き方ですけど
set { if (SetProperty(ref abc, value)) OnAbcChanged(); }
みたいなのを
set => SetProperty(ref abc, value) && OnAbcChanged();
みたいに書くことは出来ませんでしょうか? こういう拡張メソッド書けなくはないが個人的には嬉しくもないな
public static void Then(this bool result, Action thenAction) { if (result) { thenAction(); } } >>92
すいません
int[,] ar = {
{0,0},{0,0}
}
このような配列だった場合、arをprintするとsystem.int32などとなります。
二重ループで取り出すと、0,0,0,0といった表示になります。
ただ、二次元配列の構造込みで表示されてほしいんです。
以下のようにです。
{0,0},{0,0} C#のデータ構造の表記で出力したいって事ね
リフレクションでできるのかな? リフレクションとかでできるのかなぁ?
ちょっとfor回して整形する手法しか思いつかないな…… 次元数はRankで取れるけど
展開するのは大変だろうなぁ 普通に json 形式にエンコード-デコードじゃダメなの? ジャグ配列じゃない多次元配列はJSONで直接表現できないからサポートしてるシリアライザも無いんじゃね [i, ]みたいなこともできないから結局ループ回すしかない ありがとうございます
c#だとサクッと出来る関数とかないんですね int[] map1 = {5,6,7,8,9};
void Start()
{
for (int i = map1.Length ; i > 0 ; i--)
{
print(map1[i]);
}
}
初歩的かと思うんですが、配列をリバースしてからプリントした処理をしたいです
テトリミノを回転させるときに必要になると思うので
しかし、このコードだと「Index Out Of Range Exception: Index was outside the bounds of the array.」というエラーになります
これはLengthが0からではなく、1から始まることが原因だと分かりました
なぜ1から始まるんでしょうか? 配列は0から始まるから9を取り出したい場合はmap1[4]にしないといけない
>>104だとmap1[5]になるからエラーになる >>104
>これはLengthが0からではなく、1から始まることが原因だと分かりました
その理解は正しくない
LengthとIndexがごっちゃになってるから区別を付けよう >>104
> Lengthが0からではなく、1から始まる
Lengthは0から始まるぞ
↓みたいなのはLength=0だ
int[] Val = new int[0]; 質問ですが、ファイルを読み書きするときにエラートラップは必要でしょうか
読み書きに失敗するということはHDDかSSDが破損しているということで
そのときにはもうWindows自体が正常に動作していないと思うので、必要ないような気もします なぜそのパターンしかないと決めつけられるんだろう
逆に不思議ではある 自分しか使わなくて、他に実害ないならエラートラップなんて不要
(手抜きで作業手間増えるのは自己責任) .NETつこてるんなら、ちっとはMSのドキュメントでファイルアクセス周りにExceptionの名前でも見てみればいいのに
そしたらどんな理由で起こりえるがもうちょっと解ろうにな >>105
106
107
109
ありがとうございます
インデックスとレングスのズレを修正マス(*´ω`*) ズレを修正っていうか、インデックスとレングスのそれぞれの意味をちゃんと理解しなさい
もう随分古くて、いい加減使うのやめろよっていう言語だけど
インデックスがいくつから始まるか宣言の度にプログラマが決めれるような言語もあるんだよ unityなのでC#使うしかない状態です。
そんな駄目な言語なんですか、、、? なんでこいつあぼーんになってるんだろうと思ったらVSスレにキショいAA書いてたやつと同一人物だったか unityがこのまま終了になるとunreal engineに人が流れる
となるとC#よりはC++を習得したほうがいいよね!って流れになる 欲をかいた結果みんなにそっぽ向かれたらどのみち終了だろ 配列@とAからBを作りたいんだけど、ループさせる以外になにか方法ありますかね?
@ string[] tmp = new string[5] { "A", "", "C", "", "E" };
Astring[] tmp2 = new string[5] { "", "B", "", "D", "" };
B{ "A", "B", "C", "D", "E" }; >>124
tmp.Zip(tmp2, (s, t) => s + t).ToArray() var tmp3 = tmp.Zip(tmp2).Select((a, b) => a == "" ? b : a);
要素数が違うとかの場合は知らんけど 新命令増えてくると、何やってるかはわかるが、新規にその書き方をパッと思いつかない
漢字読めるけど書けない感じ 実務レベルでSQL操作するときってORMは使わないもんなの?
EntityFrameworkはそんなに使われてないってどこかの記事で見たんだけど実務だと生のSQL使ったほうがパフォーマンス的に良いとかあるんだろうか 自分に裁量があるときはEntityFrameworkを避けてDapper+ちょっとマイナーなSQL(CRUD)生成実行ライブラリを使うかなあ
EFのSaveChangesで更新という仕組みがいまだに好きになれない SQL でも HTML でも自分で書かせてくれた方がずっと楽な気がするんだが。
環境に合わせて「ぼくの考えた最強のなんとか」をあれこれお勉強しなくてすむし。 Ruby on Rails では、ORM を使う。
SQL を直接書いたら、SQL injection される!
PHP は、必ずやられる
>>127
Ruby のEnumerable を見れば?
JavaScript のLoDash も、Rubyに合わせている >>125-126
ありがとう!
LINQのZip使ったことなかった >>135
Unityは大盛況だよ
ただしム板のC#はUnity専用じゃないから
C#スレよりUnityスレ逝った方が良いと思う 乞食が騒いでるだけだろ 嫌なら使わなきゃいい
CentOSの騒ぎのときと近いものを感じる いずれにせよマ板の話題
ム板のC#スレにはふさわしくない 下記の_Aからbを取り出すにはどうしたら良いでしょうか。
_A.bのように取り出せないかなと思ったのですがダメでした。
よろしくお願いします。
public class TestEnt
{
public string a { get; set; }
public string b { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
List<TestEnt> _test = new List<TestEnt>();
_test.Add(new TestEnt { a = "A", b = "c" });
_test.Add(new TestEnt { a = "AA", b = "q" });
_test.Add(new TestEnt { a = "AAA", b = "b" });
var _A = _test.Where(x => x.a == "AAA");
string _B = _A.b; //b = "b"を_Bに取り出したいです。
} string _B = _A.First().b; ダメだったらデバッグ中に中身を見ればよいではないか WhereじゃなくてFirstOrDefaultにして_A?.bにしとけ >string _B = _A.First().b;
>WhereじゃなくてFirstOrDefaultにして_A?.bにしとけ
0142ですが、共に期待する動作を確認できました。
ありがとうございます。 LINQの結果をvarで受けるのが慣例になってるけど
初学者には型を明示しない弊害が大きいと思う 今はvarでも型もうっすら表示してくれるじゃん
横に表示が長くなるから良し悪しだけど >>153
マジっすか
後でソース見るとき、型判断するのに右の方見ないといけないのダルいときあるのよ
適宜var書き換えよ 他の環境は知らないけどVisualStudioなら変数名のとこMouseHoverすれば型名出るでしょ >>155
ワイもそれ
逆に使い慣れない開発環境のときは無駄にイライラするw c#でwin/linuxのデスクトップアプリ作れるGUIフレームワーク緩く探してるんだけど今は何がおすすめですかね
1年くらい前に軽く探した感じだとavalonia,mauiあたりは新興すぎて開発途中っぽいしなあとかで
とりあえず他の開発で慣れてたunityでお茶を濁してました
MVC綺麗に分けるのだけじゃなくて、コードだけで画面作って小物サっと組むのもできたらいいなとか思ってます Avaloniaは順調に完成度上がってきてて
OSSあるあるでIME周りが残念だけど10.xの頃よりはマシにはなってきてるし、
個人的にだが小さいツール作る分には致命的なバグや仕様はないかなと思う
ドキュメントは少ないが、WPFの開発経験があればだいたい勘でイケる
逆に言うとWPF分かってないと辛いと思う
MAUIは知らん .NET MAUIはLinuxデスクトップはターゲットでは無かった記憶が LinuxのMAUI待ってたけどもうPythonで作ってるわ linuxのGUIって基礎から終わってて
その糞環境の上でまともなアプリが作られるモチベも湧くはずもなく
それに目を背けながらwebベースのUIばかりが作られていく
要するに関わるだけ時間の無駄 【根拠あり】フリーランスエンジニアは年収862万円取れて普通という話【高収入】
【こんな僕が】フリーランスエンジニアで月収100万円を達成した5つの方法
ITフリーランスエンジニアの年収|会社員との違いや独立後の案件の取り方
月収90万のITフリーランスプログラマー・SEが選んでる在宅案件はこんな案件です
フリーランスの年収は平均いくら?年収1000万円以上の割合とは
2021年最新版 エンジニアの平均年収はいくら?全体平均と比べて○○円も高い! C#はいろんなOSで動くらしいのですが、それはGUIを含みますか?
自分の環境LinuxMintにMonoDeveloperを入れているのですが
GUIはGtkが使用されています。
Gtkを使ったアプリは・・・WinddowsやMacでは動きませんよね? LinuxのGUIが終わってるかは知らんけど
CUIでしか使ったことないな >>164
WindowsやMacむけに移植されたgtkはあるよ
ただし、それぞれのプラットフォーム用に書いたコードがそのまま別のプラットフォームにもっていけるかどうかは知らんが なんちゃら互換は素のwinformより醜い代物が出てくると思ってる WinUI3で作ったアプリって、.net Frameworkしか入っていないPCでも動きますか?
WPFスレで聞いてみましたがスルーされてしまったので、よろしくお願いします >>167
Winform自体はシンプルだぞ
醜い実装するからそう思うだけ なんちゃらツールキット作ったGUIで表示されるコントロールって
うんこみたいなやつしか見た事ない >>168
WinUI3でストアに公開しなければ、unpaclagedってコンパイルしたバイナリフォルダの内容全てをコピーして実行させることになります
Windows10のアップデート済みのパソコンならそのまんま動くはず WPFスレでそんな質問はないけどなw
普通に.net frameworkだけでは動かない
.Net6以降のみサポートだから
特殊なことをして動かせるかもしれないけどそんな質問してくる人間には無理だろう
C#使ったWinUI3はバイナリコピーして実行させても必要な.net coreのバージョンがインストールされてがないと落ちる
インストーラーを適切に作ると.net coreのバイナリをダウンロードしようとする >>174
https://tera1707.com/entry/2022/07/29/043705
この記事にあるように、csprjにフラグを設定するとバイナリフォルダに必要なランタイム一切合切もコピーされるので
それをそのまま持っていけば動く >>175
フラグ設定しないとうまくいかないのか知らなかった
自分ところではずっと失敗してたんだ
多分この人が上の質問をしてるので何が何でも.NET6を使いたくないのだと思ってる
8 名前:デフォルトの名無しさん[] 投稿日:2023/09/20(水) 17:54:12.88 ID:jVfboGwk
WinUIって.NET6を入れずに使えますか?
VS2022のプロジェクトだと、.NET Frameworkが無くて.NET6になってしまいます >>176
Template studioにランタイム云々ってオプションがいつの間にか追加されていて
それをチェックしたらフラグがセットされてフラグの存在をそこで知った ずっとVS2022のGUI操作してパッケージ作って失敗してを繰り返してた
自分がアホなのか仕組みが出来てないのか判断できないでいた t_k_t_k(邪魔という方は左記をNGお願いします)
友人等などにも教えて、プラス¥4000×人数をゲットできます
https://i.imgur.com/ZCzD8Vc.jpg >>173-177
フラグを設定すれば、.NET Frameworkのみの環境でも必要なランタイムがコピーされて動くのですね!
ありがとうございます。 user.configとか.xmlファイルって、Windowsが不正終了とかで落ちた時
中のデータが欠損したり、変な空白とか書き込まれたりでファイルがおかしくなったら
それを読み込むアプリが一切立ち上がらなくなるの勘弁してほしい 起動時のタイミングでconfigファイルが破損してないかチェックすればいいだけでは? user.configとか.xmlに限定してるけどそれ以外のファイルなら安全だと思ってるの? xmlが壊れるならjsonを使えば良いじゃない。by マリー そこらへんのファイルが壊れるような落ち方したら、exeやdllの中身すら危うい メディアファイルに書き込みしてる最中に落ちたら書き込んでるメディアのどこに被害が出てもおかしくないよ いくらファイルシステムが堅牢でも、その上で動くOSやアプリが死んだら壊れたファイルが出来上がる…って寸法だぁ! ネストは深くないほうが良いと言いますが、二次元配列の展開にはネストが必要ですかね?
2階層くらいまでは普通に使って、3階層にもなると深いと思います。 可読性が損なわれなければ多少のネストはいいだろうよ ネストが深いとコードが読みづらくなりバグが混入しやすくなるので避けたほうが良いと言うレベル
初心者のころは閉じブロックにコメントを書くとかそういうので対処したりしたり出来る
namespaceの指定方法が追加されたのでブロックのネストは一段減らせるようになった 色々なレベルの人が見るならわかり易さに寄せるのも大切 あんまり深いと観辛いから
ネスト1{
_ネスト2{
__ネスト3{
ネスト4{
_ネスト5{
_}
}
__}
_}
}
みたいに描いてる メモリ内では連続して格納されてるはずなんだし、1次元配列としてアクセスさせてくれてもいいのにな >>198
連続してると思いたいのは勝手だが
実際の所はどうなっているか見るまでは分からない >>198
spanか使えば
var array = new int[ 3, 4 ];
var span = MemoryMarshal.CreateSpan( ref array[ 0, 0 ], array.Length ); datagridvewなかなか癖あるな
前の会社だとspread 使ってたから同じことしようとするとなかなか厳しい >>198
なら、1次元目Length×2次元目Lengthの1次元配列として宣言して使えば良い 関数化はモジュール化とは言わないですか?
一般的に別スクリプトに分けることをモジュール化というらしいです。
1つのスクリプトにあらゆる機能を書いてしまうと、理解が出来なくなるみたいです。
再利用と、可読性を向上させるためにモジュール化があるのかなと。 >別スクリプトに分けることをモジュール化という
初めて聞いたわそんな説 gptはC#のコード生成しようとしたら1行目からincludeしろとか言ってくるからな >>203
1関数=1モジュール観たいな糞言語ならそうかもな ChatGPTに頼るようなヤツはプログラムやらんでもろて 態々Chatって名前に付けてくれてるのに、おかしな使い方する連中の多いことw やらんでもろて=やらないでくださいおながいしますわ 名前にchatってついてることと使い方に何か関係が? chatGPTは、会話する友達のいないボッチが寂しさを紛らわす為の癒しツールだからなぁ >>203
>関数化はモジュール化とは言わないですか?
一般的には言わない
モジュール/モジュール化という言葉は文脈によって意味が多岐に渡る
広い意味で再利用可能・入れ替え可能な部品に分割することをモジュール化と呼ぶこともあるので
ある処理を抽出して関数化することもモジュール化と言えないこともないが一般的ではない
関数よりもっと大きな単位を指して使われることがほとんど
狭い意味だと使ってる言語で定義されてる”モジュール”に分割することを言う
>一般的に別スクリプトに分けることをモジュール化というらしいです。
Pythonのように1ファイルが1モジュールになる言語であれば
別スクリプトに分けることとが狭い意味のモジュール化
C#にもモジュールの定義はあるにはあるけど通常意識されないものなので
モジュール化という言葉が狭い意味で使われることはほとんどない モジュールは外からの見た目だから
中身が何で出来てるかなんて関知しない
たとえうんこで出来ててもな! >>215がBardやBingAIにはどんな難癖を付けるのか気になる 質問です
他人のコードを読むという行為は「分解」なのでしょうか?
他人のコードがわかりにくい場合は、スクリプトを分けるなどして分解するのが良いですか? ゲーム用のプログラムなのですが、ロジックを知りたいです リバースエンジニアリングは、マシン語になった実行ファイルやROMから逆アセンブルなどを用いて命令コードに変換して処理内容を読み取る技術だろ
ソースコード自体があるなら単に読めばいいだけ スクリプト?
ああ、スクリプト言語で書かれているのか
それならスクリプト自体を幾ら読んでも分からないよw
実際に動作を定義してるのはスクリプトエンジン側だからなぁ ゲームのスクリプト読んでも、分かるのはそのゲームのストーリーくらいかなぁ? >>227
その目的と
>他人のコードを読むという行為は「分解」なのでしょうか?
という質問は何か関係あるの? >>229
逆アセはリバースエンジニアリングの過程の処理のひとつで
ソースコード読み解いて動作を解析することもリバースエンジニアリングよ ソースコード自体にもう内容書かれてんのにリバースエンジニアリングとはw 例えばシェルスクリプトならそのまま読むだけですべて動作を理解できる
一方でゲームスクリプトはゲームエンジンの動作を解析しないと理解は難しい もっとも利用するだけなら使い方を理解するだけで中身を理解する必要はない 単に読んでるだけでわかりにくにならデバッグ実行して動作とコードの関係を把握しながら読むと理解しやすい
途中で変数の値の確認や変更もやると確証がもてる >>237
https://gist.github.com/baba-s/e4da98f6fce2b6cca36b0cf3bb91f9d0
これが倉庫番のコードなのですが、全て1つのスクリプトに書かれています
これが分かりづらいので、分割、分解して理解を深めたいです
>>232
自分でゲームを作りたいので、分解してロジックを理解したいです
他人のコードを読み解く能力が上達には必須と考えました >>239
この規模だと分割したらさらに判らなくなるだけだと思う 40年前ぐらい小学生のころに雑誌に載ってた倉庫番打ち込んだな
おそらく7~8ページ程度だったけど2週間ぐらいかかった
ロジックはほとんどなくドット絵のデータがメイン
そんな思いをしなくても遊べる今は恵まれてるなと思う
打ち込んでは実行してタイプミス潰し
倉庫番はリアルタイム性などない単純なパズルだから打ち込んでると嫌でも仕組みはわかった
何しろ状態を持ってない
全部マップデータ通りで単純明快
多分コード読んでるだけじゃ理解は深まらない
自分の見たい部分しか見ないから
コード打ち込むと全部舐めなければならない
そのうえで改変して挙動を確かめる 大体2~3本似たようなプログラムを打ち込むと
仕組みが大体頭に入る
やってることは非常に単純
小学生にも理解出来る
そして普通に自分でも書ける
多分何百本分のコードを読んでも理解度は低いと思う そのころはコードにコメントなどもちろんなくインターネットもなく
下手するとマニュアルもなかった
でも数本打ち込むと大体わかった
英単語も読めない小学生にもわかるんだから誰にでも理解できると思う >>239
>他人のコードを読むという行為は「分解」なのでしょうか?
これはノー
「分解」はあくまでもコードを読み解くためのテクニックの1つ >>239
スクリプトって書いたら意味が通じない
(ソースコードを記述した)ファイルもしくはソースファイル >>247
unityではc#スクリプトと呼んでる 英語を読む・聞き取る・話す は分かりやすく別の学習をしないといけない
コードを読めても書けなければ意味がない
理解したいならコードを書いた方がいい >>248
ああ、そう言う位置付けなのか
文字通りスクリプトなんだろうなぁ
ビルドしないで直接動かすんだろ? それとコードを読むのは非常に高度な技術だから
初心者がコードだけ読もうとしても
おそらく思ったような成果はあげれれない ゲームの細かい動きの部分だけスクリプトで書いてるみたいな感じだと全体を理解するの難しいかもね 倉庫番自体のロジックは非常に単純
オセロより簡単ともいえる
キャラが空白のところへ動かせるようにつくる
移動先に荷物があってその先が空白ならキャラと荷物が動く
そのあと終わってるかどうか判定するだけ >>239
こういうのこそChatGPTの使いどころでは? ここみれば?
ttps://baba-s.はてなblog.com/entry/2018/03/30/085000 はてな英字表記がNGワードだった
作者が全部解説してるのにこっち見ないで完成形のソースだけ見てなにをどう理解したいのかわからない >>239
うだうだ人に聞いてるお前には無理だと思う >>225にしても>>203にしても質問がヘタというか的外れというか
それ聞いてどうするの?言葉の定義を確認して何になるの?って感じが
コードのここの意味が解りません、とかの具体的な質問の方がよっぽどマシ 初心者相手に罵倒しても心が汚れるだけ
上のコードはあまり関心出来ない部分もある
そのせいで分かりにくい箇所が若干ある >>234
逆アセで生成されたコードも、アセンブラの"ソースコード"だぞ?w ワッチョイ 6ab0-/va4
ネチネチとしつこいだけでダメな奴の典型例 質問者です
確かに何が分からないのか言語化出来ないかもしれません
丸投げ質問にならないようにもう少しもがきます
ぼんやりした事を言うと、分からない部分は処理の流れですかね。 Unity詳しくないけど必要に応じてSokobanクラスの各メソッドが呼び出される仕組みじゃないのこれ?
処理の流れってのがそのUnityが仕切ってる部分のことを言ってるなら
このクラスをいくら眺めても理解できなさそうだけども Unityから呼び出されるメソッドは初期設定のStartと更新処理のUpdateの2つ
毎回呼び出されるのは後者なのでそこから追いかけていけばいい なるほど、たしかにコメントにもそう書いてある
もっとあれこれ呼ばれるのかと思ったら意外にシンプル
てことは>>267が分からないって言ってる「処理の流れ」はクラスの中の話の可能性が高い?
であればコードを読み進めてここで詰まったとか具体的な情報が欲しいところ こんだけみっちりコメント書いてあって、メソッドも分かれてるから、後は気合だけのような… あとは自分の今の知識・理解度に見合ってるかどうかかね
他スレでもたまに明らかに分不相応なお題に取り組もうとしてる人を見かける 基本素養が足りてない人に限って、Webの情報を断片的に拾い読みするだけで済まそうとする…
2,3千円をケチらずにちゃんとした入門書を買うべきやろな 千里の道も一歩からと言うけど100m先のコンビニへもまず一歩踏み出さないと到達しない
プログラムでバグが出るのは当たり前でそれを潰すのは経験を積むしかない
コードを読むだけではそこらへんは無理
文法が分かったとして実際に書かないと理解は深まらない
見てもわからないなら紙にでも書き出して考えることもできる
小学生のころは配列の内容を方眼紙とかに書いてプログラムを再現して理解しようとしてた
それがいつの間にか脳内ですべて完結するようになった
期待通りにならなくても結果を見て経験からこうだろうなと見当を付けられるようになった
小学生より賢いはずなんだからなにか手立てはあるだろう 実際にUnityを使っていて一度でも空のプロジェクトを作ったことがあれば>>270程度のことは直ぐに分かる
中身が空のスケルトンコードがそのまま作られるのでUnityと言うゲームエンジンのフレームワークの基本構造が見えてくる
コードを読む前にまず手を動かして見なければ気付けないことも多い >>277
倉庫番のコードを書くようにしますが、その場合は他人のコードを完璧に真似るつもりでやったほうがいいですか?自己流でやっていたことが良くないと気づいたので。他人のやり方まで取り込むのが上達への近道かなと思ってます 他人のコードを理解する、読み解く上でのやり方が確立されていない感じです 読み解き方が確立されてるかされてないか以前の問題のような…… 基礎が身についてないのにやみくもに書き写したところで書く能力が身につくわけないじゃん
自分語りの詐欺的商法に騙されるなよ
ちょっと考えればわかるだろ
キミに必要なのは公式チュートリアルと入門書 40年ぐらい前の小学3年生よりあなたは賢いのかどうかと言う問題
現状スキルレベルでは負けている
環境では勝っている >>280
小難しい理屈はどうでもいいから、>>239のソースを読んでて分からないところを具体的に質問しよう
質問が具体的な方がこちらも質問者のレベルを推し量れるしアドバイスもしやすい >>284
手を動かさないと何が分からないかも、分からないという状態から脱せないでしょうか? 入門したてはタイピングが苦痛だった
一文字ずつキーボードとにらめっこ
p r i n t と一文字ずつ探してやっと一行を入れ終わる
そして実行
自分が今一行入力した分だけ画面が変わったりする
今書いたコードはこういうことなんだと分かる
それが体験で経験
誰がどのように入力しても結果は同じ そのころコードを読んでも絶対意味なんて判らない
手を動かして実行
これ以外上達の方法はない >>285
初歩的なところから聞くけどこのソースを実行できる環境はちゃんとある?
実際に動かしてみた? 英単語なんか知らないから一文字ずつアルファベットを暗唱しながらタイプしていく
呪文を打ち込んでいく
一行入力も辛いので途中で実行して進展を見る
入力したコードの理解が深まる
そうして小さな成功体験を積み重ねる
そのうち前に入力したのと同じような内容が出てくる
今度は実行しなくても結果がわかる
実行してみて違うなら違いを探す
こうして一歩ずつ進む
コードを読んだりコメントを読むだけだとこういうのが失われて分かった気にだけなる
実際にコードを書けないし着想もできない >>285 は手が動いても頭が動かないタイプと観た それ、逆じゃないのかな。
手を動かす前にうだうだ考えるウチに投げ出すタイプというか。
なにも考えずにとりあえずコードを打ち込んでみて、動かしてみればいいじゃない。
そしてその動くプログラムのコードを書いているときや後から眺めたときに「こうした方がいいんじゃない?」って思ったところを何度でも直して、また動かしてみる、と。
実際、自分がやるのもそれに近いところがなくもないし。
分からないところをネットで調べてコピペして動かして、足りないところや考慮すべきところを直し加えてってのを何回かやったりやらなかったり。 >>288
unityで動かしております
>>290
やはり手を動かします
>>284
では質問させてもらいます
gptに聞いたのですが、良くわかりませんでした
https://gist.github.com/baba-s/e4da98f6fce2b6cca36b0cf3bb91f9d0
TileTypeという列挙型があり、tiletype型を使用してtilelist変数を宣言しているのが分からないです。
普通、インデックスにアクセスする場合は整数型を使うと思うんですが。
やはり、基礎が出来てないなと 例えばデバッガーでマップの配列の中を確認する場合、無味乾燥な整数で状態表示されるより列挙変数で表示された方が分かりやすいだろ
プレイヤー視点ではなく開発者視点で分かりやすくしているだけ >>293
>普通、インデックスにアクセスする場合は整数型を使うと思うんですが。
インデックスってのはtileList[x, y]のxとyのこと
この場合もxとyは整数型でしょ
インデックス「に」って表現してるけど何かと勘違いしてる? で、tileListは配列要素の型がTileType列挙型なわけだけど、その理由は>>294も書いてるように可読性や保守性のため 抽象的な話じゃない説明
例えば数値で壁を1で荷物を3とかにすると…
コード内で1とか3の数字が出てくるがそれが何なのか覚えてないとわからない
データの種類が100種類とかあると管理だけで大変
それを改善する場合に数字じゃなくて文字で '壁' とか'荷'とか'人'とかにもできる
でもこの場合も問題がある
気まぐれで壁や荷物を赤い壁と青い壁、赤い荷物と青い荷物などにしたくなった場合にどうするか?
別に色情報持つとか考えなくてはならない
それだったらTypeでRedWallとかにしたほうがいい
更に後でRedWallをやめたくなった場合にはenumからRedWallを削る
そうするとIDEにエラー表示が出て修正箇所がわかる
これが数字だと修正を自力で探して頑張るしかない >>293
ウザイことこの上ない
まずは入門書を買って読め 勘違いしてそうなので基本的なことから書くと
int[3]は[0, 0, 0]のように各要素がint型で長さ3の1次元配列を示す型
string[3]は[“a”, ”bb”, “ccd”]のように各要素がstring型で長さ3の1次元配列を示す型
TileType[3]は[TileType.NONE, TileType.PLAYER, TileType.GROUND]のように各要素がTileType型で長さ3の1次元配列を示す型
var tiles = new TileType[3]{TileType.NONE, TileType.PLAYER, TileType.GROUND};
if (tiles[0] == TileType.PLAYER) do_something;
のような使い方をする
TileType[10, 10]は各要素がTileType型で10×10の2次元配列を示す型 可読性の高いRuby で、3目並べが並んだかどうかの判定だけでも、こんなに書く。
ましてや他言語は可読性も低いし、他人のコードなど読めるわけがない!
他人のコードを読むことを勧めるような香具師は嘘。
100行の内、5行ぐらいしか読んでいない
input_ary = [ ["x","","", "x","","", "o","o","o"],
["o","","x", "","o","x", "","o","x"],
["x","o","o", "","x","", "o","","x"],
["x","","o", "x","o","", "o","",""],
["o","x","o", "","x","", "","o","x"] ]
def check_win( board_ary )
puts "-" * 40
diag_ary = Array.new( 3 ) # 斜め
diag_ary[ 0 ] = board_ary[ 0 ]
diag_ary[ 1 ] = board_ary[ 4 ]
diag_ary[ 2 ] = board_ary[ 8 ]
return true if diag_ary.all? { |cell| cell == "o" } ||
diag_ary.all? { |cell| cell == "x" }
diag_ary[ 0 ] = board_ary[ 2 ]
# diag_ary[ 1 ] = board_ary[ 4 ]
diag_ary[ 2 ] = board_ary[ 6 ]
return true if diag_ary.all? { |cell| cell == "o" } ||
diag_ary.all? { |cell| cell == "x" }
次へ続く 前の続き
p outer_ary = board_ary.each_slice( 3 ).to_a # 3×3 の配列
outer_ary.each do |inner_ary|
p inner_ary
return true if inner_ary.all? { |cell| cell == "o" } ||
inner_ary.all? { |cell| cell == "x" }
end
puts "転置後"
p outer_ary2 = outer_ary.transpose # 転置
outer_ary2.each do |inner_ary|
p inner_ary
return true if inner_ary.all? { |cell| cell == "o" } ||
inner_ary.all? { |cell| cell == "x" }
end
false
end
res = input_ary.map { |ary| check_win( ary ) }
puts "-" * 40
p res #=> [true, true, true, true, false] 仕様から、コードは書けるが、
コードから仕様を推測するのは、10倍以上難しい
他人のコードを読むと、膨大な時間の無駄で、
自作していないから身につかない
3目並べとか、じゃんけんとか、素数判定とか、
簡単な所から自作すべき!
解説が無いような、他人のコードを絶対に読んではならない!
膨大な時間の無駄 昔々BASICインタプリタと横スクロールゲーを全てレポート用紙に逆アセンブルして分析したのはメチャ役に立った
初心者が(簡単な)ゲームの分析、理解することは役立つこと多いと思うよ 人に聞きまくるだけの奴には無理だぞ
方法論以前の問題 >>294
回答どうも
理解が悪いです
列挙型って数字でもあるんですか?
それぞれの文字列にインデックスがあると。 列挙型、配列、インデックス
根本的にこのへんが正しく理解できてないな
>>299の言ってること理解できる?
分からないならどこが分からないな質問する >>306
配列の要素のデータ型が列挙型(の変数)というだけであって配列そのものが特殊なものという訳ではない
https://i.imgur.com/iA3fRKM.png >>306
配列の要素のデータ型が列挙型(の変数)というだけであって配列そのものが特殊なものという訳ではない
https://i.imgur.com/iA3fRKM.png >>306
配列の要素のデータ型が列挙型(の変数)というだけであって配列そのものが特殊なものという訳ではない
https://i.imgur.com/iA3fRKM.png >>306
配列の要素のデータ型が列挙型(の変数)というだけであって配列そのものが特殊なものという訳ではない
https://i.imgur.com/iA3fRKM.png >>307
ありがとうございます
https://baba-s.はてなぶろぐ.com/entry/2018/03/30/085000
tileList = new TileType[ columns, rows ];
の部分でtiletype型には定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入しているあたりが分からないです。
何らかの文字列の定数が入ると考えていますた >>314
君はそもそも配列宣言の記法、意味が分かってない
まず↓あたりをじっくり読んで、サンプルコードも実際に動かして理解して欲しい
https://ufcpp.net/study/csharp/st_array.html
そしてハッキリ言うけど今の段階で倉庫番のコードを理解しようとしても基礎が出来てないから無理 >>315
必要なところだけやっていくやり方でやってますが、そういうやり方じゃ駄目なんですか?
配列宣言は分かっているんですが、型が違いますよね
>>316
聞きますが、全てではないです >>314
>tileList = new TileType[ columns, rows ];
元ネタ見てないけど、↑を見てこう考えることができるように基礎知識、経験が必要
・tileListに画面の状態を格納するんだな
・二次元配列としてcolumns, rowsの数だけ確保と
・二次元配列に代入する値はTileType型ね(intとかのリテラル値でなくキチンと定義してるのか)
な感じ
>「tiletype型には定数の文字列が入ると思っていましたが」
ある程度予想しながらソースは読みますが、経験不足で予想外れるのはまだ仕方ない
>「整数値であるcolumnsとrowsを代入している」
代入はしていない。これから値を格納するための二次元配列を確保してるだけ
まだc#の記法がわかってない未熟なだけなので、何もかも貪欲に覚えて。
今やってることは無駄になることは何もない。間違えてても。頭と手をドンドン動かして吸収していくのだ >>317
この倉庫番のコードではマップのデータをcsv形式のテキストで設定してtileListという名の配列に格納している
格納する際に配列の要素はcsv内の整数データからTileTypeで定義された列挙型の変数に変換される
具体的な配列の中身を確認した結果が>>309
実際にコードを動かして見ればすぐ分かるだろ >>317
この倉庫番のコードではマップのデータをcsv形式のテキストで設定してtileListという名の配列に格納している
格納する際に配列の要素はcsv内の整数データからTileTypeで定義された列挙型の変数に変換される
具体的な配列の中身を確認した結果が>>309
実際にコードを動かして見ればすぐ分かるだろ 何故かまた2回送信された
接続が不安定すぎるorz 最近の5chの問題だからいちいち気にしなくて良いぞい >>317
配列宣言において型が違うことは重要じゃないよ
どんな型の配列だって作れるわけだから
それが分からないことこそが基礎ができてない証拠であって
君の言う「必要なところ」がやれてないということ
>>315のリンク先をきちんと理解すれば>>314の
>tiletype型には定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入しているあたりが分からないです。
>何らかの文字列の定数が入ると考えていますた
という疑問と想定が間違っていたことに気づく
まずそこから始めよう 自分が必要と思うところだけつまみ食いするのがタイパいいとでも思ってるんかねぇ
見当はずれなことやって結局無駄に時間を使うだけなのに 批判は一切受付けません!のスタイル
そもそもこんなことに何日も掛けて進まない時点でこいつには無理 >>318
>>325
返信してくれた5人が違う事を言ってたら、その中からどれか選ぶしかないじゃないですか。
あと、基礎やるにしてもどうせすべて使うわけじゃないし、必要な部分だけやるスタイルです
>>324
リンク先見てきます 要約すると、
基礎を学ぶ気はない貴様らは俺の聞いたことに答えればいいんだ
つまり、教えてもらおうではなく聞きだそうというスタイル とりあえず環境構築してるならまずサンプルコードそのままコピペして実行しろ
いろいろ考えながらコードを弄っているうちに分かってくるからさ
疑問点は人に聞く前にまず自分で試して経験しろ >>327
>>331
ほんそれ
荒らしの相手レスする香具師も荒らしと看做せばいい
質問オウム返しはそもそも問題解決する気が無くて荒らしたいのだろう 色々なブレイクポイントで止めて中身を確認、理解する
理解できない部分は置いといて次に進む繰り返し
過去の疑問も解けていく
これは必須の作業。これをやればほとんどの疑問、分析は自己解決できる
昔はPRINTいっぱい埋め込んだものだ
今は楽ちん >>328
リンク先の内容で理解できない部分や自分の想定と違う部分があったら具体的に示して質問して >324
列挙型でも数字はありますもんね。
ようやく少し理解 列挙型は数字があるというより数値を別名で抽象化したもの
実際の正体は単なる整数値
ただし直接的に数値として扱うとエラーになる >>338
いや、理解できてない
数字がある(=型に数値と互換性があるという意味と推察)かどうかは配列で扱ううえで全く関係ないよ
君が「数字がないもの」と思っているものの配列は理解できる?
例えば文字列配列を配列の長さ3で宣言できる? >>338
なんで数字にこだわるのかわからなかったけど
> tileList = new TileType[ columns, rows ];
>の部分でtiletype型には定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入しているあたりが分からないです
ひょっとしてcolumnsとrowsで二次元配列のサイズを指定してるのを
配列tileListにcolumnsとrowsの値を入れていると誤解してる? 二週間も同じことをグダグダ質問してる馬鹿は荒らしか?そうでなければ才能ないから諦めて消えろ >>341
そうじゃなくて、配列宣言は定数値じゃないといけないと思ってるんでしょ
だから皆から他人のコードを読む以前、基礎がわかってない、先に本なり見て学べって散々言われてるんよ >>341
あーなるほどね
コレクション式も追加されてそういう誤解は増えそうだな >>344
それだと「整数値であるcolumnsとrowsを代入している」とは言わないだろう
tileList = new TileType[]{columns, rows};
みたいに初期値を入れてると誤認してるからこそだろう
そして「tiletype型には定数の文字列が入ると思っていました」というのは
tileList = new TileType[]{TileType.PLAYER, TileType.BLOCK};
のような書き方を指していると推察できる >>346
「定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入している」ね
要するに配列宣言には定数を使用すると思ってたのに整数型変数使ってるのなんで?ってことよ 配列の宣言には定数を使わないといけないという勘違いをするのはそういう制約のある他言語に慣れ親しんだ人だけだから >>347
「tiletype型には定数の文字列が入ると思っていましたが、整数値であるcolumnsとrowsを代入している」ね
columnsとrowsが配列のサイズを指定していることを理解していればそうは言わんでしょ
TileType型の配列の初期値に整数値が入るのなんで?ってことよ >配列宣言は分かっているんですが、型が違いますよね
とか
>列挙型でも数字はありますもんね
って発言からもTileType型の配列には数値は入らないと思ってたけど入るんだと自分を納得させてるフシがある 配列の宣言わかってるならあれを初期値だと思うか?
まぁ結局どういう考えかは本人にしかわからんけど 配列宣言は定数値じゃないといけないと思ってる、よりは言動の辻褄が合うのではないかという話
本人に聞かないと真実がわからんのはその通り 単に定数値という言葉の意味をわかってないだけでしょたぶんTyleType型の各値のことを言ってる
なんなら宣言という言葉の意味もわかってないし代入すらわかってない可能性もある 再掲
配列の要素のデータ型が列挙型(の変数)というだけであって配列そのものが特殊なものという訳ではない
この倉庫番のコードではマップのデータをcsv形式のテキストで設定してtileListという名の配列に格納している
格納する際に配列の要素はcsv内の整数データからTileTypeで定義された列挙型の変数に変換される
https://i.imgur.com/iA3fRKM.png interfaceのクラス変数としてintとかの変数持たせるのはstatic intにしても同じことって理解
でいいですか? クラス変数は誤植ですねごめんなさい。interfaceの中に変数宣言できたことです。 揚げ足取りじゃない
質問も訂正もおかしなことを書いてる C#でインターフェイスにフィールド(メンバ変数)を定義することはできないよ
なのでどういうのを想定しているのか回答者は全然分からない
用語を間違ってる可能性もあるからまずこういうコードというのを示してみたら >>361
発言がおかしいと感じたならそこを問いただせばいい
>>358は揚げ足取りでしかない
それともまさか本気で言ってる? ないものについて質問されてもないんだから答えようがない
それがまともな回答 他の言語に触れてなくてクラス変数という用語自体を知らないのだろうか c#のinterface内でミューテクシオン宣言が使えないのはなぜですか?
回答
c#にミューテクシオン宣言と言うものはございません
これは揚げ足取りか? >>366
クラス変数という用語をご存知ですか?
イエスかノーでお答えください 誤植ですねについてああだこうだ言うのが揚げ足取り
イエスかノーかで答えてくださいに知らないと答えたのについてああだこうだ言うのが揚げ足取り
全然どうでもいいことにいちいち突っかかってくるID:M9UZ8U5c0が悪い >>368
これは失礼
他の言語の知識がなくてクラス変数自体を知らなかったのなら>>358の発言も仕方ない
ちなみにC#で言う静的メンバ変数に相当するものなので頭の隅に置いておこう 昔はできなかったがinterfaceにstatic memberを定義できるようになったんだよ 特に継承するわけでもないinterfaceの変数を使っていたので
staticでよくね?って思ったまでです。 >>362
メソッド以外定義できないんですか?普通にint xxx{get}みたいに変数定義してましたけど? interfaceは実態まで定義できるようになって
これじゃ多重継承と何が違うんだろうね 今や関数指向全盛じゃん
オブジェクト指向が諸悪の根源じゃねーーの
能力足りてないエンジニアばっかなんだから 関数指向全盛って初めて聞いた
データとかあるんですか (1)オブジェクト指向プログラミング A. クラスの定義 B. オブジェクトの生成 C. カプセル化 D. 継承 E. ポリモーフィズム
(2)関数型プログラミング A. 高階関数 B. クロージャ C. ラムダ関数 D. ジェネレータ E. デコレータ >>380
デコレータはどちらかというとOOP用語
関数型では単なる関数合成の一種なのでわざわざデコレータとは呼ばない Taskについて質問です。
階層構造データを再帰的に探索する処理を階層ごとにTask.Factory.StartNewで並列化させて作ってるのですが、
WinFormsのControl.Invokeのように、子タスク内から親タスクのコンテキスト上で実行させたい処理があります。
今は親タスクで作成したリストを追加するActionを子タスクに渡して、後で親タスクでリストから取り出して処理を行っていますが、
可能であればControl.Invokeのように、子タスクのコンテキストのタイミングで親タスクのコンテキストに明示的に移って実行したいと考えています。
これを実現する方法があれば教えてください。Invokeの仕組みを解説してるサイトもあったのですが、意図する方法は見つかりませんでした。
void parent_proc(Tree tree) {
var locker = new ReaderWriterLockSlim(); var datalist = new List<string>(); var tasklist = new List<Task>();
Action<string> adddata = (string d) => { //排他制御でデータをリストに追加
locker.EnterWriteLock(); datalist.Add(d); locker.ExitWriteLock(); };
foreach (var node in tree) {
if (node.child != null) {
var task = Task.Factory.StartNew(() => { child_proc(node.child, adddata); }, TaskCreationOptions.AttachedToParent);
tasklist.Add(task);
} else {
datalist.Add(node.data);
}
}
Task.WaitAll(tasklist.ToArray());
foreach (var data in datalist) { //今は親タスクのコンテキスト上で処理している
}
}
void child_proc(Tree tree, Action<string> adddata) {
foreach (var node in tree) {
if (node.child != null) {
Task.Factory.StartNew(() => { child_proc(node.child, datalist); }, TaskCreationOptions.AttachedToParent);
} else {
adddata(node.data); // このリスト追加処理を無くして、ここで親コンテキストに移って実行したい
}}} 分かってると思うけど親コンテキストには移れない
親に処理を委譲してるだけ
人間と同じ
それなら親が適切なタイミングでリストを見て実行する様に書き換えるだけだろ
当然waitもawaitも出来ない
脳内でじっくり何をやるか順をシミュレートして考え直すしかない >>384
ありがとうございます。
よくよく考えるとControl.Invokeにはメッセージループがあるので、
ワーカスレッドから渡されたdelegateを同期的に実行するタイミングがある事に気付きました。
今回の場合Task.WaitAllにタイムアウトを入れて、子タスクのデータを泥臭くポーリングすることで意図する事ができました。
while (!Task.WaitAll(tasks, 50)) { check(); } // check内で子タスクデータを処理
check(); // 全子タスクが完了した後残りデータがあれば処理
ウィンドウが無いケースでもExecutionContextで強引に実現できそうな記事も見つかりましたが、
やろうとしてる事に対して複雑になりすぎるので今回はこれでいこうと思います。 キャストとパースは同じものでしょうか?
キャストは型変換で、その手法の1つがパースというイメージです。 キャストとParseメソッドの違いは、主に次の点です:
キャストは同じ型の変換に使用されます。つまり、基本的なデータ型間での変換(例: int から double への変換)に適しています。一方、Parseメソッドは、異なる型のデータを文字列から変換するために使用されます。
キャストは基本的に明示的な型変換です。つまり、変換先の型を明示的に指定する必要があります。例えば、(int)doubleValue というように変換先の型をカッコ内で指定します。一方、Parseメソッドは、変換元の文字列が適切な形式であることを確認し、それを適切な型に変換します。具体的な型指定は不要です。
理解
ありがと(*´ω`*) キャストは同じ型の変換に使用されます。
いきなり意味不明でワロタ テキストファイルから読み込んだ数字というのは文字列なんですね
だからparseが必要ってことか float32/64からint32/64にキャストするときって
小数点以下は勝手に切り捨てられるってことで良いのかな
オーバーフローしてたらどうするのかな
色々面倒だよね
「同じ型の変換」って言われると
int32<->int64
の間のキャスト観たいなのを想像する
これも問題無い訳じゃないけど
parseは文字列からの変換を普通に思い浮かべるが
jsonのparseとかみたいに構造まるごと変換のときも使うしな VisualC#を独習している者です。
教えてください。
GridViewコントロールに←→のような、カレント行を移動させるボタンって、ツールとして用意されていないのでしょうか?
コマンドボタンコントロールを並べて自作するしかないのでしょうか? そういうリッチな機能は標準じゃない
欲しいなら自作もしくは適当なUIライブラリ プログラミングの基礎固めってどこまでやるもんでしょうか
成果物作ろうとしても基礎が出来ないと効率悪いですよね 基礎学習は適当に切り上げてなにか作らないと続かないよ >>400
配列の使い方程度なら基礎ですよね?
ゲームなどの成果物はすぐにでも作りたいのですが、他人のコードを読めない問題に直面しまして、基礎からやり直しです。 こないだの配列宣言の話のときは途中でフェードアウトしてたな
そういう中途半端な姿勢ではこの先も危ういだろう ただの誹謗中傷になってる場合は、出来るだけ見ないようにしてます 誹謗中傷とそうでないものの区別がつかないならこのスレには向いてないよ
他所行ったほうがいい それは受け取り方にもよるんですよね
特に人格に対する中傷なんかは得るものがない割に、気が滅入ります
主観的にどう受け取るかという部分もありますし、誹謗中傷の定義は万人共通ではないかと 配列の宣言、作成、初期化、参照
古典のC言語でもポインタが理解できなくてリタイヤする奴は沢山いた
C#ではとても書きやすくなっているが同じ機能があるということは同様に難しいということ
逃げるなら早い方が良い >>406
じゃあ聞くけど>>340-341のどこを中傷だと感じた?
俺は極力そういう言葉を避けて相手をしたつもりだけど >>401
Unityでゲーム作るのが目的なんだろ?
だったら、作って覚える系の入門書をどれか一冊こなしてみればいいと思うよ
そうすれば何が不足しているのか、もう少し具体的に自覚できるようになるから 1ヶ月も同じことをグダグダしてる馬鹿は荒らしか?そうでなければ才能ないから諦めて消えろ 入門書を読めというアドバイスには意地でも耳を傾けない初心者 他人のコードを読み解くのは自分でコードを書くよりも能力が要る
断片的なネット記事から基礎を学習するのも他言語でプログラミングに慣れてないとちょっと厳しい
まぁ、完全な初心者は定番の入門書を読めってことなんだけど、聞く気無いんだろうなぁ せめていい入門書はありますか?くらいには変わってほしい。 これでまたしばらくだんまりでほとぼりが冷めた頃に的外れな質問してくるようならダメだな 初心者には入門書「だけ」は無理だよ
環境設定とか、バージョンの組み合わせとかで動かないことが多い
その場合、初心者は解決できない
ググっても無駄だし 俺はお前が判んなくても一向に困らないし相手してやってるのは自己満足の暇つぶしでしかねーんだよ有難く思えよ?ただし理解しようとしない馬鹿の常駐だけは勘弁
がこのスレ住人の大体の本音だろう。つまり馬鹿の相手をするな 他人のコードを読むと勉強になると言うのは嘘。
情弱は、それに引っ掛かる
正しくは、他人のコードを無限に時間を浪費して読むと、
ほんの少し分かると言うだけ。
それを10年やっても、半年ぐらいの初心者に勝てない
他人のコードを読むのは、自分で書くよりも、10倍以上難しいし、
さらに悪い事に、記憶の定着率も最悪。
だから、勉強にならない
初心者は、掌田津耶乃みたいな入門書で良い
特に、ひろゆき・ホリエモンみたいなプログラミングの素人に聞かない事。
彼らは、やった事ないでしょ? AIに聞くのも無しだな
AIは平気で自信満々に大嘘を吐く
もちろん合ってる場合もあるけど、知識が無いと真偽を判断出来ない これで初心者が、Ruby on Rails を学んで転職していくのが分かるでしょ?
それ以外の言語が通用しない理由。
10年やっても、何も作れないから
大学でC をやった香具師の99%が、プログラミングはしょーもない。
何も作れないとやめていく。
Cの教師が職を失いたくないからやってるだけなのに、それにだまされているだけ
C# も同じ。初心者ができるわけない。
9割がモデラー。プログラマーなんて、ほぼいない
Rails以外で、初心者が転職できる事はない!
難しさの桁が違う
3D モデルを作って動かすんだよ。
クォータニオンとか、数学物理をやっていないと無理。
Python と同じ。文系なんて採用されないでしょ。
だから、文系のアホは皆、Railsへ行く
プログラマーはまず、Railsなどをやった後の話 C/C++も結局は環境依存の各種ライブラリを使わないと初心者では大したものは作れない
普通の授業だとファイル入出力までで終わりで
ディレクトリ操作のdirect.hなんて教えてくれる所は少ないからな 配列の話の時も、どういう理解で話してんのか皆が疑問に思ってんのに
質問するだけで疑問への説明も無くフェードアウトだったからなぁ 言われた通りやってるだけでプログラミングに対する目的意識が無いから
入社後に作らせてみてもネットのコピペとかばっかで内容理解してないんだよな
そりゃあ何も作れるわけないわ
419とかそれ系の僻みじゃねぇの?w 小学校6年くらいの段階でC#でテトリス作れたら将来有望?
最近の子供はまじでプログラミングに関しては優秀なイメージ
C#分かってる小学生10人に1人くらいはいそう 同僚の子供がC#でテトリスを応用化したゲーム作っててまじで焦ってる
テトリスなんて入社研修で作るからようは12年も先取りしてるってこった 子供が大人にプレゼンしてる番組あるじゃない
あれみたいに好きでやってると脳はバンバン吸収する
オレの脳は歴史や城の良さをプレゼンされても全然入ってこない あれ?アンカ間違った
>>421
掌田津耶乃はNGワードに入れてる >>429
テトリスってことは難めの非同期とかも理解してるってことだよな
ブロックの回転とか難しそうだしマニアックな文法も理解してそうだ
人生余裕なんだろうな 入門がてら、はじめて自作のWindowsフォームソフト(ストップウォッチ)を作りました。
今後もC#の学習を続けてもっと技術を身につけたらこのソフトも機能追加して改善していくつもりです。
そこでお聞きしたいのですが、VisualC#において、バージョン番号の管理ってできないでしょうか?
現在は、何か手を加えるたびに、アップデート記録.csファイルに変更点をコメントで記述し、メインフォームに
あるラベルコントロールのテキストを「ver.1.00」から「ver.1.01」へ等と手で書き換えています。
なんとなくの想像ですが、「いまのバージョン番号」「前バージョンからの変更点」を記録しておく仕組みが
VisualStudioかVisualC#にはあるのではないかと思うのですがいかがでしょうか?
プロの人も私と同じように手作業でやってるとは思えないのですが。 プロの人は仕様書に書かれたのを手で更新してると思うw
ソースコード自体のバージョン管理はgit
変更はこれでさかのぼれる
その他にバージョンの番号の仕組みはあるにはあるけどバージョン管理とは言うもののそれは実際何なのかと言うことになる
そこの入り口を通ってないと仕組みを知ってもあまり活用できない
ドボンと言うサイトにも書いてあるけどじゃあ理解されるのか使われるのかと言うと疑問
個人では日付管理レベルぐらいじゃないかと バージョン番号(ビルド番号)を自動設定したいなら、プロジェクトの設定でビルド時に実行できるコマンドを設定できるから
そこに「テキストファイルから数値読み込んでその数値をひとつずつ大きくして上書きする」コマンドラインツールを自作して設定しとけばいい
そしたらビルドするたびにそのツールが実行されて勝手にビルド番号が上がってく
ストップウォッチでは起動時のそのテキストファイルを読み込んで数値を表示するようにしときゃいい >>433
実行モジュールのバージョン管理とソースコードのバージョン管理がごっちゃになってるようだから
まずそこを区別して考えよう >>427
マジレスするとテトリスはもう使い古されてて
数年前にはyoutubeで1時間でテトリス作ります見たいなのが溢れてた
それを追えば普通に同じものは出来る
それは確かcだったけどC#のも探せばあるだろう
どちらかと言うとそこがスタートラインかな
まともに完成品をコピー出来ることが重要
ライブコーディングが流行ってた時期はもう過ぎてるけどゲーム制作の需要はまだ続いてる 自分が大学に入った際に実習室の脇に置いてあったDOSマシーンに先輩の作ったテトリスが入ってた
それは普通のレベルだったけどコマが6角形になった奴も作ってた
誰かの作ったものを自力で作り直したらしいけど難しすぎて全然面白くなかった
完成度は以上に高かったが独自ルールが入っててそれが余計に邪魔だった
やれる人は一度進むとどこまでも自力で突き進める
他人に頼らない テトリスが使い古されてるかどうかはそれを作れる小学生が有望かどうかには関係ないわな 事実として誰にでもテトリスはコピーはできる
その事実を知らないでそこだけを見て有望だと早とちりしたらかわいそうじゃないか 使い古されたアイデアのテトリスだろうとできたならそれはすごい
さらにきちんと配布できる形式までもっていって他人がプレイしてるなら神だよ
妄想するだけで出きる気になってるだけの奴がほとんどだからな 重要なのはコピーできるかどうかじゃなくて実際にコピーしたかどうかやろ 当人の作りたいものがテトリスならまあなんとなく理解出来るけど
今どきの小学生がテトリスを自発的に作りたいと思うかどうかは謎 テトリスの横幅を60マスぐらいにしたりなどアイデアはいろいろ出てくるはず
そこらへんがまずスタート+0.5ぐらい
自分らの世代は小学生のころからハンドアセンブルしてVRAMいじってたけどそういうのとは世界が違う
早ければ偉いと言うものでもないしマイペースでやればいい オイコラはとにかく自分の昔話自慢話をしないと気がすまないのな ゲーム作るんならリアルタイム要素の少ないパズドラとかカードゲームとかみたいな今のソシャゲ的なものを作るほうが楽だし
面白味がある
それじゃなくてテトリス
何か答えは出てるだろ? 脳を使って出てくるのがオレスゲーばっかの人よりはマシなのよ C#で初めて作ったのがISBN変換機という誰得なアプリ。
電卓のフォームにISBN13を打ち込んだらISBN10に変換してくれるだけ。 >>453
それが自分の実用ニーズを満たしていたのならテトリスより何百倍もいいと思うぞ 自分もそう思う
自分の作りたいものを作れる能力だけが必要なのでプログラムは非常にハードルが低い
配列すら使えなくても問題ないと言うか最近は旧来の配列をそのまま使ってる人は少ない >>434-436
ありがとうございました。
私の想像してるようなもの(バージョン登録フォームのような機能)はないのですね。
とりあえず今までのやり方を続け、上級者の方法を知ることができればそれをマネすることとします。 >>457
ぴったり自分の知りたかったことでした!ありがとうございます!! class A : B { }
public Fuga( List<B> hogeList ) { }
で
List<A> hogeList = new();
Fuga( hogeList );
と呼び出そうとすると型が変換できないコンパイルエラーになるんですが、何故?
Fugaの中ではクラスBの値しか使わないです Fugaが内部でこういうことやるかもしれないじゃん?
hogeList.Add(new C());
// class C : B {}
Fugaが読み取りしかしないならIReadOnlyList<B>を使うという方法がある >>460
なるほど、確かに。
ありがとうございました。 >>459
public Fuga<T>(List<T> hogeList) where T : B {}
こうするとか なぜ基底クラスの方を使う
基底クラスの操作は基底クラスに書きやがれ 件の関数が派生クラスに書かれているかどうか明記されてないし OpenCVSharpを使い始めたんだが思いの他情報が少なくてつらいな
chatGPTを叱り付けながらpythonのコードから変換してる
コードが正しいんだか判らないからpythonてうんこ環境も結局入れる羽目になってる
うんこー OpenCVSharpてのがラッパーとして定番なら使いやすくできてるのだろう
昔同様にopenCLラッパーを使ったが、良く出来てるなと思った(オレには作れん)
CPUとGPUに同じソース書けて、同時に全開で使うのは脳汁でたわ pythnから置き換える中でしばらくこの行が何をしてるのか意味不明だったのだが
avg = gray.copy().astype("float")
C#ではこういうことらしい
avg = gray.Clone();
avg.ConvertTo(avg, MatType.CV_32F);
この辺りいくらぐぐっても全く出てこないのでC#でOpenCV始めようとする俺みたいな馬鹿は参考にするように どうやらOpenCVではMatがCOMで言うVARIANTみたいな全知全能型らしい
つまりCOMみたいな泥臭い動的型変換を割と頻繁にやらされるうんこライブラリみたいね OpenCVを語りたいならC++の方からアプローチして何を考えて作られたのか理解したほうがいい
pythonだと曖昧で魔法的に見えるだけ
Matも納得できるだろう
何が必要とされてそのようになったのか理解も進むと思う
そして二度と上のようなカキコはしなくなると思われる 入門者にこんなことを言ってもい意味がないけど
高級言語でしか考えられなくなると
単純なメモリ構造やアセンブラレベルでの高速動作へのノウハウなどへの理解が低下する
何が要求されているかの思いが至らず狭い世界での物差しで全てを測ろうとしてしまう
それが絶対的に悪いと言うことではないがこれから世界を知ろうとするなら人間的に損だと思う 不要だとは言ってないよ?
ピンボケだと言ってるだけ >>470-471
損得の観点が違うな
OpenCVでpython(以降うんこ)が使われてるのはOpenCV自体が十分速いからだな
でうんこ使ってるやつはOpenCVの中で何が起きてるかなんてどうでもいい
俺がC#でやり始めた理由はうんこを入れる必要が無くて孤立したうんこよりもWindowsではだいぶ楽できるなと踏んだからだ
まあ検証のために一時的にうんこ入れたけど慣れたらうんこなんて不要になると考えてる
ああ、C++には一切興味無いから本スレで存分に語りなよ 5年くらい前にOpenCVSharpを使ったけど、使いやすかったな。
WEBカメラの動画表示とキャプチャくらいしかしてないけど。 >>476
公式サポートがうんこみたいなラインナップなのは知ってる
そしてここはC#スレね >>479
初心者ワードは荒れる元だから空気読んでわざわざ避けてた俺の気遣いを無駄にしたな
過去ログでも読んで反省してこい >>480
なにこの俺ルール
気遣い(笑)
じゃあ最初からこのスレに来るな そう、C#スレかつ初心者スレ、OpenCVスレではない 自治中うざ
opencv/pyathonならスレチだけど
opencv/c#なら別にいいだろ。opencvネタでスレ埋まる勢いならどっか行けって感じだけどさ openCVの元になったSPIDERのver1はVAX FORTRANで実装されている。
そこまで戻る?😅 > OpenCVSharpを使い始めたんだが思いの他情報が少なくてつらいな
> chatGPTを叱り付けながらpythonのコードから変換してる
このあたりから加齢臭がするから初心者でも知ったような口を利くジジイなんだろうなw ちょこっとExcelのファイル読むためにCloseXml入れたら
exeフォルダにアホみたいにdll置かれて吐きそうになった Excelのファイルとか、Zip解凍して中見ればよくね ナイトライダーみたいなプログレスバーってどうやって作るの? こういうアニメーションに凝りだすと夢中になって本業を忘れる わたしも画像編集でPhotoShopに凝りだすと夢中になって本業を忘れる >>497
こだわって時間掛けた物ほどユーザから邪魔とかもっとスッキリさせてと言われるんだよねw 注文内容の9割が見た目だからデザインに凝るのは悪いことではない
ただしデザインセンスとプログラミングの技量は別物、両方持ってる人はごくわずか
例えば警告にColors.RedやMessageBoxを使っちゃう人は絶望的に足りてないので、素直にコンポーネント屋から買ってきた方がいい 凝ってみるのはアルアルだろ
(パパッと仕上げてしまう人とか特に)
凝っても時間のムダだなとやってみてわかることもある プログレスバーの話題って最近別のとこでも見た気がするな
長時間掛かる事が予測可能な処理で使う分には便利には違いないから
パーセンテージやタスク数で進捗視認できる手段は用意した方がいいだろうね
ナイトライダーは俺や客を怒らせるぐらいの効果しか期待できないから注意した方がいい 0%...1%...のまま長時間待たされていきなり99%になるやつか 「デザイン」という言葉を「外観や視覚要素を指す表現」として用いるおじさん 「プログレスバーの進捗を正確にしてくれ」というオーダーは良く聞くな 俺が遊んでたソシャゲのアップデートはパーセンテージで小数点第二位まで出して糞でかいアップデートでもちびちび進んで判りやすかったから
多少速度を犠牲にしても1万ぐらいの解像度で進捗出てくれば良い感じに見えるんじゃねえかな >>506
「一番遅く計測した値をちょっとかさ増しして、普通にすすめるか。時間足りなかったらフリーズしたことにして、再起動させることにしよ」 MSの場合100%超えても続いてるのが頭にくる
100% = 終わってると思うんだけど 話をもどそう
昔いくつか論文を読んだけど単純に活用できそうな例はあまりなかった
プログレスバーの進捗状況は時間とは限らないので
ファイル読み込みながら処理してる場合はファイルの読み込んだ位置で出してる(MSもこの方式なのかもなあ…)
データの内容で処理時間に偏りがある場合は時間と捉えてる人はイライラするんだろう
でも完全に予測不能だから仕方がない こっちの本音はナイトライダーにしてスピード上げる方に力を入れたいだわな パターンがある場合はデータをもってヒューリスティックに%出すことも出来るけど
まあその場合も完全ではないので最終的にかなりずれてたら利用者も不満に思うわな 「ヒュンヒュン」いうサウンドファイルまでつけて配布バイナリのサイズアップもしておきました。 追跡モードボタンを用意した上で、それを押した時に流す動画も同梱しておこう
以後文句が出ることもなくなるはず ちょっと話ずれるけど、
画面からの登録処理を非同期にしてあるけどその間その画面で他に操作するような用途ない
とかありがち
頑張って進捗報告しても終わったその後は画面閉じるだけならあんまり意味ないよなぁ 待っている間にその画面でミニゲームができるようにしておけ。 登録処理程度なら進捗報告頑張らずにナイトライダーで動いてますよアピールしておけば事足りるだろう >>466
chatGPTは
OpenCVSharpで描かれたサンプルと
Pythonのcv2とかで描かれたサンプルと
C++で描かれたサンプルを
それぞれ区別出来ていると思うか? >>468
avg.ConvertTo(avg, MatType.CV_32F); ← これは OpenCV の関数だが
gray.copy().astype("float") ← これは OpenCV ではなく numpy の機能を利用してるはずで高速でもある
もちろんデータの中身は相互に使える前提でやってる >>469
COM は泥臭いけど cvMat はスマートだ c#でxamlの画面を作るときに
cs側の定数を埋め込みたい時ってどうしたらいいですか
例えば
static public class constdata{
public const string hoge_string="hoge.png";
}
と言う定数を作ったときに
xaml側で
<Image Source="hoge.png" />
のhoge.pngをconstdata.hoge_string にしたいとき
後ついでなのですが
定数にするときって
public const string hoge_string="hoge.png";
public static string hoge_string="hoge.png";
のどっちが正しいのでしょう 定数は上
下は定数じゃなくて静的変数
しかもreadonlyついてないから中身変わる staticプロパティは、そのクラスの名前空間をxmlns:hoge="..."で定義してるとして
<Image Source="{x:Static hoge:constdata.hoge_string}"/>
という風に参照できるが、フィールドとかconstとかはどうだったかな…。 constも hoge:[クラス名].[const名] で参照できたはず >>526-528
ありがとうございます。
上手く行きました
"{x:Static hoge:constdata.hoge_string}"
こういう書式ってどこで勉強したらいいのでしょう 「xaml static」でググるだけでも↓とか見つかるよ
https://learn.microsoft.com/ja-jp/dotnet/desktop/xaml-services/xstatic-markup-extension
https://shuhelohelo.hatenablog.com/entry/2019/11/29/001200
https://www.nuits.jp/entry/xaml-static-binding
(すまんがスラッシュは半角に変換してくれ……) constはコンパイル時解決
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある constはコンパイル時解決
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある constはコンパイル時解決
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある 排他制御のlock()の中って適当なobject型いれていいんですかね
この理屈がいまいち分かりません、おまじないみたいな認識でおkですか? 何も判ってないみたいだしマルチスレッド入門サイト的な所か本を一通り読んだ方がいいよ
プラットフォーム毎に少しやり方が違うだけだからC#に限らない >>535
入り口で番号提示して入場しようとすると番号当り一人しか入れない仕組み
objectのアドレスが番号になってるぐらいに考えて… おまじないはあるよ
絶対はいらないエラー検査ロジックを書いておくと
修正でミスってもバグらないことがある そういうロジックにハイルだけ
ぉ前の知らんとこで入っでるだ ListboxでCtrl+C押すとCから始まる要素に選択が移るの無効化する方法はありますか?
というかCtrl+任意のアルファベットでそれから始まる要素を順番で選択していくよくわからない仕様 ごめんなさい初心者スレで聞けみたいなのが合ったのでこっちにも質問しました
解決したんですけどもう一つ疑問があってビルドしたときに〇〇.exe.configってファイルができるんですけどこれに個人情報などは含まれたりしないですかね。
publicKeyTokenとか書いてあるんですけど他人に見られても問題ないようなものですか? >>546
脳みその量が足りない人はプログラミングとかしない方が良いと思うよ lockについての質問したやつです
おまじないでないことは漸く理解できました
次なんですが
lockによって排他制御されるものは変数だけですか?
ファイルへのアクセスも排他制御したいです
例えばスレッド2つ走らせてA.txtを同時に読み込もうとしたときに
どっちかのスレッドがリジェクトされたら成功ってな感じにしたいです
どうやって状況つくります? ほれ
using System;
using System.IO;
using System.Threading;
class Program {
static void ReadFile(string filename) {
int threadId = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine($"Thread {threadId} is reading {filename}");
lock (filename) {
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read)) {
using (StreamReader reader = new StreamReader(fs)) {
string data = reader.ReadToEnd();
Console.WriteLine($"Thread {threadId} read: {data}");
}
}
}
}
static void Main() {
string filename = "A.txt";
Thread thread1 = new Thread(() => ReadFile(filename));
Thread thread2 = new Thread(() => ReadFile(filename));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
}
} 聞く方も答える方も馬鹿
ファイルはそもそも排他機能があるだろ おまじないでは無いことが理解できたとしても、結局lockがどういう機能かは全然理解してない感じやな
ファイルアクセスを排他制御したいなら↓使っとけ
FileShare.None指定すれば完全排他だ
File.Open(string path, FileMode mode, FileAccess access FileShare share)
File.Openをnew FileStreamにしても一緒 1つのプログラムの複数スレッドで同時に1つのファイルを読み込もうとしてる理由や状況によってどういうアーキテクチャがいいかは変わる そもそも「1つのプログラムの複数スレッドで同時に1つのファイルを読み込もうとしてる」かどうかわからんのだが 例えばじゃなくて実際どう作ってるのか言ってくれないとなぁ > 例えばスレッド2つ走らせてA.txtを同時に読み込もうとしたときに
額面通りに受け取れば「1つのプログラムの複数スレッドで同時に1つのファイルを読み込もうとしてる」
まあ本当に解決したい問題と書いてる内容が合ってるとは限らないけどね ファイル読む分には同時だろうが関係ないよな?
ライブラリがリエントラントになってればだけどw ファイルの内容を1度しか処理したくない
みたいな別の理由があるんじゃね? 希望の通りに実装したら、同時に読み込もうとしたら後の方は先の読込み結果を返すになる。甘々に希望を読めば。
だけれども、同時でなくて後からもう一回呼んだ場合にはもう一度ファイルを読み込むんだよな。
>>561の通りに一度しか読み込みたくないのかもしれず、後から呼んだ場合には前の結果を
残しておいてそれを使うのがいいケースもあるが、それだとメモリを食い続けるという問題も
あるので、何をしたいか次第だ。 同一プロセス別スレッドで同一ファイルへのアクセスを排他制御したいなら
lockブロックの中にファイル処理入れるしかないんじゃね? >>550に対して>>551みたいな反応するようじゃ、危なすぎてまだ早いって言いたくなるけど まあ普通はファイル自体はロックしないで
レコードロックじゃね 550は全く実用的ではないけどまあそのうち気が付くんだろうな・・・ 俺ならファイルを読み込むスレッドを一つにして、ひたすらqueueなどに積んで
処理用のたくさんのスレッドでそれを個別に読み込み処理なんて考えるな
ファイル読み込み部分を並列処理してもトラブルが出るだけでろくなことにならない 一応書いておくけど~
文字列でlockするのは全くおすすめできない
なぜならデッドロックの恐れがあるから
それとパスを使うなんて論外だな 一体いつから正解が貼られると錯覚していた?と続けようとしたら眠くなっただけだからね
あー釣れた釣れた やりたいのは
計算結果をテキストに書くってのがやりたいです。
A,Bスレッドがそれぞれ計算します。
KeisanKekka.txt
↓↓
KeisanKEKKAA
KeisanKeKKAB
順番が逆になるってのはダメです。なのでファイル排他必要です。 >>573
書き込み順番
これはダメ
KeisanKeKKAB
KeisanKEKKAA >>572
>>574
正確に説明をする能力を身に着けなさい
・「テキストに書く」とはどこに書くのか。
・書き込み順番が末尾B、末尾Aではダメなのは何故なのか。 順番ってスレッドが開始した早い方が先に書き込むのか?
それともどちらもが出した計算結果の昇順に書き込むのか?
もし後者なら書込みプロセスは1つにするだけ
前者なら計算終わるの待つだけ ・ファイルの書き込み自体は並列化出来ない
・計算に比べてファイル書き込みが圧倒的に遅い
・ファイルの排他処理自体も少しではあるが時間がかかる
ってことなので、素直にシングルスレッドで処理した方がいい
どうしても並行処理をやってみたいのなら、ファイル書き込みと計算の2つのスレッドで並行処理をしてみるべきかな
そうするとファイルI/O街のタイミングで計算できるから物凄く微妙に速度が上がるかもしれない てか計算結果でソートするなら
処理分けてオペレーションで対応すりゃよくね?
無理やりプログラムでやるもんでもないでしょ
プログラムはなるべくシンプルがいいよ >>576
テキストファイルの終わりに書きます。
追加するイメージです。 >>580
排他制御だと先着順にしかならないけど
スレッドがA,Bの順番で計算が終わってファイルに書こうとする保証はあるの
それが保証されるなら、ファイルの排他機能を使うより、lockを使うのがシンプルで良いと思う >>581
Aが書き終わったことが見てわかる変数を作っておくことで対応します。 そもそも同一ファイルを複数スレッドで読み書きするのは公立が良くない
私立にしなさい 伝え方が悪くてどうもすいませんでした
冷静に考えたら変数使えば排他制御いらないじゃんって思えてきた
何を聴講してんだか 排他制御順序制御をスレッドAB間で直接行えばいい話でファイルアクセスどうこうは関係ないってことだろう スレが伸びてると思ったら
複数スレッドで変数…
フラグが立った気もする
大学に聴講生いたな
おばちゃんだったけど新しいことを学ぼうとする姿勢が偉い スレッド起こした順に書込みも順にしたいの?
起こしたときに番号振ってファイルAにみな書込みするようにして
書き込む結果は振り番と結果書き込ませて
そのファイルAを監視して順番に書き出すスレッドなりで
目的のファイル作れば? 聴講って何かの誤変換かと思ってたけど
聴講生だったのか
道理で >>588
順番はAが書き込んでBが書き込む
Bが早く終わろうがAが書き込みした後しか書き込み無理ってことです。
もうひとつの厄介ありました。
Aが書き込み終わったよっていうフラグを立てる時間
Aが書き込んだ時間
にタイムラグある場合どうしよう。
もちろんAが書き込みする関数呼んだあとにフラグ立てるんだけど
フラグ立てたときってほんとに書き込み終了してる?って話です。 今後の質問者には先にChatGPTである程度やり取りしてもらって
それでもわかんなかった所だけ聞きに来てもらうほうが
お互い幸せになれる気がする それ以前に、もう少し、こう、コミュニケーションというものを考えて、せめて一度くらいは推敲してから書き込んでもらえるとお互いに幸せかもね。
要件としてはこんなところなんだろうか。
・何らかの処理を行うためにスレッドを起動する。
・その処理(スレッド)は複数ある可能性がある。
・その処理の結果を一定の規則でファイルに出力する。
自分だったら、メインスレッド(処理用のスレッドを立ち上げる側)に処理スレッドの結果を返すようにして、処理スレッドがすべて終わった後にメインスレッドで規則に従ったファイル出力を行うように作るけど。 Win32APIで非同期書き込み
・CreateFile() FILE_SHARE_WRITE FILE_FLAG_OVERLAPPED
・AのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighに指定する書き込み開始位置に、
現在のファイルサイズを指定(後述するが0xFFFFFFFFでの追記は避けること)
・BのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighにBで渡したファイルサイズ+Aで書き込むサイズ
WriteFile()は指定サイズ全てを1回で書き込めるとは限らないので、書き込んだサイズ分
OffsetとOffsetHighをずらしながら残りをWriteFile()する。
位置をずらして指定していくのとBの分を並列で書き込むので0xFFFFFFFFでの追記を行ってはならない。
書き込んだサイズは
・GetOverlappedResult()で調べる(呼ぶタイミングが分からない)
・WriteFileEx()でlpCompletionRoutineを指定する(完了ルーチンでWriteFileEx()を繰り返すとスタックが溢れる恐れあり)
・IOCP
・スレッドプールI/O
のいずれかを使う。
C#で同等のことを行う方法は知らん。 訂正:Bで渡したファイルサイズ→Aで渡したファイルサイズ 古典的な方法は
書き込む前に「書き込み中だよ」というファイルを作って
おもむろに書き込んで終わったらファイルを消去する
他のプロセスは「書き込み中だよ」ファイルがないことを
確認してから「書き込み中だよ」ファイルを作る
あるいはDBに任せるかな 書き込む前に配列作るだけな気もするけど
まぁ書き込みたいならしゃーない >>590
static async Task Main(string[] args)
{
var taskA = Task.Run(()=> CalcA());
var taskB = Task.Run(()=> CalcB());
var resultA = await taskA;
await Save(resultA);
var resultB = await taskB;
await Save(resultB);
}
これを一般化してtaskをListに追加していって
Listを回して計算結果をawaitしながら直列で書き込めばいい 馬鹿は馬鹿だから設計も実装もできない
馬鹿の考え休むに似たりとはこのこと
こんな馬鹿はシングルスレッドにしとけよ >>596
>>おもむろに書き込んで終わったらファイルを消去する
書き込んで終わったことをどうやって判断するんですか? >>600
駆動したプログラムが自分で消去する
パスワードファイルの編集とかそうやっている >>596
マルチスレッド向きの方法じゃない
動くけど面倒なだけ >>596
その手順ではアトミック性が損なわれるから正常に機能しない
プロセスが最初にやるべきは盲目的に「書き込み中だよ」ファイルを作ろうとする事
ファイルを所有できたかはファイルの作成の成否で判定する…つまりこんな馬鹿なことは今すぐ辞めるべき それぞれのスレッドが各々でファイルを書かなきゃいけない理由がなんかあるんかな?
そうじゃないならそれぞれの計算結果を親スレッドが受け取って
親スレッドがまとめて書き込めばいいんじゃないかなぁ >>604
俺ならこれ
場合によってはスレッドの意味が薄くなるけど、設計としては明白になりやすそう
もしくは各スレッドの結果?の書込処理について統合して管理するクラスを作る
順序を定義しといてキューに溜めとく感じ linuxのパスワード書き換えプログラム vipw
がファイルを生成して排他制御をしているのだが
問題があったという話を聞いたことがないけど Aが書きこまないとBが書き込めない?
Aが新規ファイルに書き込んで
Bがそれ見つけてから書き込むようにしろ >>607
ロックファイルを用いた排他制御の手法をちょっと間違えて覚えてるな
> 「書き込み中だよ」ファイルがないことを確認してから
って部分が無意味
確認後にファイルを生成するまでの間に他のプロセスがファイルを生成するかもしれない >親スレッドがまとめて書き込めばいいんじゃないかなぁ
“まとめて”の意味合いにもよるけどAの書き込み処理はBの計算結果を待たずに開始できる点に留意する必要がある >>611
待たずに開始できるであって待たずに開始しなければいけないではないし
A・Bそれぞれの完了を待ってはいけない理由でもあるんか? あと、待ってるのはあくまで親であって、AとBの計算はパラで進めてくれて一向にかまわん
話の内容からして、Aの結果をもとにBが計算するわけでも無いだろうし こういう複雑さを考えるとRDBってよく出来てるなあ AとBを同列に考えるからだめなんだ
Aが終わらないとBが結局終われないのだったら
BがAの親になればいいんだw >>572がいち早く嗅ぎつけたように、質問者は真の目的に対して無自覚に不適切な実現手段を選定している(それ故に、不適切な実現手段における実装上の課題、つまり二次的な課題を相談するハメなってる)
C#での実装手続きを検討する前段に立ち戻ることをオススメする 一番の問題は、処理時間の大半を占めるだろうファイルの書き込み自体が並立処理ができないし
オープン、書き込み、クローズ等の回数が増大して処理時間が遅くなることだな
もちろんスレッドの切り替えや排他制御や順序の制御など色々仕事が増えるし、この部分も並列処理できない
マルチスレッドの練習ならいいけど、実用ソフトの作成ならシングルスレッドで書いたほうが遥かに早いものができる もう完全にスレチになんだけど。
>>620 みたいな決めつけってどうなんだろう。
素人がわざわざスレッドなんて言い出してるんだから、質問者が説明できていないだけでスレッドが必要な背景があるのかもしれない、と考えてあげてもよさそう。
自分も質問スレ等を利用したことがあるけど、意図して説明を省略したところの説明を強要されたり決めつけられたりすると、う~んと思うこともあったからね。
まあきちんと説明できない側が悪いのだけど。
言い訳的には誰にでもきちんと理解させられるほど状況を整理できてるなら、質問スレに頼る必要はほぼないかもしれない、とか。 別にいいけど、しっかりと要点を説明できなきゃ、的外れな助言をされても文句は言えないからねぇ そもそもでいうなら、順番を待たなきゃいけない設計を見直さんとね
決まった順番で同じファイルに書き込まなきゃ理由がわからんからね
中のファイルが構造的でなきゃいけない場合、単純に順番に書込むだけでそれが担保出来てるのか、とか
例えばよくあるデータ形式にしても、
CSVならあまり順番意識しないから追記ってのもあるだろうけど、jsonで追記とかまあ自分は聞かないし
目の前の要求が満たせていればいい、っていうのも分からなくはないが
そこら辺の前提がないと最善などわからんよね >>620
>>594に書いたけど、ファイル書き込みの並列処理は可能だ。
面倒な上に書き込みサイズが小さいとすぐ終わるから並列処理するうまみがないが。
実用性を考えると根本的にやることを見直すべきなのは同意だ。 >>626
別スレッドで細切れに書き込みするのはできるけど
複数スレッドで並列で同時にファイルに書いたら壊れるでしょ >>622
まあそうだね。
回答者の側にも自分の答えられる範囲に無理矢理誘導しようとしてる節があるのも気になるけど。 決まった順番で同じファイルに書き込みたい状況やファイル書き込みより計算処理の方が遥かに時間がかかる状況なんていくらでもあるでしょ
処理速度向上のために並列化した計算結果を直列化するのはmap/reduceと同じで並列処理の基本パターンだと思うが
その際にメモリ効率や後続処理の都合でファイルに書き出しながらreduce相当の集約処理をするのもよくあるやり方 ついでに言うと真の目的を自覚してそれを他人に誤解なく伝えられるように言語化できる人間ってのはそうそういない
自分の言いたいことを相手に伝えようとする努力はもう少ししろよとは思うが真の目的を言語化すること初心者に求めるのは酷 >>598で(細かい所は端折られてるが)質問者の要望を満たしたほぼ完璧な回答が出てるのに何の議論をしてるんだろうか
>>620
マルチスレッド何だから、オープンしたファイルクラスオブジェクトを共有すれば良いだけ
各スレッドでファイルのオープンとクローズをやる必要は無い >>628
壊れないよ。
追記でなく他のスレッドが書き込むサイズを把握して書き込み開始位置(現在のファイルサイズよりも先)
をちゃんと指定すれば大丈夫。
FILE_SHARE_WRITE指定だから複数スレッド同時に書き込めるし、
なんなら複数プロセスでも書き込める。 >>632
初心者というか熟練者でもというか、それを不足なく出来ている人はあんまりいないような。
少なくともここで議論()してる連中は全滅だね。 >>634
資源を複数のTHREADでShareしているだけで並列処理とは違うよね
同時に書けるのは一つのポイントだけだからCPUが増えても速度が2倍4倍とかにならない >>636
並列処理だよ。
ファイルポインタの場所に対して書き込んでるのではなく、
OVERLAPPED構造体で指定した位置からそれぞれのスレッドが非同期で同時に書き込む。 .NETのソース隅から隅までは読んでないけど、FileStreamの内部でoverlapped構造体使用してたような記憶 その認識で合ってるよ
.NET4以降ならメモリマップドファイル使えるからそちらで共有するけど ファイルはシーケンシャルで書くのが一番効率が良い
順番に並べる必要があるなら後でソートできるようにレコードをきちんと設計しておけば問題は起こらない
上でされてるいくつあるかも判らないスレッドごとに開始位置をシークして…なんて主張は馬鹿の発想 ちゃんと設計しないと逆にパフォーマンス落ちるぞって、当のMSがWriteFileのドキュメントで言ってるからね 妄想だけど、HDD、SSDよりも異次元レベルで速いストレージの時代になったら
それも変わってくるんかなとか思ったり
十年とかでそうなることはないやろけど 確かにハードの進化がソフトを凌駕するからなぁ
windowsも出た頃は二世代後くらいのハードを想定して作ったとか後付で言ってたかな、遅くて使い物にならなかったよな最初の頃は(笑) >>647
3.0からだな
95β見た(入れた)瞬間は窓から投げ捨ててやろうかと思ったわ
巷の公式販売では祭りだったし買ったけどw まともに触ったWindowsは95からだなぁ
伯父さんの家に3.1あったけど、ちょっとゲーム触らせてもらった程度だし 3日くらいぶっ続けでカンファレンスやってるみたいだけど英語わからんからやめとこ… 4.8.1は.NET Frameworkであって.NETじゃないが そろそろ.NETの頭のドット消して欲しい
色々紛らわしかったりめんどい 頭のドットもだが、もうちょっと固有な名前を付けてほしいよな
検索時のS/N比が… >>652
英語分からんってヤバくね
IT業界で1番必要なスキルだと思うが? SilverLight<よっしゃ
XNA<固有な名前なら任せろ >>658
Don't worry.
My English skills are much better than yours. Waimo eigo tyoto Dekiruyo !! Windowsで.net5以上でshift-jis使うのに
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
この1行いるのは知ってます
System.Text.Encoding.CodePagesを参照する必要があると書いてあるところと
いらないしいると書いてあるのは間違いだと書いてあるところがあったので
どちらが正しいのでしょうか? .NET Core 3.0か3.1あたりで本体に入ったから今はもういらない >>662
Kono Hage!!
If you have no hair at all, shut up and get out of here. SJISのためにRegisterProviderするのに何かアセンブリ参照追加する必要は無いね >>665
この辺にしとこうぜベイビー。
C#ラブな同士トゥギャザーで仲良くしようぜ。 Windowsに限らず、AndroidやiOSやLinuxなどほとんどのOSで、
ファイル名に使って想定外の動作をしない記号って、アンダーバー「_」くらいでしょうか?
アンダーバーでも誤動作するOSってあります? そめそもファイル名に使える記号自体が、ハイフンかアンダーバーくらいじゃ ファイル名 禁止文字でググれば使えない文字がわかるので
それ以外なら使えるってことだ
mac や linuxはwindowsで使えるやつはOKのようだ SwiftLint使ってると、大文字や小文字で始まるか、キャメル式かスネーク式かいちいち文句付けてうざいぞぉw >>670
ハイフンはMS-DOSがNGだから、ちょっと怖いかなと コンピュータ名はアンスコ使えなくてハイフンは使える謎 _で始まるファイル名だとコンパイル出来ない言語は観た覚えがある 半角括弧()がどのOSでも使えるって出てきましたけど、本当でしょうか? >>679
キミが「どのOSでも」「使う」という表現に込めた意味を、それぞれ詳しく教えて ボーダーラインを探すなんて無駄なことしてないで、
自分が対象にするOSで使える文字だけ使っときなよ、と思いました
暇ならとことん網羅して論文でも書いていてくれ 割と知られていないけど、cr,lfなどの制御文字もファイル名に使えたりするね
explorerじゃ対応していないからアプリ作る必要があるが 条件文がめんどくさい
x>=a かつ x<=b を
if( a <= x <= b )
って書ける言語ないですか? 関数の返り値を比較するときに2回書けないから一旦値で受ける、
なんて必要がなくなるから無いよりはある方がいいな。 if(( a <= x )&(x <= b ))
でいいよ 最近のパターンマッチングを使って
if (x is >=a and <=b)
と書いてもいい boolでも無いのにifの条件だけで使ってしかも範囲判定条件の戻り値とかあるんか task1〜3までをUIスレッドで開始して、それからは
task1→task2→task3→task1みたいに自分の処理が終われば
別taskに処理を移すみたいな感じのソースコードを作りたいです。
処理はすぐ終わる計算でいいです。どうしますか?
ちなみに処理が終わったことがわかる変数などを使うってのは無しにしたいです。 >>696
>>自分の処理が終われば
「自分の処理」とは? そもそも、タスクとスレッドの関係をどういうもんだと思ってるんだか・・・・ 使ったことないけど、Task.ContinueWith() >>698
ごめんなさい誤解ありました。
task1→処理1
↓
task2→処理2
処理1と処理2とかは並列処理です
順繰りというのは難しいのではって感じです。 task1→処理1
↓
task2→処理2
↓
task3→処理3
↓
task1→処理1の2回目
処理1の2回目がミソです
処理1の2回目と処理1も並列になっててほしいんです
ちょっぴり無茶なプロセスですかね? コルーチンのことかな
一定の処理まで終わらせたら明示的な命令によって他のタスクに切り替えて行くやり方
C#的にはIEnumerator<T>型を返すやつね
コルーチン自体はスレッドに依存しないので必ずしも複数スレッドで非同期処理をやるというわけでもなく
同期的に書けば排他制御が不要になる //また同じやつだな
await 日本語を整理しろ();
回答はそれからだ(); >>704
特にやりたいことはないですよ
開始の時間printfしてみたら
処理1
処理2
処理3
処理1の2回目
処理2の2回目
ってなってればいいんですよ >>708
特に作りたいものがないんですが思いついたのは
並列処理だと時間短くならね?ですね 並列関係にあるタスク同士を「矢印」で接続してしまう珍妙なセンスの持ち主 >>709
今のお前がやってもかえってパフォーマンス悪くなるだろうな task1〜3までをUIスレッドで開始して、それからは
ここ違いますね、UIスレッドで起動するのはtask1
task1を起動してからは上に書いたとおりです。
後だしではないんでそこは分かってほしい。 ボール1から三つ投げて
どのボールが先に落ちてもいい
全部地面に落ちたら
また1から投げるってことだろ それだと処理が終わっでない
終わってから都賀のタスクなんだから
3人いる
長男が投げる、落ちるのを確認したら
次男が投げる、落ちるのを確認したら
三男がなげる、落ちたらサイクル終わり
また最初に戻る
じゃね? 「後出しではない」と「後出しを自覚できていない」は別の概念 >>716
伝わってませんね
落ちるのを確認ではなく投げるのを確認ですかね
長男が次男に投げたからお前も投げろよって声掛けする感じです それ単純に順次Task.Run()していくだけじゃん はぁはぁ
716でいうと三男が投げ出すと長男も2回目を投げろと(長男の1回目は終わってないかもしれない >>719
書いて貰えると嬉しいです
Task1をもう一回呼ぶなんてできます?
1回目はUIスレッドから
2回目はTask3スレッドからです >>719 の言う通り、順次Task.Run()すればキューに積まれて順に取り出されて
スレッドプールで実行されるんじゃね。
但し、>>707 で積んだ順番でprintfされることを期待しているようだが、
各Taskが並列実行されるので、Task開始順とprintfの順番が一致する保証はない。 >>719 じゃないけど、自分で書けない理由を答えろ。
Task1をもう一回呼べない理由を答えろ。
書いてコンパイルして動かせ。 Taskの理解間違ってました
Taskってのは関数みたく何度も呼べるもんなんですね知らなかった そもそも特に作りたい物も無いのに考えるのがナンセンス Taskの理解もスレッドの理解もできてなさそう
スレッドだって実体はただの関数で何度でも同じ内容を開始できるが Taskはスレッドプールを使いやすくしたものだしね
※LongRunningオプションをつけてTaskを生成した場合は専用のスレッド 基礎の理解を大きく欠くメチャクチャな質問に対して、わからないのに答えるメチャクチャな回答者が大勢出てくる・・・・
知恵袋のことを笑えんな スレッドとタスクとプロセスの違いをしっかり説明出来る奴は少ない アプリケーションドメインは滅びの道?
JavaのVirtual Threadが気になる。 TASK1〜3をそれぞれキュー1〜3にどんどん入れていって、
そのキューから同期的にタスク1−3を取り出せばいんじゃね
つか
>ちなみに処理が終わったことがわかる変数などを使うってのは無しにしたい
とかいう条件はなぜに必要なのか
その条件だとタスクではほぼ何もできないわけだが TASK1〜3をそれぞれキュー1〜3にどんどん入れていって、
そのキューから同期的にタスク1−3を取り出せばいんじゃね
つか
>ちなみに処理が終わったことがわかる変数などを使うってのは無しにしたい
とかいう条件はなぜに必要なのか
その条件だとタスクではほぼ何もできないわけだが すみません、単刀直入にお尋ねしたいのですが
配列の各要素に入れらた構造体、ないしはクラスがあるとして
その中でそいつらが「自分の現在の添字を確認する」方法ってありますか?
配列の何番目に入っているのかってのを確認したいです。
例えば、自分の現在の添え字を返す関数とかあると嬉しいのですが。
調べてみても、ある値を要素から探してその添字を求めるーみたいなのはあっても
ストレートに自分の今の添字を返すーとかは無いのです。 そんなにあれこれ言語知らないけど
配列の内側から自分のIndexを取得できるような言語存在したっけ >>739
なんで無いんでしょうかね。。需要ある気がしますが。。
調べたい場合簡単なコードで解決するからでしょうか?
配列に入ってる側から自分の添え字を調べる方法ってありますか? 親オブジェクトを子オブジェクトのプロパティ等に保存して必要な時にIndexOfで取得する あえて理由付けするなら、最近の言語では配列をコレクションとして考える傾向が強くインデックスを意識しないようになってきている
リストや連想配列ではインデックスは抽象化されているので直接操作するのを避けるようにするので需要が低い
実際for each文ではインデックスを意識しないだろ >>741
ない理由は簡単だよ
主な理由は無駄だから
任意の要素は複数のコレクションに入れられるし一つのコレクションに複数入れることが出来るから
要素側で添え字を持つ場合にはそれを区別することになる
そしたら親クラスと添え字のペアは何で保存する?dictionary?独自の保存クラスのインスタンス?
要素数だけ保存インスタンス作るの?と言う話になる 無くて不便だなと感じるなら一度作ってみたらいいよ
それが使いやすいなら使えばいいしそれに対して他の誰も文句を言わない 配列中のIndexが重要なら固定で作れ
固定が嫌だと言うなら自分のIndexを気にしなきゃいけないような作りにするな 今回は1度の質問で相手に伝わる日本語になっているので合格!!
初心者あるあるの質問だしね コレクションの要素の添え字をコレクションで持つ
その要素の添え字をコレクションで持つ
そのまた…
と永遠に終わらない どんな手段であろうともきちんと動けばいいんじゃね?(適当 9月から配列配列と言い続けているのに驚く
まだやってんのかよ 彼は作品を作ってるんじゃない
ただ配列と格闘してるだけや 配列たのしいよねでんちゃ!でんちゃ!
こうですかね 自分でプログラムしてるならわかる
必要ならパラメータで渡す
そんなものいらんよ ディクショナリで似たようなことした気がする(うろ覚え) >>738
配列aの3番目と配列bの1番目と配列cの99番目と変数dが全部おなじインスタンスだったらどうするんだよ? 1億円と2千円前から愛してるー
8千円過ぎた頃からもっと恋しくなあった そもそも配列自体は同じクラスや構造体の繰り返しやろ
そこにクラスAさんいまどの添字にいまかーって聞いても、添字分の回答が来るだけやねわら 非同期処理は自分も全然理解出来てないな…
分かりやすい記事や書籍あったら教えてほしい >>738
TreeNodeみたいにparentでもつけたclassでも作って配列に突っ込んでIndexOfで調べろ
順番固定なら配列に突っ込まれるときにindexつけろ それこそTreeNodeCollectionとかDataColumnCollectionみたいに専用コレクションクラス作ってやれ >>763
非同期・並列処理がテーマのC#の本ってあんまりないのよね
実際に読んだことあるのは↓の二つ
『C#によるマルチコアのための非同期/並列処理プログラミング』 山本康彦 技術評論社
ちょっと古いけど、backgroundworkerの時代からawait asyncまで一通り歴史的経緯含めて網羅されている
『C#によるWindowsシステムプログラミング』 北山 洋幸 カットシステム
システムプログラミングと題されているけれど、非同期・並列処理に紙面の多くが割かれている
で、今正しいタイトルをチェックするついでに見つけた
読んでないので内容はわからん。2番目のやつと同じ著者によるもの
『C# 非同期・並列プログラミング入門』 北山 洋幸 カットシステム >>766
Xamarinするには、まず人脈♪の人じゃねそれ? >>767
kindle化されてない本は存在しないも同じ 余裕があればAdvanced Windowsも読んどくといいぞ >>766
最初の買ったかな
非同期ずっと書きにくいな見づらいなと思ってて、asyncで本命きたか?と
エレガントさに感動した stephan clearyのConcurrency in C#が鉄板 C#でasync、awaitの説明を読んでも頭にさっぱり入らなかったが、
CでIOCPとスレッドプールI/Oを使って、非同期処理を理解した。 >>769
小説や漫画ならともかく、実用書は紙の本の方が使いやすいわ 紙面画像ベタ貼りの検索できない電書というアカンやつもあってな… 最初に一気に読む、理解するには本がベター
わかってしまえばあとはネット検索で可 単なる習慣だから、生まれてから電子書籍しか知らないなら何も困らない 技術書の必要性が凄い勢いで無くなってくのは何か寂しいな
とは言え自分もググってCopilotも併用しているけども 別に有用性はなくなってないけどな
アウトプット先が増えてるだけで、高度に専門的な情報は書籍(電子含む)が強い
論文とかも電子になる時代だし、AI含め、色んな人のアウトプットを大多数が受け取れる便利な時代になったよ
紙は特定の存在が物理的に抱え込むためのものになりつつある えーっと確かこの本のこの辺にって実本めくる方がだいたい早いからしょうがない 質問です
C♯で中規模以上のプロジェクト開発してるときってやっぱり毎回ビルドには時間かかったりするのでしょうか?
PHPから乗り換えようか迷ってんだけどC♯はビルドとかめんどくさそうで悩んでます C#が最適だとは言わないがPHPの方がクソなのは言うまでもない WPFでWindows.Formを呼び出したいんだけど、
参照開いてWindows_Formとかはあるけど、
Windows.Formがない、どうやって追加したらいいんですかね? <PropertyGroup><UseWindowsForms>true</UseWindowsForms></PropertyGroup> うる覚えだけどcsprojに<UseWindowsForms>true</UseWindowsForms>を追加したら良かった気がする
WPFプロジェクトなら<UseWPF>true</UseWPF>って項目があるはずだからその一つ下にでも追加してみるといい >>788
ありがとうございます
そこらへんって本には載ってないんですかね >「うろ覚え」を「うる覚え」と言う人に会ったことがあるかもしれません。実は一部の地方では、話し言葉として「うる覚え」が慣用的に使用されています。
「うろ」の文字や音が似ていることから「うる」に変わったとされています。
ただし、ビジネスシーンや書き言葉では「うろ覚え」が正しいので、間違わないように気をつけましょう。 一時期うる覚え撲滅委員会やってたけど面倒く臭くなってやめた 「うろ」は「空」または「虚」または「洞」の読み方だから
「うる」じゃ意味が分からなくなるんだよね 完全な初心者なのですが、C#の変数宣言におけるvarって
パフォーマンス的なデメリットなどは存在しないのでしょうか?
読み辛さがなければ便利につかってよいものと考えていいですか? パフォーマンスは関係ないよ
使う使わないも好みの問題なので、自分が良いなら使えば良い varは推論型なので内部でintやstringに変換してくれる
むしろ宣言時に初期化してなくて推論出来ないとエラーが出る
var a; // 初期化してないのでエラー
var b=null; // 何のnullかわからないのでエラー
var c=0; // int型なのでOK
var d=','; // char型なのでOK ありがとうございます! パフォーマンスは気にしなくてよいのですね……!
便利に使います! コンパイル時っつーか、EXEやDLLビルドする時(コンパイルって言うと実行時のコンパイルと誤解する) 型推論時は右辺を評価してその結果の型が変数の型になる
型を明記した場合は右辺を評価してその結果の型と明記した型が一致するかどうかをチェックしてる
varが使える状況か否かの確認に追加ステップが必要だったとしても差は出ないんじゃないかと思う
でも少し興味あるので誰かに大きいコードベースでベンチマークして貰いたいかも ビルド以外のその時に動いている別プロセスの影響による誤差以上に差が出る気がしないけどなぁ >>806
まぁこれだよな
有意な差がデータから読み取れるのなら確かに見てみたい コード生成は一度やれば済むんだから、その一度の時間差なんて厳密に測って意味あるの? varって値を入れたら瞬時に型が決まるから人間が想像するような推論ではなくパターンマッチと言った方が近いかもー 右辺の型なんかコンパイラは分かってるからねぇ
むしろ左辺の型と合ってるか比較する方が時間掛かってんじゃね?
知らんけど >>805
ソースコードからのビルドと、JITは相当違うが 使ってるお絵かきソフトのカスタマイズがしたいんですが
オープンソースじゃないお絵描きソフトのキャンバスに色を塗ったりするのって不可能なんですかね? 自動化ソフトでペイントブラシにお絵かきしてた人はいたな オープンソースじゃないと自動化やカスタマイズは難しいって結論でいいですかね? 自動化はオープンソースかどうかはあまり関係ないし
カスタマイズはオープンソースかどうかよりもカスタマイズできる機能が用意されてるかどうかの方が重要
なのでその結論はどちらかと言えば間違い プラグイン方式のAPIが用意されているなら出来るかもしれんね >>818
ありがとうございます。公式でそんなのなかったんで諦めます。 Cで作ったDLL関数の引数が構造体のポインタでrefで呼び出し出来ていたんだが、C#側のstruct文をclass文に変えたことでメンバ変数に正しく伝わらなくなって悩みました。
何故でしょうか? structをclassに変えたからだろ自分で言ってるじゃないか >>825
Cのポインタと、値渡し・参照渡しを勉強して >>826
メンバー関数なしのclassはstructと同じと思ったの。publicは付けるとして。 答えはclassにするならrefを取れなんだが
まずclassとstructの違いをちゃんと勉強しような? 初心者です。
.NET Standard 2.1を使用しています。
マルチスレッドの同時接続数の設定で、ServicePointManager.DefaultConnectionLimitの値をできる限り上げたいのですが、Int32.MaxValueを設定しても問題ないのでしょうか。
一般的にServicePointManager.DefaultConnectionLimitの値はどうやって決めるものなのでしょうか。 ライブラリが勝手にアプリ全体の制約値変えていいのか?というのはまあおいといて
HttpClientが使ってるHttpClientHandlerやSocketsHttpHandlerのMaxConnectionsPerServerもInt32.MaxValueだし別に設定するのは問題ないよ
実際の同時接続を増やしすぎたらサーバによっては蹴られるとか攻撃扱いされるとかあるかもしれんが一般化できるもんではないな
あと接続繰り返すうちにクライアント側もソケットを使い果たす可能性もあるぞ >>830
経験や知識のあるものが実測値などを基に決める
初心者が及びもつかないこと
普通に無理ゲー System.Windows.Forms.Timer
これで呼び出した関数の中で
テキストボックスとか操作できちゃう理由が知りたいです。
内部的にInvoke使ってるんですか? >>835
for(int i=0;i<100000000;i++)
{
textBox.Text="test";
}
UIスレッドにこうかいてもループ終わるまで何故かtestって文字でないですけど何故ですか?
でもSystem.Windows.Forms.Timerでこれ呼んだら速攻で"test"ってでると思うんですが >>831
Int32.MaxValueでも問題ないんですね。ご教授いただきありがとうございます。
ちなみに作っているのはライブラリではなくUnityアプリとサーバです。
今回HttpClientではなくHttpWebRequestを使用しています。
HttpClientだとソケットが枯渇しやすいという話はよく見ていますが、HttpWebRequestでもソケット枯渇は問題なのでしょうか。
タイムアウトした接続が解放されずにカウントされたままになる、という情報を見て、ServicePoint.ConnectionLeaseTimeoutを適当に一分とかに設定していますが、この設定だけだと問題が起きてしまうんでしょうか。 HttpWebRequestはかなり前から非推奨だったと思うが… >>836
しらんけど
Listboxとか大量に突っ込んでる途中は表示されないでしょ
DoEventとかいれないと >>836
UIスレッドの名前通りUIの更新もそのスレッドでやってるから
スレッドがループで独占されてて画面を更新できない
> でもSystem.Windows.Forms.Timerでこれ呼んだら
「これ」ってforを含んだものじゃないよね?
>>837
Unityは詳しくないからコメントできないな >>841
勘違いかもしれないんでもう一辺試します
すいませんでした >>842
でもSystem.Windows.Forms.Timerって動いてる時に
中でループ大量に走ってても
フォーム動かせたりしちゃいますよね?
これってUIの更新ではないですかね。
Mainとかにループ書くとフォーム動かせないのに。 実はループしてるときは動かせはするけど鈍くなってるんですかね。 > でもSystem.Windows.Forms.Timerって動いてる時に
> 中でループ大量に走ってても
状況が分からん 中ってなんだ ループって何を指してるんだ tickの中でループすると固まるでしゃろ
2.1は固まらないのか…? >>846
こうです
public void clock(object sender, EventArgs e) {
for(int i=0;i<100000000;i++)
{
textBox.Text="test";
}
} >>847の言う2.1が何のことかわからんけど
.NET Framework 4.8.1でも.NET6でも、>>848をやれば
ループ中はTextBoxの表示は変わらないしWindowも動かせないがな 外部からのwm_paintで描画される事はあるかも
鈍くなるとは WinFormのTimerのOnTickってWncProcから呼び出されてるけど
その状態でWM_PAINTとか来てもキューに積まれてるだけじゃない? >>853
wm_paintはキューを無視して飛んでくるよ あれ、そうだったっけ
昔見たMSのドキュメントにはDispatchMessageによって送信されて
WindowProcを介して受け取るって書いてあった気がしたけど
記憶違いかスマン メインスレッド止めてるのに描画されるとか、ちょっとしたホラーだな
見えざるスレッドがいるのか
メインスレッドと思ってたものが実は違ったとか
もしくは、自動的に実行位置がコロコロ変わってる可能性も 今時のCPUじゃぁ100000000回ループなんてあっという間だから、メッセージ処理が少し滞ってもっさりした感じになる程度で済むんだろう >>851
2.1は>>830で書いてる.NET Standard 2.1 text変更してもinvalidateされるだけ
ループ終わってから無効領域まとめてWM_PAINTメッセージがsendされる ワンドライヴに保存して開いたら、エディタで開いたような感じになったぜ。 c#でパソコンの使用時間をカウントできないですかね?
フリーソフトであるんですが何故か正しくカウントできてない。
僕的には起動時間が使用時間であってほしいんです。
増えてはいるんだけど例えば10時間つけっぱなしにして+10時間ってなってないんですね windowsの起動日時をc#で取得する方法
を、bing等のaiに聞いてみる リアルタイムでなくていいならEventLog.GetEventLogsと以下参考にして算出したら?
http://faq3.dospara.co.jp/faq/show/7275
> 僕的には起動時間が使用時間であってほしいんです。
> 増えてはいるんだけど例えば10時間つけっぱなしにして+10時間ってなってないんですね
ActivityWatchなら無操作時間もAFKとして記録してくれたような… timer作ってカウントすりゃええんでないの?
窓起動時間は入らんけどさ System.Environment.TickCount使え イベントログに起動した時刻やスタンバイに入った時刻が記録されてる 1日内だの数日だのならこれで十分
32bit値によるミリ秒カウントだから49日ちょいで一回りしてしまうから
それ以上の日数で調べたいならDllImportしてGetTickCount64使う DllImportしなくてもEnvironmentにTickCount64があった気がする みなさん有難うございます。
>>874
それ全部合計できます?
>>876
累計調べたいですが出来ますかね? >>877
TickCountもTickCount64も、OSの起動時からの累計だぞ
Environment.TickCountでググってみるとかしてみるといい >>878
有難うございます。とりあえずそれで1年間の起動時間調べてみます。 どーでもいいことだが
イベントログって放置してる?
赤いエラー見えると内容確認して消してしまうわ えー
DCOM に登録しませんでした
て無視しね? >>875,876
.NET Frameworkには無いけど、.NET5(厳密には.NET Core3.0)以降ならEnvironment.TickCount64がある メソッドのアクセス修飾子は、internal と public どっちがいいんでしょうか?
仕事で見るソースコードはほぼ全て (internal・public のどちらでもいい箇所は) public ですし、
自分で書く時も public ばっかり使っています。
他のアセンブリから参照されないメソッドは積極的に internal にするべきでしょうか? >>880
消すって、すべて解決してるの?
すごいね >>886
メソッド持ってるクラスがpublicなら、公開すべき物以外はpublicにしない 顧客にwinサバ納品の条件に、赤いのは対処して無くしておくこと、というのがあってすごく面倒だった思ひ出
無視すりゃエエやんて愚痴りまくったわ あれってWindows側のバグだと思うんだけど全部消す事ってできるの? ああ、一行丸ごとに色が付いてるんじゃなくて
行頭のエラーレベルのアイコンのことか イベントログサイズを0バイトにすればエラーなし(そうじゃない) >>891
でも赤いの消すのってメーカーPCとかの製品では必須なのでは
見つかったら絶対問い合わせ来るやつじゃん >>895
必須ではない
一覧にあるエラー分は無視で構いません
でokなとこもある 他のパソコンの起動時間をリアルタイムでTCPIP通信で受け取りたいんですが
https://dobon.net/vb/dotnet/internet/tcpclientserver.html
上URLのクライアントのコードにおいて
↓これはサーバーに向けての送信だからわかるんです。
ns.Write(sendBytes, 0, sendBytes.Length);
でもループの中の
↓これが分かりません。
ms.Write(resBytes, 0, resSize);
msっていう変数にWriteする必要性って何ですか?
コメントだと //受信したデータを蓄積する
って書いてて今一そうしてる意味が分かりません。 >>897
そのページに記載のサーバーとクライアントの仕様をちゃんと呼んだ上で
実際にサンプルプログラム動かして確認してたらその質問は出ないと思うんだが試したのか?
それはそうとDOBONはもう更新するつもり無いなら注意書きつけてほしいわ
サンプルコードが古すぎて害にしかなってない >>897
MemoryStreamって書いてあんだろ
メモリーに流し込むクラスだろうね >>898
対象のバージョンや記事書いた時期でもあればよかったのにね
でもまぁコードなんて最新の事情に合わないなんてよくあること
古くても読み物としてありよ 初稿の履歴ないのがねぇ
仮に2000年初稿で2024年の初修正があったらわけわかめ >>898
良く見るとTCPIPとは関係無いコードでしたね。
データを保存してるっぽいですね。ありがとうございます。 https://twitter.com/intent/tweet?text=https://wikiwiki.jp/postmodern/&hashtags=%E7%B5%B1%E4%B8%80%E6%95%99%E4%BC%9A,%E5%89%B5%E4%BE%A1%E5%AD%A6%E4%BC%9A,NHK,%E6%97%A5%E3%83%86%E3%83%AC,%E3%83%86%E3%83%AC%E6%9C%9D,TBS,%E3%83%95%E3%82%B8%E3%83%86%E3%83%AC%E3%83%93,CNN,BBC
https://twitter.com/thejimwatkins タブページの中に別のフォームを埋め込むって出来ますか?
変数ってフォームごとに所有権があって変数名が被る心配がないじゃないですか。
実際複数のタブにわたってテキストボックスとか置くと頭に付ける文字の区別とかがしんどいです。
これ何とかなりますか? ようわからんわ
オブジェクト思考?
usercontrol作れ?
なんだろこれ ひょっとして「ユーザーコントロール」で検索すると幸せになれたりして? >>907
おおやりたいことが無事実現しましたw
同じ名前でも全然競合しないし最高ですねこの機能 やっぱりwinformsってguiフレームワークとしては一番手軽よね 今のブラウザなら数値専用や日時専用があるからwinfomより簡単じゃね? アンカーやドックなどがあるから、もうVB6は無いな Excel VBAはいつになったらエディタを更新するんだ・・・? public static string[] GetFiles (string path, string searchPattern);
searchPattern
String
path 内のファイル名と対応させる検索文字列。 このパラメーターには有効なリテラルのパスとワイルドカード (* と ?) 文字の組み合わせを含めることができますが、正規表現はサポートされていません。
これなんですが*.jpgと*.pngを返すにはどうしたらいいですか? *.jpgと*.pngで1回ずつGetFilesするか
*.*でGetFilesして返ってきた配列をWhereしとけ サブディレクトリを対象にする必要がなければEnumerateFilesとかの結果を自分でフィルタリングするコードを書いたほうが簡単かもしれない ASP.Net Coreって、いつになったらPasskeyに対応するの? VisualStudioのC#で開発して配布した過去バージョンのexeに何かしら問題が起きてソースを追ってデバッグする必要が出てきた時、
必要なのはそのexe本体とそのバージョンのpdbファイルだけでいいですか?
デバッグにはそのバージョンのソースコードもやっぱり必要?
また、配布したexeのpdbファイルはバージョン毎に残しておいたほうがいいという話を聞いたのですが
それはそのバージョンでビルドし直さなくてもよくなるからという認識で合ってますか?
気軽にバージョンを戻して再ビルド出来る環境がある場合、pdbファイルは残しておかなくても問題ないという認識で合ってますか? pdbファイルでググって意味がわからないならまあ必要はないかな VBNetからC#の移行ってハードルは高いですか?
元々趣味レベルでVB6やってた流れでVBnetに移行してしまったけど、
C#の方が参考文献も多いし簡単に移行出来るのなら、そうしたい 細かい違いはあるけどVB.Net⇔C#は大丈夫でしょ 昔趣味でVB.NETで書いたけど、何年か前にSharpDesktopの変換機能を使ってVB.NETからC#にして、
その後はC#で書いている。
VB.NETは今後機能強化は見込めない。
Visual Basic 言語の戦略 - Visual Basic | Microsoft Learn
https://learn.microsoft.com/ja-jp/dotnet/visual-basic/getting-started/strategy
>Microsoft は、アナライザー、コード修正、IDE 生産性機能の提供など、
>Visual Basic 開発者向けの Visual Studio のエクスペリエンスを引き続き向上させます。
>Microsoft は、VB でサポートされている既存のシナリオを今後も重視し、
>Web フロントエンドやクロスプラットフォーム UI フレームワークなどの
>新しいワークロードのサポートを追加する予定はありません >>931
嘘吐き
VB.NETの方は余計なコードがくっついてくるぞ SharpDevelopのコンバーターさんはかなり有能 c++のスレッドいつの間にか無いんでここで聞きます。
簡単なデスクトップのアプリケーション作る時に
今時winfomじゃなしにmfcを使うメリットはありますか?
有る程度コンポーネント揃ってるし何より格好がいいとは思いますが。 >>938
mfc難しくて未だに簡単なのも作れてません
動作の軽さはどっちがいいですか?経験してたらここが早くていいとか教えて欲しいです むしろ簡単なデスクトップアプリならC#だろうに
このスレに来たのはつまりそういう事だな
でなければただの変なやつだぞ フォームアプリを作るのに速度も何もないだろうと思うんだけど。
昔やってたけどもう覚えてないなぁ。
いまから基礎からやるなら C# とかの方がいいんじゃないの。
真面目に C++ でお勉強するなら Windows がどういうものかわかるから、長期的にはそれが利点かも。 人様に売るのか自分だけか?
アプリの速度なんてCPUで力押しすりゃいいんだから
時間と金どっちとるかや MFCは覚えることが多過ぎるから
どうしてもという理由が無いなら今からやるのはお勧めしないな
速度も気にする程の差じゃない C++/CLRフォームアプリもまだVS2022で作れるよ >>941
基礎からというか業務で使ってるんですよね。
今のところ大丈夫かって簡単なんですよwinform
windowsの操作何でも出来るし細かいイベント何でもあるし
てか肌感覚としてUI作るのに苦労しないんならどんなアプリも作れるんじゃねと思います。
ただc#も極めると難しいとかいう意見もあってそれは何?ってイライラします。
c#やってて何か難しさを感じれる壁みたいなのありませんか?
このままだと難しい未知の何かを知らずに年とっていきそう。 >>943
覚えることが多過ぎ=c#にはない豊富な機能
ってことではない? 言語とフレームワークを同列で考えてる時点で才能ないから諦めろ >>947
ではないね
C#からWin32APIやネイティブDLLのメソッドを呼び出せるし、一部の特殊な例を除いて大抵のことは出来る exceptionだらけで処理の流れがブツ切れだよw >>949
教えてくれてありがとうございます。mfcはもう勉強やめようと思います。
調べたんですがc#の発展的なのってweb系の言語と組み合わせて使うとかですね。
デスクトップなアプリは誰もできるからスキルの差が無いって感じがしました。 極めると難しい?
難しいってさ人によるからその人には難しくてもあんたには簡単なんだよな一応業務経験作ってるんだろ?
野良野球の人が大谷の玉みて、あれは打てね~よ、難しいぞ
メジャーの人の意見は難しいが打てるやろ
そういうことや >>951
何をどうしたってC++の方が難しいよw
むしろC#やったらめちゃくちゃ簡単に感じると思う C++ のフレームワーク・MFC は使い道がない。
C# は、Unity があるけど
普通は、Ruby on Rails から始める。
筑波大学も使っている、Railsチュートリアルのサイトで、
古いバージョンなら無料で読める
重要な技術は、
Rails, WSL2, Linux, Docker, AWS Solution Architect,
React, TypeScript MFCは座標指定してガチ描画とかがしたいならありかもしれないけど
普通のダイアログ(opendialogではなくformのようなもの)的なものはあまり使い道がない >>956
ガチ描画とは何ですか?
それを聞くとc#のdraw系機能と何が違うのか気になります。 透過させるためにマスク画像と合成していたのを思い出した MFCって基本コントロールしかないよね
あとは自分で描画して作る方向なの >>946
非同期処理(asyc,await,Task)で躓く人は多そう
Linqは人によるかな linqはラムダで色んな渡し方ができるとわかってくると利便性が爆上がりする
クエリ構文は読めるけど自分ではわざわざ書きたくない 式ツリーの存在意義を知ってるのと、それを使いこなせたらC#マスターの称号が得られる すまんが、これってなんでHello Worldって出ないの?
https://dotnetfiddle.net/QI2CZg linux上でc++からmonoはさんでc#メソッド呼び出すの試してた
とりまc#ライブラリを.net standardでビルド >>968
ありがとう!Runしてなかった・・・・ C#を職場のその場しのぎの知識だけでなく、きちんと学習したい場合はどうすればよい? 職場で使ってたら、それ自体が学習だろうに。
現場で使えるC#だからな。 >>974
C#から中間言語に変換してexeファイルが作られる
それを実行時にコンパイルしてる
だから初回は起動に微妙な間が生まれることがあるのは仕方がない
AOTコンパイルとあるけど実際は今のところ様子見だろうか? .NET Frameworkアプリを使ってると同名の *.ni.exe ファイルが作られるけどこれは何? https://twitter.com/intent/tweet?text=https://wikiwiki.jp/postmodern/&hashtags=%E7%B5%B1%E4%B8%80%E6%95%99%E4%BC%9A,%E5%89%B5%E4%BE%A1%E5%AD%A6%E4%BC%9A,NHK,%E6%97%A5%E3%83%86%E3%83%AC,%E3%83%86%E3%83%AC%E6%9C%9D,TBS,%E3%83%95%E3%82%B8%E3%83%86%E3%83%AC%E3%83%93,CNN,BBC
https://twitter.com/thejimwatkins winapiをよくない使い方してwindows上で動きがおかしくなる事が
あるのですが結構危ないプログラム書いてるって認識でいいですか?
例えばクリック押下をプログラム的にさせて放すってのをセットでやたらずにいたら
バグりました。再起動したら治るんですがよくないですか? クリックだけじゃないんですが
こういうのやっちゃダメですよね?
何かボタンを押下をプログラム的に実行したは良いが
そのボタンを放すをプログラム的にやらない
で症状なんですが
マウスホイールコロコロしても拡大縮小になってしまうとかです。
何やってもそうなります。 そもそもC#の話なのか知らんけどまず具体的なコードと現象を示しなさい あんたのPCなんだから好きにしろ
売り物ならそんなのは売るな ずっとクリック押下にしたままにしておいたらPCおかしいとか
お前の頭がおかしいんだよwww WM_LBUTTONDOWNを2回送る
とか、通常ではあり得ないメッセージを送るって事でしょ
ちゃんとしたアプリならテストしてるんだろうけど keystate が変わってないのに送りつけるとかしょうもない事してるに1000ペリカ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 189日 14時間 47分 5秒 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login レス数が1000を超えています。これ以上書き込みはできません。