ふらっと C#,C♯,C#(初心者用) Part152
レス数が950を超えています。1000を超えると書き込みができなくなります。
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part151
https://mevius.5ch.net/test/read.cgi/tech/1621129559/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://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
https://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 appのことでしょ
いや時代錯誤だなと感じるのは「カレントディレクトリ」という概念。
そんなものにわざわざ依存する必要ってあります?
どこにもないよね。 まあまあ、
exe のディレクトリ==カレントディレクトリ
前提でコーディングするって初心者あるあるだからそうやって馬鹿にするなよ >>852
> exe のディレクトリ==カレントディレクトリ
これ Excel あるあるなんだけど…
初心者あるあるとか言ってるお前が一番馬鹿w ExcelのVBAと連携する小さいシステムなので伝統的なカレントディレクトリ使ってるんです
Excelと実行ファイルを同じフォルダに入れれば解決なのでしょうが実行ファイルのライブラリが多いのでExcelが埋もれて見難いなとそれはそれで困り namespace System.Collections.Generic
{
public class List<T> : ICollection<T>,…の中にある、
public void Add(T item);の具体的な処理(リストの最後に加える)はどこに書いてあるのでしょうか? .NET Frameworkならmscorlib.dll, .NET 5以降ならSystem.Collections.dllの中
ソースコード見たいなら
.NET Frameworkのはreferencesource.com
.NETのはgithubのdotnet/runtime >>854
VBAからexe起動する際にそのexeにとってのカレントディレクトリを指定する
exeに渡す引数じゃなくて、exeの実行環境としてね >>854
ExcelをC#のライブラリとして使う方向にしたら?
普通はそうする >>845
そもそも論としてWindowsではカレントディレクトリの扱いが環境として定義
されるようになっているので、プログラミングしてアプリを作るときにカレント
ディレクトリっていう使い方をするならば自分で必要な設定を行えば良いんだよ
まぁお約束(嫌いな人ゴメンねw)でdobonだけど
https://dobon.net/vb/dotnet/file/currentdirectory.html dobonいいじゃん
俺の量産するコードの半分はdobonのコピペだ Excel VBAからどうやってEXE起動してるのかしらんが
必要ならカレントディレクトリ変えればいいだけじゃないのか >>857
ありがとうございます。問題が解決しました。
次に湧いてくる疑問なのですが、
Visual StudioでList<T>を右クリックして、「定義へ移動」をすると。下のように書かれています。
//
// 概要:
// Adds an object to the end of the System.Collections.Generic.List`1.
//
// パラメーター:
// item:
// The object to be added to the end of the System.Collections.Generic.List`1. The
// value can be null for reference types.
public void Add(T item);
初心者としてはreferencesource.comにあるように↓こう書かれていたらわかるのですが
public void Add(T item) {
if (_size == _items.Length) EnsureCapacity(_size + 1);
_items[_size++] = item;
_version++;
}
なぜこれで動くのでしょうか? そしてどうして下のように処理を書いてないのでしょうか? > なぜこれで動くのでしょうか?
mscorlib.dllの中にコンパイル済みのが入ってるから
> そしてどうして下のように処理を書いてないのでしょうか?
コンパイル済みのしか入ってなくてソースがないから ILSpy使えばmscorelibも含めてC#に逆アセンブルしたソースコードを直接確認できるよ >>865
ありがとうございました。スッキリしました。
なるほど、こんな感じで動いているのですね。
>>866
ILSpyを使ってみました。これは便利そうですね。
すごく勉強になりました、ありがとうございます。 5chが高齢化してきてこんな感じでレベルの低い無駄なレスが増えてってる S/N比は昔からたいして変わってないだろ
昔の方が良かったなんてのはそれこそ年寄りの繰り言だ > 5chが高齢化してきてこんな感じでレベルの低い無駄なレスが増えてってる
>>871 のことだなw 年を取り感受性が低下して正常な感性が失われて昔も変わらないと言う
ジジイのダジャレを垂れ流すスレではないぞここはw >>874
お前のクソレスがダジャレ並だと言ってるんだよ
まぁ俺のもだがな ASP.net MVC 3.1を触り始めたんだが、これ、どんな些細な変更もいちいち発行しないと見れないのかな?
いままでのように「IIS Expressをプロジェクトのディレクトリ指定して起動しておいて、ビューは変更した都度リロード、ロジック変えたらビルドして確認」なんて気楽な開発が出来なくなってかなり面倒…… >>879-880
ああ、なるほど。ASP.net MVC 3.1(というか、VisualStudio2019や2022)では、【デバッグしながら】ソースをいじって、それをすぐにブラウザで見れるんだ。
chtmlは今までも出来たけど、コードビハインド(と今は呼ばないかもしれないが)の変更も可能になってて、それを反映する「コード変更を適用」なんてボタンもVSに追加されてるんですな…。
これなら確かにわざわざIIS Expressを別に起動する手間は必要ありませんね。
例外が出た時にコマンドプロンプトからも確認できなくなったのがちょっと不便になったが、これも仕事で書くまともなコードならNLogなりを入れている筈だし。
アドバイスに感謝。いやはや、便利になったモノですなぁ… 文字と数値が入り混じるリストのソート掛けが分かりません。
[0]丸/B/30/40/B/60/0
[1]丸/B/70/20/B/20/0
[2]丸/B/30/5/B/60/0
[3]角/B/70/20/B/20/40
[4]丸/B/30/40/B/60/0
[5]角/B/20/20/B/20/100
1番左の丸、角等の文字でまとめ、
[0]の40の位置の数値を昇順、
[0]の30位置の数値の昇順に並び替えたいです。
丸角の順番はまとまってれば良くて、数値は小数点ありです。
どなたかコードを、教えて頂きたいです。 >>882
そのリストの要素(例えば「丸/B/30/40/B/60/0」)
は文字列なんだよね?
だったら要はスラッシュで区切られた文字列の中から
n番目の要素を取り出すメソッドが書ければ目的は達成できるのと違うの? >>882
普通は何らかの自作クラスにその文字列をパースした値を入れてソートする まずね
> 文字と数値が入り混じるリストのソート掛けが分かりません。
これはリストじゃないね
ただの文字列だろ
自分の好きなようにパースしたらいい new object[][] { new object[] { "丸", "B", 30, 40, "B", 60, 0 } }
とかだったりね。
まあ 894 の言う通りだと思う。
data.OrderBy( a => (string)a[0] ).OrderBy( a => (int)a[3] ).OrderBy( a => (int)a[2] ) とかでも出来るかもしれないけど。 >>882
result = list.OrderBy(x =>GetValue1(x))
.ThenBy(x => GetValue2(x))
.ThenBy(x =>GeValue3(x));
でGetValueメソッドの実装をするのが初心者でもわかりやすい
GetValueを共通化するとかはお好みで この程度の話だったらどんな設計でも問題ないと思うけど、
>>882の人はそういう設計の問題で躓いているんじゃないでしょ。
恐らくいわゆる「分割統治」ができない人なんだと思う。
普通のプログラマなら当たり前のように自然に
デリミタで区切られた文字列の3番目の要素でソートしたい ⇒
(1) 3番目の要素を抜き出す
(2) 文字列を実数に変換
(3) 変換し数値を使ってソート
という風に大きな問題を小さな問題に分割して考えるけど、できない人にはこれができない イコールだったら次の項目の比較をするって部分ができねぇのと違う? つまりソートの優先順位の話をしてるのではないか?と 新しくbyte[]配列を定義してコピーせずに、byte[]を文字列に直すのはどうしたらいいのでしょう?
byte[] data = new byte[] { 0x30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //末尾にnullがたくさんあるデータ
string text = Encoding.ASCII.GetString(data);
//string text = Encoding.ASCII.GetString((byte*)data,2); //こうしたいけどキャストできずエラー
Console.WriteLine(text); //「0???????????」が出力される >>892
そんなことはできない
そのポインタを引数に取るGetStringのオーバーロードも結局コピーする
Stringのコンストラクタにもポインタを引数に取るのがあるけどそれもコピーする 質問内容がよく分からんが欲しいのはEncodingクラスの
GetString(byte[], int, int)
オーバーロードか?
length引数はその例の場合1にしないとtextに\0文字が入っちゃうぞ ああ文字列化のときにコピーが走るのはよくて、前処理としてbyte配列からbyte配列にコピーするのは嫌ってことか?
GetStringに範囲を指定できるオーバーロードがあるだろ Encoding.ASCII.GetString(data, 0, 1);
じゃダメなの? Spanを引数にとるGetStringを早く実装しろよ、MS もう解決済みみたいだしもっといい方法がたぶんあると思うけど
いちいち手動で長さを指定せずにC文字列を文字列に変換したいってことならこれで出来た
var data = new byte[] { 0x30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
var sb = new StringBuilder();
sb.Append(Encoding.ASCII.GetChars(data));
var text = sb.ToString(); あんまり行儀は良くないけど1行で出来るしbyte[]じゃなくてSpanで受け取るときって往々にして変換先もReadOnlySpan<char>で済ませたいときだから標準で必要だとは思わないな
Span<char> stack = stackalloc char[u8.Length];
string str = stack.Slice(0, Encoding.UTF8.GetChars(u8, stack)).ToString(); >>903
その質問をここでするくらいの人にはどちらにしろ無理だな 全然
レイヤの違いが極端なので文法が少し似てる以外完全に別物 久しぶりにc#書くんだけど今VSって2022が最新と思っていいのかな?2019のほうがいい? NFTアートとNFTゲームとGameFiとブロックチェーンゲームに
提供する側・作る側として参入しよう。
(むりなら参加する側でもいい)
DAOとPlay-to-Earn(遊んで稼ぐ)が世界の未来になる
特にNFTアートとNFTゲームとGameFiは今なら先行者利益取れるぞ
NFTアートとNFTゲームとGameFiはこれから1000倍規模の市場になる dotnet.microsoft.com/ja-jp/
として日本語版サイトが立ち上がったらしいよ
と言うどうでもいいっちゃあどうでもいいニュース 今はユニバーサルと.net frameworkってどっちで作ればいいのでしょうか? お好みでどうぞ
どちらも開発終了しているプロジェクトなので今後の展開はない でもVS2030になっても.net frameworkの方はサポートされてる気がする 2030年には.NET15が出てるのか
もう誰も残ってなさそう まあそのうち「.NET」って名前も捨てるやろな
どこが「NET」やねんってツッコミもされそうな時代になってきたし >>914
まあそれは最初からそうなんだけどね
Windows XPが出た時に.NET Passportっていう認証サービスも
確か一緒に登場したんだけど、たぶんそれと同じ.NETだよね。
ちなみにこの.NET Passport、XP SP2の頃には早々消滅してた記憶があるw >>915
MSアカウントって名前で現役バリバリではあるな いまからやるなら.net coreに乗り換えればいいのでしょうか? .NET Coreは開発終了
今からやるなら.NET 6
変遷
.NET Framework
↓
.NET Core
↓
.NET 6 (2021/11リリース)
今後
.NET 7 (2022/11予定)
.NET 8 (2023/11予定) >>917
だからブランド名の話ね
というか、正直当時も今もあんまり感心ないんで勘違いしてるかもしれんが、
..NET Passportって今のGoogleやツイッターやYahooのIDみたいに
サードパーティーにも認証サービスを提供することを想定してたはずだよね確か。
今のMSアカウントはMSローカルのIDとしてしか使われてない気が >>920
OAuth2やOpenId Connectに対応してるんじゃないの? そう言った用途ならAzureADアカウントだと思う .net standardって謳ってたのは何だったの?あれと今の.net xの関係性がわからん
Microsoftの言ったもん勝ちに振り回されてる気がしてならん >>923
.NET Standardはとっくに放棄されて死んだから全く気にしなくていいよ
むしろトラブルメーカーだから積極的に捨てたほうがいい .NET Standardは他の様なフレームワークそのものではなくてフレームワーク構成のプロファイルなので位置づけが違う
.NET Frameworkと.NET Coreが共存していた過渡期の仕様なので.NET 5で統合された後はその役目を終えた 別に統合されてはいないでしょ
互換性の乏しい別物だよ .NET Framework(Windows用)と.NET Core(Linuxメインのマルチプラットフォーム用)
の統合で作られたのが.NET 5
(CoreベースにFrameworkを吸収した形式)
更にXamarin(モバイル用)を統合して. NET 6というのが大筋の流れ
ただし現状はフレームワーク本体の統合に対してUIフレームワークの進捗が遅れているのでモバイル用はまだ完全に統合できていない Standardで書けばFrameworkでもCoreでも動くのが売りじゃなかったっけ?
破棄されたということは.NET6では動かなくなったの? 4年前の記事
https://atmarkit.itmedia.co.jp/ait/articles/1707/28/news033.html
要するに3種類のフレームワークのクラスライブラリを相互利用できる様にPCL(プロファイル)を置き換えるものとして計画されていた
その後クラスライブラリを含むフレームワークそのものを統合する方向に方針転換したので今となってはもはや何の意味もない もうわけわからん
これがマイクロソフトのゴミ戦略
みんな捨てるわけだ .NET 5が出たからといって世の中からFrameworkやCoreがすぐに消え去るわけじゃないし、
少なくとも4.8のサポートが切れる2030年までは.NET Standardの意味はあるんじゃないの。 開発中止されたものを無理に利用しても益はないよ
レガシー系を使うなら素直に元のライブラリ使った方が楽
おそらく手作業であちこち設定弄らないとまともに使えないと思う .NET Frameworkから.NET Coreへの移行準備にはちょうど良かったと思うけどな こちらの足元を整える必要があると認識できた
あまり込み入ったことをしすぎたり、
マイナーなライブラリを使ってると、移行もつらくなる
ヘビーな業務アプリとかはなるべく言語の素に近い実装がいいと気付けた
少なくともMS付近のテクノロジーでは まだWinformsやWPFは.netに移行できないが
UIから呼び出すクラスライブラリは.netで作りたいという向きは多いのでは? >>935
UI等に依存しない純粋なStandardのライブラリとしてロジックを切り出せる程度の能力のあるチームならとっくに本体を移行してるだろうし、
そもそも今時まだWebに行けなくてデスクトップアプリやってる時点でアレ >UI等に依存しない純粋なStandardのライブラリとしてロジックを切り出せる程度の能力のある
そんな大層な能力か? 普通に市販コンポーネントの対応状況だとかVSの機能で未実装とかさまざまに.netでのデスクトップアプリ作成を妨げる要因はあるでしょ
しかもどんなアプリにおいてもデスクトップよりWebの方が適しているなんてのも乱暴すぎて幼稚 >>936
ブラウザやVisualStudio完全否定かよ 既存プロジェクトの
.NET Framework + Winforms / WPF
は無理に移行せず現状維持
新規プロジェクトは
.NET 6 + WinUI3 / MAUI(開発中)
に移行というのがMSの方針 >>939
web系技術の信奉者は現実をありのままに直視できないドリーマーが多いw
これは最近始まった話じゃなくてWindows 98の頃からそうw
Java界隈も昔はそうだったけど流石に10年ぐらい前に消えた。
Web界隈は相変わらず。
彼ら、もう15年ぐらい前からずっと「すべてはブラウザ上で実行されるようになって
デスクトップアプリは駆逐される」と言い続けているw
もう立派なカルトだねw 結局.NET Frameworkの延命手段として完全に手放すわけにもいかず止むを得ず玉虫色の対応といった感じかな >>944
15年前のWEBアプリって駆逐されてね? 集金とAI用の情報収集手段としてはWEBアプリ最強だからな
使い勝手は・・・だけど >>945
逆にNET Frameworkから.NET Coreへの移行を早く進めてもらいたいからこそのStandardだろう。>>933が言う通り MSが.NET Coreへの移行を焦っていたのはUWPをゴリ押ししてたからだと思うけどUWP諦めたので今さら必要あるの? >>944
いつまで経ってもデスクトップアプリが駆逐される気配が無いんだが? レス数が950を超えています。1000を超えると書き込みができなくなります。