○
>>2-4 乙 もうお前に用はない
く|)へ
〉 ヽ○ノ
 ̄ ̄7 ヘ/
/ ノ
|
/
|
/
______ ______ __ __ __ _ _ | | | | | \ | | | | | || | | | |____ .| |. | | | | |  ̄  ̄ _____  ̄ ̄ ̄| | r― 、 / / \__| | | |  ̄ ̄ ̄| | | ___| | | \/ / / | | | | | | | \ ./ | ̄ ̄ ̄ ./ | | ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ | | \ \ | / | |  ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄  ̄ ̄ ̄  ̄ ̄
SqlConnnection/SqlCommand等を1つにまとめたラッパークラスみたいなクラスを作っています(同僚が) お前等はどう思いますか? 俺はそんなクラスを作られると激しく使いづらいんだけど
目的がちゃんとあって、達成できてれば文句は言わないな まあそんなキッチリしたラッパー見たことないけど
10 :
8 :2011/01/12(水) 21:51:33
>>9 普通に考えれば、SqlConnection/SqlCommand/SqlTransactionを
1つのクラスにするのは無理があると思よな
本当にこのラッパークラスが便利なら、もうM$が提供しているよな〜
TableAdapterェ…
前にも同じ話題があったな
>>8 うちはそんなラッパーつかってる
VB6のoo4oからその流れだ
使いたくはないが、それを使用する決まりになってるしな・・・
その同僚ってもしかして俺のことか
15 :
8 :2011/01/13(木) 20:05:22
>>13 うちの会社仕事が無いから、先輩にSqlConnectionのラッパー作ってみてよ〜って言われてしまった
あぁ〜、意味ないって
その気持ち痛いほどわかるわ
WebClientで画像をダウンロードしてそのままbmpにする場合はどのようにすればいいのでしょうか? 例外などの処理を省いたのが下記になります byte[] data; WebClient wc = new WebClient(); wc.Encoding = wc.Encoding = System.Text.Encoding.GetEncoding("utf-8"); data = wc.DownloadData(_Url); wc.Dispose(); DownloadDataだとbyte配列になるようですがこれをどうやればいいかがわかりません。
File.WriteAllData()
あ、そういう意味ではなくPictureBoxなどへ渡すためのBitmap形式にしたかったのです
byte配列にはしない OpenReadでStream取得してImage.FromStream
あとbyte[]⇔MemoryStreamの変換もDBとかでよく使う
>>19 >>20 なるほど
byte配列をそういう風に使えるんですね
ありがとうございます
BOMの削除ってどうしてます?
StreamWriterのコンストラクタでエンコードを指定しない(BOMなしUTF8で出力)。 またはエンコーディングにnew UTF8Encoding(false)とかを使用。
ありがとう、いつもEncoding.UTF8を使ってたから気付かなかった
C#2.0です 動的に数が増減するTextBoxのリストをやりたいのですが 1.DataGridView 2.ListView 3.FlowLayoutPanel 4.TableLayoutPanel どれが一番簡単でしょうか? 表示したテキストはそれぞれ行選択した後固有処理したり簡易編集したりします また、TextBoxも個別に属性を割り振って処理を変えたりします リスト表示するだけなら1がもっとも簡単そうなのですが、この個別処理まわりが 大変そうで悩んでいます
やってみればいいじゃない!
正直個別処理のレベルによる DataGridViewでもEditingControl取得すれば多少はいじれるし
C#で キーを押す という動作を実行するにはどうしたらいいでしょうか。 別のフリーウェアであるキーを押すと特定のマクロを実行してくれるソフトがあります。 このマクロを実行させるために、「キーを押す」という動作を実行させたいのです。 非常にしょうもない質問かもしれませんが、分かる方教えて頂けると助かります。 よろしくお願いします。
30 :
28 :2011/01/14(金) 21:07:24
>>29 おお、ありがとうございます。
それで行けそうな感じです。
よくわからないのですが、そのページのそれっぽい部分をそのままボタンクリック(? private void button1_Click)の
ところに突っ込んでもうまくいかない。
ちょっと勉強して導入してみます。
ありがとうございました。<(_ _)>
>>30 肝はSendKeyCodeクラスの方だからね
32 :
30 :2011/01/14(金) 22:42:19
ぬうう、そうですか。そう言われて、SendKeyCodeでググッてみてもよく分からないページが・・。 C#のシステムをほとんど理解せず、見知ったプログラムをつなぎあわせて動かしてばかりなので 全く分からないのです。なのでここで具体的に質問できるレベルではないのです orz 下のようにやってるんですけど、エラーが出るなあ・・・・ using System; using System.Collections.Generic; 略 using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { SendKeyCode send = new SendKeyCode(); send.Sendkey(51); } } }
>>32 そのサイトのSendKeyCodeクラスをコピーして使うか
そのクラスの中でやってることを自分のソースに入れないと無理だよw
>>33 それって微妙なんだよな・・・
ある程度使えるようにするには
>>29 の方がいいよ
このコードをコピーしないとダメ using System; using System.Runtime.InteropServices; namespace test {     class SendKeyCode     {         [DllImport("user32.dll")]         public static extern uint keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);         public void Sendkey(byte Code)         {             keybd_event(Code, 0, 0, (UIntPtr)0);             keybd_event(Code, 0, 2/*KEYEVENTF_KEYUP*/, (UIntPtr)0);         }     } } namespaceは自分のプロジェクトにあわせてね・・・(もしかしてその辺も説明がいるレベルの人?
36 :
32 :2011/01/14(金) 23:23:41
おおお、皆様のヒントを頼りになんとかエラー除去できました。 全くよくわかっていないですが、適当に色々いじってるとなんかうまくいきました。 どうもありがとうございました。
37 :
デフォルトの名無しさん :2011/01/14(金) 23:47:40
exploaderここの支援ツール作ってたけどアフィブログ側がいろいろパターンあって厳しいな・・・
C#って配列のLowerBoundを指定できますか?
できません
40 :
38 :2011/01/15(土) 00:25:21
(object[,])typeof(object).MakeArrayType(2).GetConstructor(new[] { typeof(int), typeof(int), typeof(int), typeof(int) }).Invoke(new object[] { 1, 1, 1, 1 })で出来ました
41 :
デフォルトの名無しさん :2011/01/15(土) 00:29:39
そんなことしないと出来ないのかw
Array.CreateInstance(Type, int[], int[])でもっと簡単に作れる いずれにせよ「C#では」作れないけど
SortedListとかに記述してある、O(log n) というのはどういうことなんでしょうか?
ランダウの記号 とかで調べてみる
>>44 ググってみた
うぃきとか見ても専門店きすぎてイミフ
えっ
nがそこそこ大きければ、処理時間はだいたいlog nに比例するという意味 たとえばList<T>ならIndexOfはO(n)なのに対してBinarySearchはO(log n)なので 後者のメソッドの方が効率よく要素を検索できることがわかります nはこの場合コレクションの要素数
>>45 処理時間の指標だよ、アルゴリズムの性能を端的に表すときに使う
だいたいそれくらいかかるって意味
O(n^2)よりO(n)のが早い、O(n)よりO(log n)のほうが早い
>>47-48 サンクスです
大体理解しました。
そもそも対数自体からよくわかってなかったのがいけなかったんですが…
助かりました。
50 :
デフォルトの名無しさん :2011/01/18(火) 09:37:49
以下のコードの Class2.InternalUse を public 以外にすると状態により消失したり出現したりします オプティマイズが原因だと思われますが、このInternalUseは可能なら public にしたくない。 常に出現させる事は果たして可能なのでしょうか?オプティマイズ禁止アトリビュートとか知っている人いませんか? public static void Test() { Func<object, bool> f = Class2.GetMethod(typeof(int)); f(10); } public static class Class2 { // ジェネリック関数 InternalUse の型引数をType型オブジェクトで引き渡そうという試み public static Func<object, bool> GetMethod(Type type) { foreach (System.Reflection.MethodInfo item in typeof(Class2).GetMethods()) { if (item.Name == "InternalUse") { System.Reflection.MethodInfo method = item.MakeGenericMethod(type); return (arg) => (bool)method.Invoke(null, new object[] { arg }); } } System.Diagnostics.Debug.Assert(false, "InternalUse<T> が消失"); return null; } // 型引数をType型で渡したいジェネリック関数 //private static bool InternalUse<T>(T arg) { System.Console.WriteLine(arg); return true; } public static bool InternalUse<T>(T arg) { System.Console.WriteLine(arg); return true; } }
最適化でメンバが勝手に消えることはありません public以外にすると消えたように見えるのは、GetMethodsがpublicメンバしか返さないからです かわりにGetMembers(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)を使えば publicでなくても取得できます どうせ名前だけで判別するならforeachも必要なくて GetMethod("InternalUse", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) の結果だけを見れば十分です
GetObject<T>()みたいなメソッドはオーバーロードでGetObject(Type)が用意されてるのが普通だけど それが用意されてなくてどうしてもTypeで指定したいときは稀にあるな 基本的には動的に使われそうなメソッドはTypeを取るオーバーロードを用意しておいて ジェネリック版の方を T GetObject<T>() { return GetObject(typeof(T)); }と実装するのが普通
Streamをファイルに保存する簡単な方法ってないですかね? WriteStream(stream)みたいな
あるだろ・・・MSDN読んでみろよ どっちかというと WriteStream(filePath) じゃね?
ないない FileStream作ってRead->Writeを繰り返す
var buf = new byte[0xffff]; // バッファサイズは適当に int read; using (var output = File.OpenWrite(path)) while ((read = input.Read(buf, 0, buf.Length)) > 0) output.Write(buf, 0, read); これだけのことだろ
.NET4にはStream.CopyToがあるな
Java の commons-io みたいなのってないの?
Fileクラスとかで十分でしょ .NETのライブラリははもともとJavaほど使いにくくないからユーティリティ集みたいなのはあんまり流行らないよね
個人的にユーティリティ集作ってたけどバージョン上がるごとに無用の長物と化していったな
>>62 あるあるw
2.0の頃にGenericsでTuple作ってたけど無用になった。
しかし、.NET肥大化しまくってる気がしないでもない。
次のバージョンではどうなるか…
64 :
デフォルトの名無しさん :2011/01/19(水) 01:58:25
肥大して制御不能になれば別の新しい規格立てるだけです 歴史が証明しています
今のところ、無駄に肥大してる感じはないけども。 要求広がったぶんだけ正比例ででかくなってる感じ。
66 :
デフォルトの名無しさん :2011/01/19(水) 02:08:18
まともに入れると何個もランタイムが必要という点は肥大化とも言えなくも無いこともない事かもしれない
コンパイル時に解決される機能も多いしそんなに肥大化って感じはしないけど 新機能を覚えるのが苦手な人には辛いかもね
新機能覚えたら前のバージョンに戻れなくなる
というか型推論、匿名型、拡張メソッド、ラムダ式、dynamicとか見るに マルチスレッドと関数型へのパラダイムシフトを確実に実行する為に10年計画とかで一直線に進んでるように見える 2.0、3.0、4と新しくなる度に二度と前に戻れないほどの利便性生産性の向上は凄まじいし、全くブレてない
だよな ちょっと前まではSTLやRubyが羨ましかったのに、 もうそれらを使う必要性を全く感じない
[フォルダ名1] - [フォルダ名1-2] - [フォルダ名1-3] というふうに「フォルダ名1-2とフォルダ名1-3」のフォルダ名を取得することはできるのでしょうか? 取得することができるなら、どういったものを使えば取得できるのでしょうか?
できるからぐぐりなさい
>>69 2点訂正:
「非同期処理だからといってマルチスレッドは要らない」という流れも。
GUI アプリだとディスパッチャー使って UI スレッドに戻して実行ってのができるんで。
あと、「関数型へのシフト」じゃなくて「関数型の取り込み、融合」だと思う。
Rxみたいに非同期を同期的に扱う流れが流行ってるね。 .NETの世界だけじゃなくて例えばJavaScriptにもStratifiedJSみたいなのがある。 C#5では非同期構文(async/awaitキーワード)が導入される。 RxとAsync CTPがあれば非同期プログラミングは怖くない。
C# 5のasyncはほんとにあれ、単一スレッド実行(非同期IO終わったらUIスレッドにディスパッチ)するからね。 lock要らない。
SL の 3D 対応のほうが興味ある。
>>73 ありがとうございます
それでできました
配列にディレクトリ名が挿入されたんですが、
while文でディレクトリ1つ1つ表示させているんですが、
配列に値が入ってるかどうかが判別する方法がわかりません
おかげで無限ループになってしまいます
どのようにしたら配列(string型)の中かどうか確認できるんでしょうか?
81 :
80 :2011/01/20(木) 00:42:31
すいません。間違えました 最終行: どのようにしたら配列(string型)の中が空かどうか確認できるのでしょうか? ちなみにnull、""では意味がありませんでした……
Length
83 :
デフォルトの名無しさん :2011/01/20(木) 00:51:24
foreach文勉強しような
C言語スレで質問してた奴か 邪推するにエロ画像フォルダでも整理したいんか?
>>84 用途はなんでもいいだろw
エロに関する動機が多い気もするがw俺の場合w
exploader.netの支援ツールとか作ってるぞw
アフィブログがあまりにもうざすぎるので・・・
ざっくり仕様は固まってるがアフィブログ側の作りがまちまちなので
その辺の細かい部分をどうするかが悩ましい
とりあえず質問スレでどうぞ
最近はどこのサイトもアフィリエイトで埋まってるからな Adblockで全部消してやるとすっとするw
一日で作れそうだな
すべての参照型のオブジェクトを一意に識別する値を取得したい。 例えば、オブジェクトのアドレスなどを取得するのは無理でしょうか?
すみません。自己解決しました。
慌て過ぎ
えへへ
>>90 .netの勉強用には手軽でいい題材かもしれんな
unsafe使ってポインタ取ってくるのしか思いつかないんだけど・・・・
RuntimeHelpers.GetHashCodeを使う
自己解決ってのは、そんな馬鹿げたことはやるべきでないと理解した って意味だろ。
Graphics.DrawStringで文字末端のスペースにも 下線を引きたいのですが消えてしまいます。 StringFormatでStringFormatFlags.MeasureTrailingSpacesを 指定ししても変わりませんでした。 とりあえず自力で線を引くことにしますが、これは どうすれば解決するでしょうか?
exploader.netへアップしてるアフィサイトの解析ツール
http://ideone.com/2pyC3 上のテキストボックスに1行1URLでアドレスを貼ってボタンを押すと解析開始
該当するアドレスがあれば下のテキストボックに貼る
exploader.net関係のレスはスレ違いなのでそろそろやめて
APIをDLLから呼び出すには新規ソリューションでクラスライブラリを作成し そこにAPIをコーディングし、呼び出し側からDllImportをしてあげればよろしいのでしょうか?
>>104 用語の使い方がデタラメで何が言いたいのかさっぱり分からない。
理解してもいない用語を無理に使おうとせず、自分がやりたいことをベタに
書いた方がいい。
自分で作ったDLLの関数を呼び出すにはどうすればいいのー?って意味じゃね
DLLをプロジェクトに追加するか、コンパイルオプションで指定する
DLLがマネージなのかアンマネージなのかすら分からない
DLLはマネージドorアンマネージド? ↓(マネージド) ↓(アンマネージド) プロジェクトの参照で DllImport属性で適当なクラスに DLLを追加する 使いたいメソッドを宣言 ↓ ↓ あとはググれ
親切やね。
C++/CLIで結合が抜けてるぞ!
P/Invoke ならいらない
string型の変数の中に"ABCDEF"とある場合 ABCと入力されていれば文字列の中を"DEF"という風に 入力されている文字列だけ変数の中から削除という場合どんなものを方法があるでしょうか? sliceメソッドってC#にはないんでしょうか?それがあればできるんですけど・・・
"ABCDEF".Replace("ABC", "") 一般的にいって、sliceと名の付くメソッドはそんなことには使いません
後学のために言っておくと javascriptと等価なsliceなんかある言語の方がすくねーぞ
後学のために....って言い回しは他人に向かっても使うんだっけ?w 初めて見たよそんな使い方
>>106 他人の作ったネイティブDLLの関数を呼び出したいんじゃねーの?
方法1
C#からDllImportで直接呼び出す。
余計なDLLは不要だが、データ構造が複雑だとDllImportを書くのが面倒。
方法2
C++/CLIでクラスライブラリを作成し、C++と.NETの変換を行いC#で参照する。
余計なDLLが要るが、使用するパラメータは少ないのにいろんな構造体を
用意しないといけないときにはこっちが楽
118 :
113 :2011/01/23(日) 16:18:44
>>114 ありがとうございました
今度は
string n = "[Playback Part2] 馬鹿にしないでよ〜"
とある場合[ ]の中のPlayback Part2だけを抜き出すには何を使えばいいですか?
誰が一番先に正規表現書いてやるか賭けようぜ
手取り足取りだな 人間の考える力はこうして失われていく
123 :
113 :2011/01/23(日) 16:26:36
正規表現という言葉がでてきませんでした
>>120 さんありがとうございました
>>118 string n = "[Playback Part2] 馬鹿にしないでよ〜"
StringBuilder m = new StringBuilder();
for(int i=0;i<15;i++){
m.Append(n[i+1]);
}
n = m.ToString();
次は正規表現の書き方を正規表現スレに聞きに行くんだろうかw
>>123 べ、別にあんたのために書いたわけじゃないんだからね!!!!勘違いしないでsyぽね!!!
つI
正規表現という言葉がでてきた意味がまったくありませんでしたね。
DataGridViewをD&Dで行を並び替える方法を教えていただけませんでしょうか ドラッグどころかフォーカスしかできない始末です。
System.Linq.Expressionsについて質問です。 CodeDOMを用いた動的なコンパイル・実行では AppDomainを分けないとメモリリークが発生してしまう という話を聞いたことがあります。 動的な実行コード生成という点では、Expression.Compileも同様だと思うのですが こちらはそういった問題は発生しうるのでしょうか?
Expression.CompileはDynamicMethodのラッパー DynamicMethodは生成されたコードがGC対象になることと アセンブリや型を生成する必要がないのでオーバーヘッドが小さいのが売り
>>132 遅くなりましたが、回答ありがとうございます。
GCの対象になるのでしたら問題無く使用できそうですね。
DynamicMethodについては知りませんでした。
C++のXbyacみたいな機能があったんですね。
面白そうなので調べてみます。
大概の場合、そういうの考えるの無駄なことが多いから可動性を重要視 考えなきゃいけない所だけ考えればいい
さすがに確実にメモリリークするのわかってるのに考えないのはどうかとw 読み込むコードが限られててeval的なことはしないならいいけどさ ふらっとスレの誤爆か
XDocumentでXmlDocument.Document.NamespaceURIに相当するものは どれですか?
XmlDocument.DocumentElement? XDocument.Root.GetDefaultNamespace()じゃね
XDocument.Root.Name.NamespaceNameの方か
C#は宣言が長すぎる ClassName a = new ClassName(); ↓ ClassName a; でいいじゃん 次のバージョンとかで改善される予定はないの?
>>139 下は単なる宣言じゃん
上は
ClassName a;
a = new ClassName();
これを一行で書いただけだろ?
それに ClassName a = new とnewまで入力してスペースあければ支援機能が候補だしてくれるし それよりプロパティの省略書き方 {get;set;} って入力支援機能ってないのかな? イベントとかだと += まで入力すればTABx2でメソッドまで自動で生成してくれるけどw
コードスニペット作ろうぜ
var a = new ClassName(); だろ。 あとインテリセンス様のお陰で、ClassNameはCN<TAB>で補完出来るじゃん
インテリセンス様は便利だけど、コード書いてる気がしないんだよなー いつも使ってるメソッドの名前ぜんぜん覚えなくて IDE以外でコード書いたときあまりの書けなさっぷりに愕然とするし
IDE以外でコード書くことをやめた方がいいよ、そろそろ
どうして? IDE以外でなにか困ることあるっけ?
>>141 prop Tab Tabを知らないで生きてるのは不幸
プログラマーを最高に快適なぬるま湯状態に置きIDEから離れられなくする それがMSのIDE囲い込み戦略!!!
IDE使わない俺、カッコいい!!ってのはもうやめません? C#は、IDEで最適化されてる言語だと思うの。
まぁ実際VisualStudioなしでC#書く理由がない
普通のテキストエディタでC++書いたりPython書いたりはするけどC#やVBは絶対に嫌 ライブラリがインテリセンス前提で綴りが長すぎる
SharpDevelopというソフトが今年バージョンアップして結構使える
SharpDevelopってどうせ永遠にVSExpressに勝てるわけないのに何がしたいの? どうせならクロスプラットフォームにすりゃいいのに
いちおうOSSで無償利用可能だしな
Mono使うときと、F#で使ってる.SharpDevelop
157 :
デフォルトの名無しさん :2011/01/25(火) 21:14:14
一番の価値はマックでドトネト・・・・だったのにな
>>157 ちょっと何言ってるのかわからないですね
Expressに対しては十分対抗馬だと思う。 例えばコンテキストメニューで単体テスト(NUnit)を走らせたりできる。
そんなもんカスタムツールに登録するとかビルドステップ弄るとかで十分じゃね
161 :
デフォルトの名無しさん :2011/01/25(火) 21:34:44
>>158 いや、monoさえしっかりしていたらMacでも.net使えたはずだったのにな
>>140 すでにクラスは決まってるんだからインスタンス化する時はコンストラクタ名を省略できてもいいと思うんだ
同じ名前を何度も書くのはなんか美しくない
>>162 派生クラス入れたいとか幾らでもあるだろ
var使えvar
>>161 しっかり者ではなかったということですね
>>162 コンストラクタを省略して「ClassName a;」とかキモすぎる。
var使っとけ
var a = new ClassName();
166 :
デフォルトの名無しさん :2011/01/25(火) 21:41:06
やっぱ男よりきれいなお姉さんの方がいいですよね
>>154 多様性がいかに大事か分からんのか。
>どうせならクロスプラットフォームにすりゃいいのに
MonoDevelopがある。
MonoDevelopは元を辿ればSharpDevelopをGtk#に移植するとこから始まってる。
Flash用のIDEとして人気の高いFlashDevelopも、SharpDevelopからの派生。
SharpDevelopはインストールせずに使えて、Visual Studioのソリューション開いて編集できる。
派生を作る・USBメモリで持ち運ぶ・機能が少ない分軽い・・・Visual Studioにできない事ができる点で住み分けてるだろ。
>>162 VB使ってるガキを見たら二度とそんなこと言わなくなる
VB.NETはちゃんと住み分けできてんの? C#の機能をVBの分かりづらい構文で書くだけの劣化C#と化しているわけだけど
もともと VB.NET…VB6、VBAユーザーの囲い込み用 C#…C++、Javaユーザーの取り込み用 なので、完全に目論見どおり
VB6ユーザーのC#への移行パスという位置付けですお
VB6はたしかに糞だけど、VB.NETは出来る子だぞ VB6の機能を互換用に残しているのは微妙だけどな
VB6やVBAから.NETへ移行しやすくしてるというより、 お前らには一生VBしか使えないと思い込ませるのが目的に思える 実際VB.NETがちゃんと使えてるならC#もJavaも全く変わらないわけだが
175 :
デフォルトの名無しさん :2011/01/25(火) 22:11:43
イベントハンドラをエディタで扱うときはVBの方が楽 コードだとAddHandler Me.Load, AddressOf Form_Loadとか糞長くなるけど あとXMLリテラルとかどうでもいいものもあった気がする
.NETを使うんなら呼び出し元はどんな言語で書いてもできることは同じでしょ 論理的な行や処理の区切りが改行かセミコロンかなんて、それこそどうでもいい話に思えてくる
VB.NETはVB6のせいで不当に低く見られてるとは思う。使ってないけど 結局は使う人次第さ
使う人次第だが、どちらを使うか選べる人ならあえてVBは選ばないだろ? そういうことだ
そりゃ同じもん吐き出すからな 昔はVB6馬鹿にしてりゃ様になるとか思ってるアホもいたようだけど ベーマガ育ちのオッサンとかBASICが好きな奴も中にはいるだろうし 好き好きだろ
C#の機能を追いかける必要はなかったよな 機能限定.NETで覚えること少なくて初心者に優しい路線目指せばよかったのに
>>178 選べる環境にある人がどれだけ居るのだろうか。
上や顧客の言いなりよ。俺だって使えって言われたら使うさ
そういうもんだろ?
>>180 とても機能限定版なんか作ってる余裕はなさそうだけどね
初心者相手だとサポートは何倍も大変になるし
もうすぐVisual Studio LightSwitchが出るよ Access + VBA感覚でSilverlight使ったWebアプリが作れるらしい
ビット演算が貧弱な時点でC#もVBも大差なし 算術シフトと論理シフトとローテートぐらい標準装備しといてほしいわ
C#のビット演算はCのフルセットだが?
そっとしといてやれ…w
算術シフトはあるでしょ。 アセンブラじゃあるまいしローテートなんて使い道あるかね。
188 :
デフォルトの名無しさん :2011/01/25(火) 22:33:45
>>179 VBは言語機能の為にMicrosoft.VisualBasic.dll利用してるので同じILにはならない
ためしにTry…Catchブロックを書いてReflectorに掛ければ分かると思うよ
>>187 なんとなくサポートしてるだけじゃないの?w
もうローテートは必要なだろうしなあw
論理シフトもあるぞ 符号なし整数にキャストしてからシフトすると論理シフトになるのはCと同じ Javaでは別の演算子なのは、Javaには符号なし整数が無いからで C#が劣っているわけではない
191 :
デフォルトの名無しさん :2011/01/25(火) 22:41:01
VBは、表面上リフレクション使わずにexcel弄れるのが便利だ
C#4.0はdynamicでVBと同じように遅延バインディングできるよ 必要な型だけdynamicにすればいいので Option Strict Off にしないといけないVBよりも優れてる オプション引数もサポートされた
>>189 ローテートシフトはゲームとかだと良く使いたくなるんだけどな。
そうだとしても関数作っとけば済むこと 演算子が欲しくなるほどそんなもんが多用されてたらさすがに糞コードと呼ばざるを得ない
関数化したら遅くなるじゃん PC用ならまだしも、携帯、家電、ゲーム機、その他組み込み系はCPUパワーもメモリも全然足らんのですよ HDDレコーダーとか地デジテレビとか、最近の家電はどれもこれも動作がトロくさくてイライラせんか?
>>196 リフレクションは初回だけで、あとはExpressionTreeでコンパイルしたデリゲートが呼び出されるだけなので意外と早い
動的言語で使われる最適化手法
>>195 組み込み系向けの処理系が……
Monoに頑張ってもらうしかないかねぇ?
>>195 地デジ関連でチャンネルの切替とかが緩慢なのは地デジの仕様上の問題であって
組み込みCPUの問題では必ずしもないでしょ
組み込み系に.NETを使用している事例なんてあるの? Windows Phoneはどうでもいいや
>>199 主にGUIの部分、たとえば番組表の表示とかスクロールとか、めっちゃ遅いじゃん
画像処理はビット演算多用するでしょ
とくに、限られた画面にたくさんの情報を出そうとするとフォントサイズも整数倍じゃなくなってくるし
さすがにmpegの圧縮、展開は専用チップでやってるだろうけど、最近はGUI用にも画像プロセッサ積んでるのかな?
Cellなめんな
Cellは使いこなせる人間が現場にいなかったのと消費電力がデカすぎたので死にました 残念 Cellのプログラミングはちょっとやってみたかったかな
204 :
デフォルトの名無しさん :2011/01/26(水) 00:31:32
>>201 つNVIDIA Tegra GPU入りのARMチップ
そのうち地デジでもこの手が主力になってくるんじゃないかな?
かなり自演臭いしな
すげぇな わかったから他スレでやれ NVIDIA Tegraは使ってみたい
RegexOptions.Compiledって指定したほうがいいんですかね? イマイチメリットがわからない
>>208 MSDNにはっきりメリットとデメリット書いてあるじゃん。
> 正規表現をコンパイルしてアセンブリを作成することを指定します。 > これにより実行速度は速くなりますが、起動にかかる時間は長くなります。 > この値は、CompileToAssembly メソッドを呼び出すときには > Options プロパティに割り当てないでください。 これだけ?もっと説明ないの?
メリットデメリットがちゃんと書かれてると思うが
そうだけど、 大量のRegex.Match()静的メソッドをCompiledオプションをつけて呼び出した場合どうなるかとか、 どのくらいの複雑さのパターンからコンパイルしたほうが圧倒的に速くなるとかそういう詳しい情報が欲しかった
実測すれば?
>>213 静的メソッドは関係ないでしょ。
「コンパイルと再利用」の項も読んだ?
>>215 ありがとう、欲しかった情報が全部書いてあった
if (System.IO.File.Exist(cacheFileName)){ cacheDictionary = HogeClass.FromFile(cacheFileName) }else{ cacheDictionary = new HogeClass(); } にするか try{ cacheDictionary = HogeClass.FromFile(cacheFileName); }catch(FileNotFoundException ex){ cacheDictionary = new HogeClass(); } にするかちょっと悩んでるんだが、こういう場合、やっぱり前者の方が良いの? いつぞか読んだDelphiの本で「例外処理を使いすぎるとイベントドリブンじゃなくてエラードリブンになっちゃいますよw」みたいな事を読んだ気がするが 自分はなんか後者でも良いような気がする
ファイルが存在しないケースが考えられるなら、例外が発生しないように未然に対処すべき 例外を投げるのは、存在してるはずのファイルが存在しないような異常なケース 後者で統一すると、想定してる例外としてない例外がごちゃ混ぜになって後で保守する時に困るよ。
前者でも例外処理は必要 ファイルが存在しているからといって開ける保証はないし チェックしてから開くまでの間に開けない状態に変更される可能性もある
存在チェックだけで安心してるやつはスレッド関係で再現困難なバグ出しそう 安全性とファイル存在した場合の存在チェック分の負荷を考えると後者だな
>>218-220 THX
ってことは、例外の使い方、概念自体なんか間違ってるかも知れないなぁ…
ところでVCLの時から気になってたけど、Windows.Formsの配置で
AnchorとDockがあるけど、このDockってAnchorのプリセットみたいな物で
適切にAnchorを設定すれば、Dockは要らない子になる?
全然別もんだろ・・・・ 似たような動きはさせること出来るけど根本的につがう
こうかしらね try { if (System.IO.File.Exist(cacheFileName)) { cacheDictionary = HogeClass.FromFile(cacheFileName); } else { cacheDictionary = new HogeClass(); } } catch( System.Exception error ) { MessageBox.Show(error.ToString()); }
cacheDictionary = null; if (System.IO.File.Exist(cacheFileName)) { try { cacheDictionary = HogeClass.FromFile(cacheFileName); } catch (Exception ex) { Trace.WriteLine(ex); MessageBox.Show(ex, "error"); } } if (null == cacheDictionary) { cacheDictionary = new HogeClass(); } 俺ならこうする
226 :
デフォルトの名無しさん :2011/01/27(木) 20:14:59
・リトライ可能な物と不可の物をより分けてリトライを組み込む ・致命的な物はもっと上のレベルまでスルーしてそこで終了させる なんて本式で組みだしたら軽く死ねるな・・・・
続きはマ板の「例外を正しく使えないプログラマ多いね。」スレで
誘導貼れよ
リトライ処理がそもそも書きづらい
そこでgotoですよ もちろん冗談だけど while(true) { … continue; … break; } なら実際gotoと変わらないと思う
231 :
デフォルトの名無しさん :2011/01/28(金) 00:23:59
while(true)でcontinueじゃ永久リトライだけどな
while(true) { … break; … continue; } の間違いだろうな 保守性を考えるなら bool retry = false; do { ... } while(retry); か
233 :
デフォルトの名無しさん :2011/01/28(金) 00:39:09
>>232 最後にcontinueしてどうするwそのまま放置しても普通に最初に戻るのに
つうかリトライならリトライカウント考慮してforループ使うのが普通
おw ダメだ寝るか・・・
235 :
デフォルトの名無しさん :2011/01/28(金) 03:03:27
テキストボックスか、リッチテキストボックスで 行間を指定する事って出来ますか?
WinFormならRichTextBoxでPARAFORMAT2使ったEM_SETPARAFORMATでできたと思う
237 :
デフォルトの名無しさん :2011/01/28(金) 11:00:22
前のポーカーのものです。 乱数を取得してその取得した数を削除していくListについて質問です。 一回のゲームごとにListの中身をリセットしたいのですが、どうしたらいいでしょうか?
質問です データベース内に数値などをリスト化(?)などし、 それをFormにあるテキストボックス内に条件が一致した時に抽出したいのですが 抽出もとのデータベースは何を使ったらいいのかがよくわかりません。 様々な方法があると思いますが、単純にリスト内にある数値の1行のみを抽出したい場合は何を使えばよろしいでしょうか?
抽出できないデータベースなんてあるのか?
数字と名前のようなペア? だったとしたらSortedListとかDictionaryとか?
241 :
240 :2011/01/28(金) 11:24:09
骨髄反射で回答してデータベース選定の話だと気付いた・・・ 死にたい・・・・ 簡単にやろうとしたら普通のテキストとかCSVとかデータテーブルをXMLにするとか かな?
>>237 破壊的な操作をしているならオブジェクトを作り直せばいい
>>238 質問がSQLServerみたいなシステムの事なのか、intみたいな型の事なのか
はたまたデータの持ち方の事なのかが判らない
243 :
238 :2011/01/28(金) 11:31:03
みなさんレスありがとうございます。
説明が足りなかった事をお詫び申し上げます。
リスト内の行を抽出する場合、手っ取り早い(簡単な)手段では何がいいのか教えていただきたかったのです。
テーブル系からデータを引っ張ってくるという事をやった事がないので何をすればいいのかわかりませんでした。
>>241 CSVなら簡単かなと思っていましたが、特殊な事をするわけではないのでこのあたりが妥当でしょうか?
244 :
デフォルトの名無しさん :2011/01/28(金) 11:39:42
>>243 データが何件ぐらいで一行にどれくらいデータ有るかで答え方変わるよ
245 :
238 :2011/01/28(金) 11:46:00
>>244 データ量は莫大にあります。
列はすべて4〜5ほどです。
1つ目のテーブルでの行は100です
2つ目のテーブルでの行は300少々
3つ目のテーブルも同じ
4つ目のテーブルでの行は250
すべてまとめてもいいのかもしれませんが、別個にした方が管理しやすい気がしました。
246 :
238 :2011/01/28(金) 11:47:23
追記:行の文字数は最大で15バイトほどです。
247 :
デフォルトの名無しさん :2011/01/28(金) 11:57:42
アクセス使ったらいいと思うよ、 アクセスのマクロで組んでも良いし、C#で組んでも出来る 俺ならExcelのマクロで組んじゃうけどね
膨大というには少なすぎる気がするけど SqlServerCompactとか使ってみては?
249 :
デフォルトの名無しさん :2011/01/28(金) 12:02:51
250 :
238 :2011/01/28(金) 12:02:52
>>247 アクセス経験がほとんど皆無なものでして…おすすめでしたらこの際一から勉強してみます。
Excelのが扱いなれてるので一度そちらで試してみようかと思います。
しかし
>>243 で「>テーブル系からデータを引っ張ってくるという事をやった事がないので」という通りCSVから引っ張ってくる方法が現段階では理解できていませんが・・・
>>248 結構あると思いましたが少ない方なのですね
SQLも今後会得する予定ではいますがC自体未熟なので先に基本的な事を扱えるようになってからSqlServerを使ってみたいと思います。
251 :
デフォルトの名無しさん :2011/01/28(金) 12:09:07
>>249 の続き
プログラムの部分はこうなっております。
List<int> mountCards;
void randam()
{
Random cRandom = new System.Random();
int index = cRandom.Next(mountCards.Count);
int n = mountCards[index] + 1;
mountCards.RemoveAt(index);
card = n;
}
>>251 ちょっと何やってるかわかりにくいけど
ひょっとしてユニークな乱数を発生させる物がほしい?
>>242 の言うように、 mountCardsを作り直せば、良いんじゃないかな?
あと、関数の中で毎回Randomを生成するんじゃなくて、UniqueRandomクラスみたいなのを作って
その中にList<int>とRandomを保持して、乱数を発生させるときだけリストにアクセスできるようにして
Gameクラスの中にUniqueRandomクラスを入れておけば、コンストラクタ呼び出すだけですべては元通りになる。
>>249 元々有ったデータあるいはデータ構造が無くなってしまう操作
>>243 DBから読み込むのはSELECT文(…と言う答えでいいのか?)
DBそのものについては、C#だとMDBファイルを使うのがいいかも。
他に何かをインストールしなくても使おうと思えば使えるし
つSQLite
>>245 程度ならCSVでも問題無いけどな
まーSQLもやる予定なら、練習がてらいじっておいたほうが良いと思うけど
データ元が何でもLinq使えばいんじゃねの
258 :
デフォルトの名無しさん :2011/01/28(金) 13:37:58
>>255 ありがとうございます。
さっきのリストを消してそれを入れればいいんですよね?
>>258 Listの中身をシャッフルしたいってだけなら
private List<int> _sourceList;
List<int> GetNewList()
{
Random r = new Random();
return _sourceList.OrderBy(a => r.Next());
}
でよくね?
>>259 はこっちのがいいかも
private List<int> _sourceList; // コンストラクタかどこかで初期化
private Random _random = new Random();
List<int> GetNewList()
{
return _sourceList.OrderBy(a => _random.Next());
}
261 :
デフォルトの名無しさん :2011/01/28(金) 15:53:01
>>259 >>260 シャッフルじゃなくてリセットしたいんです。
Listで消えた乱数を元に戻したいんです。
コピーしとけばいいじゃない・・・・
>>258 乱数の重複を避ける意味であれば、元のListから出た数を削っていくってのが良い方法だと思う
乱数を出して重複してたら再度乱数を出し直しってのは処理時間が均一じゃないから微妙
>>190 細かいことだけど、Cのシフト演算が算術シフトか論理シフトかは処理系定義
なので、Cにおいてsignedな整数の右シフトには移植性がない
>>264 >>237 は人の出してくれたソースは読まないのかな?
それなりに動くソースあったしその中に毎度リセットするものもあったろうに・・・
267 :
238 :2011/01/28(金) 17:47:49
>>253 >DBから読み込むのはSELECT文
どの様なコードで読み込ませればいいのかまだわからないのでわかりません・・・
>DBそのものについては、C#だとMDBファイルを使うのがいいかも。
アクセスは使った事がありませんが、
>>256 さんはCSVやSQLもいいのではないかとおっしゃって下さっているので各々の使い勝手を調べてみようt思います。
とりあえずは扱えるCSVでチャレンジして、成功したらMDBやSQLにもチャレンジしたいと思います。
ありがとうございました。
また行き詰ることがあると思いますがどうかその時はお力沿いお願いいたします。
mp3をwavファイルとして読み込む方法ってありますか?
>>270 wav形式のファイルが欲しいです。音を再生する必要はありません
ffmpegでも使えばいいじゃん 動画変換ソフトなどと銘打って実は作ってるのはフロントエンドだけで ffmpegに丸投げフリーウェアは結構多いよ
273 :
デフォルトの名無しさん :2011/01/28(金) 19:10:45
lame.dllでエンコードやらせたことあるけど、デコードも多分出来るんじゃないかな メモリー上で出来るかは知らないが
274 :
デフォルトの名無しさん :2011/01/28(金) 19:27:58
らめぇ・・・
>>272 ,273
ありがとうございました
ffmpegとlame.dllを試してみます
コーデック呼び出して生wav取り出せばいんじゃね C#にそう云うの用意されてるかったらNOだけど
xmlドキュメントで<exception>書く時、 あくまでそのメソッドが投げる例外だけ書きます? それとも、中で呼び出すメソッドが投げる例外も書きますか?
例外出るのわかってて原因も明らかなんだったらいったんキャッチして再スローしたほうが
>>277 俺なら<exception>に書かれていない例外が発生した時点でそのライブラリを信用できなくなる
>>277 俺なら<exception>に書かれていない例外が発生した時点でそのライブラリを信用できなくなる
>>277 例外処理をしたいものだけ個別に書く
残りは全部一緒くた
俺ならあらゆる例外を無視するのでどうでもいい
silverlightでPathを使って任意の図形を作っています。 時計周りにLineを設定していき閉じた空間を塗りつぶそうと思ったのですが 塗りつぶしてくれません。 WinFormのGraphicsだと時計回りに設定していくと 閉じることもできたのですが仕様が違うんでしょうか?
最後にzで閉じる必要がある
285 :
277 :2011/01/28(金) 23:47:14
ご意見ありがとうございます 流石に全部書いてるとえらいことになりそうなんで 基本はそのメソッドが投げるもの publicメソッドはわかる限り書くってスタンスで行こうと思います
>>284 レスありがとうございます。
自己解決しました・・・(書き込むと・・という法則ですねw
最初の線だけ引かれてしまうダメパターン
    public Path GetPath()
    {
        GeometryGroup wp = new GeometryGroup();
        wp.Children.Add(this.GetLineGeometry(0, 10, 10, 0));
        wp.Children.Add(this.GetLineGeometry(10, 0, 90, 0));
        wp.Children.Add(this.GetLineGeometry(90, 0, 100, 10));
        wp.Children.Add(this.GetLineGeometry(100, 10, 100, 290));
        wp.Children.Add(this.GetLineGeometry(100, 290, 90, 300));
        wp.Children.Add(this.GetLineGeometry(90, 300, 10, 300));
        wp.Children.Add(this.GetLineGeometry(10, 300, 0, 290));
        wp.Children.Add(this.GetLineGeometry(0, 290, 0, 10));
        p.Stroke = new SolidColorBrush(this.StrokeColor);
        p.Fill = new SolidColorBrush(this.FillColor);
        p.StrokeThickness = this.StrokeThickness;
        return p;
    }
    private LineGeometry GetLineGeometry(double SX, double SY, double EX, double EY)
    {
        LineGeometry lm = new LineGeometry();
        lm.StartPoint = new Point(SX, SY);
        lm.EndPoint = new Point(EX, EY);
        return lm;
    }
    Point[] Point = new Point[]     {         new Point( 0, 10), new Point( 10, 0), new Point( 90, 0), new Point(100, 10),         new Point(100,290), new Point( 90,300), new Point( 10,300), new Point( 0,290),     };     public Path GetPath()     {         PathGeometry pg = new PathGeometry();         PathFigure pf = new PathFigure();         pf.StartPoint = this.Point[0];         for (int i = 1; i < this.Point.Length; i++)         {             pf.Segments.Add(this.GetLineSegment(this.Point[i]));         }         pf.Segments.Add(this.GetLineSegment(this.Point[0]));         pg.Figures.Add(pf);         Path p = new Path();         p.Data = pg;         p.Stroke = new SolidColorBrush(this.StrokeColor);         p.Fill = new SolidColorBrush(this.FillColor);         p.StrokeThickness = this.StrokeThickness;         return p;     }     private LineSegment GetLineSegment(Point Point)     {         LineSegment ls = new LineSegment();         ls.Point = Point;         return ls;     } いろいろ変わってるのでなれるまでがきつい・・・
ところでVS2010はマシンスペックどれくらいいるだろ SL4のアプリ作るので VWD2010Expressを久々に起動したけどなんかいろいろもっさり windowsXP SP3 Athlon64 のBE2350だったかな AMD690GのIGP メモリ3GB
そんな行き当たりばったりのコード書くなよ
>>291 では理想のパターンは?
SLの開発はこれからなので模索しながらやってるから
これでいいとは思ってないだけに理想系を教えてもらえると・・・
ほんとはBlend?に手を出すべきなんだろうけどさ・・・
294 :
デフォルトの名無しさん :2011/01/29(土) 06:56:35
低スペックかどうかは微妙だが、Atom D510(X7SPA-HF+SSD+メモリ4GB)でも実用的な速度だったぞ D3D非対応なせいか、WPFのウィンドウをドラッグするとヤバかったけど
>>290 OS : WinVista+SP2(x86)
CPU : Intel Core2 Extreme X9650 @3.00GHz
RAM : 2GB*2 (DDR3)
今となっちゃ型落ち品だけど、特に速度的な不満は感じて無い
>>291 とりあえず上であげた物はstaticなリソース化しましたが
実のところ簡単なグラフィックツールを作るので
動的にLineなどを追加したPathを作る必要があるので
c#で実現できないとダメな気がするんですがどうなんですかね?
動的に作ったPathもXAMLで記述できますかね?
>>293 >>294 >>295 なるほど
VS2010がWPFで作られてるとか聞いたのでもしや・・と思ってましたが
ところで簡単なメニューの実装とか何でされてますか?
SilverLightは図形にもマウス関連のイベントが用意されてるのでPathなどで
複雑な形のパーツを作って・・・とか出来そうな感じですが・・・
最近Ribbonが意外と気に入ってる
298 :
デフォルトの名無しさん :2011/01/29(土) 11:49:22
ルック&フィールは好きだけど、RibbonCommand作ったりするのがめんどくさくてあんま使わないな
>>297 ああいうのはいいよね
>>298 まーそれほど複雑な階層を持たせるわけじゃないので自作でもいいんだけどさ〜
ところでSilverLightやWPFなりのまとめ方ってどうすればいいんだろ
Lineとかを継承して自作クラス作って一部処理を持たせるだけのクラス作ったけど
それをCanvasとかに入れてもオリジナルクラスと同じように表示してくれないだよな・・・
SilverlightもWPFも関係ないだろ 結局、ドローツールの描画を実装する上で必要な機能というのは 図形を好きな場所に描画することだけなんであって、図形をどう管理するかとかは勝手 フレームワークに依存するような部分じゃない
>>300 いや、図形をマウスでクリックしたところに置くだけならいいけどオブジェクトを管理して
オブジェクトのサイズ変更もやるし、複数のLineをマージしてPathという塊にもしたりと
いろいろイベントとか増えるんだがどうもうまくクラスに封入できないなあ・・と思って
今のままだとWinFormでいうところのForm1にべったりコード書いた状態になりそうでw
ある程度複雑になるならLineクラスとかPathクラスとかキャンバスクラスとか独自に作って 好きなように管理したほうがいいと思う 継承するのは作法的にあんまりよろしくない
>>302 >ある程度複雑になるならLineクラスとかPathクラスとかキャンバスクラスとか独自に作って
>好きなように管理したほうがいいと思う
やっぱりそうなるかねえ・・・
まあ1000オブジェクトも同時に扱わないだろうからなんとかなるとは思うんだが
RibbonやるならCodePlexにあるFluent Ribbonの方がいいよね
305 :
デフォルトの名無しさん :2011/01/29(土) 12:38:57
何となくリボン使ったことあるが、アイコンが余りにスカスカすぎて他のに変えたw
たびたびすいません、教えてください・・・orz
皆さんに教えてもらって一度成功したのですが、そのコードをなんかバグって保存できませんでした。
で、再度同じやり方でコードを記述したのに今度は何故か全く成功しません。
あれからひたすらアレコレやってるのですが、本当もう全くわかりません。
すいません・・・なにが間違ってるのか教えていただけるほんと助かります。
↓
http://amer.web.fc2.com/33.txt ボタンを押すと「3」が押されるプログラム・・・のはずなのですが、うんともすんとも言いません。
(ネームスペースに二つのクラスがあるとダメ?と思ってネームスペースを分けて記述したら今度はエラーが出るし・・。)
308 :
デフォルトの名無しさん :2011/01/29(土) 22:34:43
へえ
>>306 >>29 のリンク先にある//フォームがアクティブにならないようにするためのおまじない
ってとこ追加すればいいと思うよ。
>>306 SendInputs、keybd_eventは単純にキーのエミュレーションをしてるので
アクティブウィンドウに直接キーが流れるよ。だから自分がアクティブウィンドウだと、まず意味がない。
送信先のHandleが取得できるならPostMessageでWM_KEYDOWNを送った方が何かと楽かと
自分もちょうど似たようなオートパイロットを作ってるが、何かとヘタレなので
Spy++で調べたHandleをテキストボックスに入力して、そこに対してBitBltなりPostMessageしてる
あと(UIntPtr)0って言うのがあるけど
IntPtr.ZeroとかIntPtr.Nullとか無かった?つうか、nullを渡せなかったっけ?
今時のコンパイラは賢いから、たぶんうまく最適化してくれてると思うけど
キャストしてる分、CPUリソース食うよ?
[DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern bool PostMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam); public static Boolean SendKey(IntPtr TgtControlHandle, Byte KeyValue) { return WinAPI.PostMessage(TgtControlHandle, WM_KEYDOWN, new IntPtr(KeyValue), IntPtr.Zero); } こんな感じ
どんなオブジェクトでもIEnumerable<OBJECT>型に変換してくれるようなメソッドってないでしょうか? ToEnum(obj).Select(o => /**/).First()というようなことがしたいのですが
オブジェクト・型・メンバ 言葉の意味を正しく理解して使いましょう 列挙体のメンバの値を全て取得するにはEnum.GetValuesを使う
プロパティの列挙とかかしら…
じゃあリフレクションで
stringを要素数1のIEnumerable<string>にしたいとか? それぐらいyield使って拡張メソッド書けって話だけど
最近困ったら拡張メソッド書いちゃうんだけど、よくない事なんですかね?
無闇に使ってメソッドが衝突したら困るんじゃないかな
必要であればやらない理由がない 必要でないならする理由がない
乱用はダメ。計画的に使わないと「どこで定義したのか分からん」とか 「違う拡張メソッド読んじゃった」ということになりかねない。 でも拡張メソッドで済む処理 = そのオブジェクトを外から触って処理するだけでおkな処理。 拡張メソッド関数はpublic関数よりも疎なので頑強になる。
>>316 そのとおりです。自分で書くとあとで忘れちゃいそうなので用意されているものがあるなら使いたいなと・・
(new[]{value})でいいだろ
ひょっとしてECMA/JavaScriptとそのJSONみたいに なんでも感でも格納できるものがほしいってことなのかも
>>322 その構文知らんかったwwwwすげえなwww
それってC#1.0のころから使えたような....
>C# 3.0 では、 配列の初期化時の、「new 型名[]」の型名を省略することが可能に成りました。
そういうことじゃなくて、配列初期化子のこと。 型名の省略なんて本質的な問題じゃないじゃん
new演算子に括弧付けるって発想が無かったのかもしれん
329 :
306 :2011/01/30(日) 14:14:42
>>309 >>310 >>311 あああ
ありがとうございます!
すいません、昨日質問だけ書いて、しばらくレスチェックしたあと寝てしまいました。
レスありがとうございます。
ちょっと、頂いたレスを元につくるのに時間かかるので、まずはどうもありがとうございました<(_ _)>
今からいじってみます。
おっと、括弧は別に不要か
new int[]{1,5,9}.ToList().ForEach(p=>test(p))とかユニットテストでは便利だよな
new List<int>() {1,5,9}.ForEach(p=>test(p))とかユニットテストでは便利だよな
テストなら結果も用意しないといけないからforブロック使うけど
>>327 int[] x = { 1,2,3}; // 1.0 時代からできた
int[] y;
y = { 1,2,3 }; // これは昔から/今でもダメ
var z = new[] { 1,2,3 }; // 3.0 でできるようになったのはこれ
y = new[] { 1,2,3 }; // 3.0 以降、これならOK
>>332 テスト対象のメソッドを呼びっぱなしなら、と言う注釈付きでしょ
みんなはNUnitとか使わないの?
自宅では使ってるよ 会社ではVBもC#をも使ったことがないよ
VS Proの単体テストだなあ ホントはカバレッジとか測りたいんだけど
右辺の型から左辺の型を推論するのが普通になってるから 今作り直したら int[] x = { 1, 2, 3 }; は無くなるだろうな
>>339 そんなことないでしょ。
例えばdoubleの配列をintの変数で初期化するとき、わざわざキャストしろって?
Scala みたいになるってことだろ
>>340 そのときはnew double[]と書けばいいだけ
左辺の型を明示して変数宣言と同時に初期化する場合にしか使えない構文なんてダサすぎ
varがあれば要らないって言いたいわけか。 ダサいかどうかはともかく、まあ確かにそういう考え方もあるかも。
というか似たような省略構文のバリエーションがいくつもあるのがキモい new[]では右辺だけで型が決まってるんだから左辺にvar使うかどうかはこの場合関係ないよ デリゲートやラムダ式は例外的に代入先の型で推論できるけど それと同じくらいint[] x = {1,2,3};と書けることが重要か?
345 :
デフォルトの名無しさん :2011/01/30(日) 17:33:40
Cの構文がベースなんだから、C言語が21世紀に開発されたらって前提が必要になってくるな
ほんと言語厨マジうぜぇ 使い慣れた自分の見やすいやり方でやる
C#はint* a, b, c;と書くと全てint*型になるという地味に革命的な改変が行われてるぞw *を型の一部にしてしまった方が文法は簡単だろうから、 滅多に使わないものの互換性のために文法を汚したくなかったんだろうな
348 :
329 :2011/01/30(日) 17:41:47
お影さまで無事できました。
ウィンドウをアクティブにすればよかったのですね。
>>310-311 に書いてあることは私には少しむつかしいようです。今必死で調べて解読しています。
あるマクロツールで特定のキーを押したら、登録したマクロ発動するってのがあります。
そのマクロを時間がきたら発動させるために、こんな「キーを押す」というプログラムを作っています。
ところがなぜか、そのマクロツールだけはC#上からキーを押す動作を実行しても
反応しないようです。
なぞですが、310-311にヒントが解決策があるかもしれません。
ちょっと頑張ってみます。
どうもみなさん、ご親切にありがとうございました。
配列(リスト)の省略記法なんかは、重要性が高いかどうかはともかく、 ニーズはあるとは思うけれどね。
関係ないかもしれないけど、相手のプロセスがRegisterHotKeyしていた場合SendKeysって有効なの? 全く持ってC#の話題じゃないな
>>348 そいつはGetKeyboardStateでも使ってるのかな?
その場合どうやれば他アプリからキー押した扱いにさせられるのか知らないけど
ラムダの型推論は引数に渡すときも既に宣言済みの変数に代入する時も機能するじゃん。 C風の配列初期化ほど限定的じゃない。 varとは逆に、List<int> list = { 1, 2, 3 }; とか object obj = new(); みたいに統一するのもアリだと思うよ。 実際Javaではこっちの方向で検討されてたらしいし。
もう実装されてる機能の構文を変えるとかありえないから余所でやれ
はい
>>355 はいじゃ(ry
C#は後発で、シュガーたっぷりなんだから、同じことするのに複数の構文があるのは当然だろ。
var array = new String[]{"a","b","c"}; でも
String[] array = {"a","b","c"};でも
string[] array = new string[]{"a","b","c"} でも
何でもいいじゃない。
個人的にはVB.netの方が遙かに難しいぞw
Dim array as integer() ' ok
Dim array() as integer ' ok
Dim array(10) as integer 'ok
Dim array as integer(10) ' ng
Dim array as integer() = New integer(10) ' ng
Dim array as integer()
array = New integer(10) ' ng
過去とのしがらみのおかげで、細かいところで融通が利かなくなってる。
Pascalの時には気になってなかったintegerがかったるすぎる。Int32ってかいてよかですか?
VBで要素数指定して空の配列をNewしたいときは New Integer(10){}と書く
4月からVB.NETの仕事だけど、C#との対応表みたいのあればいいのに。 amazonでそういう本あったけど、出版日が古い。
つっこみって何が? {}←がないとコンストラクタに引数を渡しているのか配列の要素数なのか区別できないからマジで必要。
Dim array as integer() = New integer(10) ' ng Dim array() as integer = New integer(10){} ' ok はぁーん こんなの使ってたら病気になるな VB6プログラマなんて病気野郎しかいないけど
>>356 オプションによるけどVBも型推論の例くらい挙げてやれよ
Dim array = New integer(10){} これは書けるはず Strict Onでもちゃんと通るはず
VB6は宣言と同時に代入はできんから的外れな感じがする まあ2行目と3行目は関係なんだろうが
どこにVB6の話題が出てんだよ VB.NETの話だろ 病気か?
それ.NETの話でしょ?って、初めから.NETの話だと思うけど。
2010だと暗黙的な改行が通るようになったから属性とかラムダも書きやすくなったよ>VB 多少は進歩してるよ
>>368 VBも2008から型推論なかったっけ?
2008だとOption InferはデフォルトだとOffだけど
2010からはOnがデフォルトだったと思う
2008でも通ったような気がする Inferなんてオプション弄ったかどうかは覚えてない
自動プロパティもいつの間にか導入されたのか 次はあの野暮ったいイベント関連の構文に手付けて欲しい
いきなりVB6の話題をあげて病気とか叫んでいる奴が上にいるけど そいつこそがマジで病気っぽいんだけど
初心者スレにも昨日同じようなのがいたな
コボラーが未だに生きてるんだからVB6もあと10年は生き続ける
C#の方が先に無くなるんじゃないかと思うw。
>>378 まあまだVBAはVB6のエンジンなんだよね確か。
そういう意味では確かに
OfficeをWPF化するタイミングでVBAを.NET系に(ry …いや、なんでもない
OfficeのVBAなんぞ廃止して、全部LightSwitchにしてしまえー つか、VB6かVB.NETかに関わらず VBの話題自体、スレ違いなんじゃね?
誰が言うかなと思ってたけど結構かかったな
配列の型推論の当たりからすでに現状のC#無視した展開になってた
>>378 うちのメインの商品がVB6だけど、Win8でVB6の対応がなくなるってことで
.NETに移行中。
つい2,3年まえに、VB2からVB6への移植の仕事もあったからほんとうに
どうしようもなくなるまで移行しないところもあるだろうけど。
工夫すれば動くものを金出してまで移行する経営者はいないわな
>>382 まあそうだなw
C#のちょっとしたことで嘆いている人がいるみたいだから
隣の芝は青い・・・んじゃなくて、茶色いところをだな…
友達のVB.netな課題をみてあげてるけど、正直泣きたいです。
(+ せんせいのおてほん の酷さも泣ける)
VBAの話も同意。VS Expressを無料配布してるなら
それなりで、あまりよろしくないIDEを付属させて、.netなほかの言語でくめるようにした方が絶対幸せだ。
あと、すっかり重要なことを言い忘れていたが、「10個分の配列を作ったつもりが、.Lengthプロパティが11」
な… 何を言っているか(ry 頭がどうにかなりそうだった…
>>387 VBで配列のインスタンスを作る時には New Integer(size - 1){}みたいに
常に明示的に-1を付ける習慣にした方がいいね。
>>386 まあでも計画的に移行したほうが結局安くはなると思う。
VB2からVB6への移行だって、すでにVB6終わってるし。
>>388 最大インデックスを指定する、というのは理解できる仕様なのだが
要素数0の配列作るのに-1指定するのは気持ち悪いなー
>>390 その場合はNew Integer(){}でOK.
392 :
デフォルトの名無しさん :2011/01/31(月) 03:12:49
ポーカーの者です 返信遅くなりました 何とか完成しました (出来が酷いですけど・・・) 自分でもいやになってきました・・・ 長いし・・・ 初心者だし・・・ 判定とかぜんぜんできてねぇ
それでいいんだ 完成させるってことが大事だ
次に何か作るときは少しずつ満足感が増えてくる
次のソフト書き終わった後に今のそのポーカーみてみ? 別人のソースだからw
判定部分のコード上がってた気がしたが見てないんだな
>>109 ありがとうございます
DataRowはやっぱ要素取り出さないと比較できませんね…
いま、Interfaceを継承したロジックのみのクラスを作っててVSTSで単体テストしてるんですが うまくいかなくて悩んでます 継承元Interfaceに実装されてるpublicメソッドのテストしたいのです 継承元Interfaceをnewして、newしたテスト対象クラスをinterface型にキャストすればいいのはわかるのですが テスト対象クラスのprivate変数に値を代入してテストパターンを変えないといけないんです プライベートアクセサを生成してもpublicメソッド使えないし、PrivateObjectをテスト対象クラスでnewして GetInvokeメソッド使ってみたけど、対象メソッドが見つかりませんでしたotr なにかうまい逃げ道はありませんでしょうか?
>>398 よくわからないけどprivateメンバーをリフレクションで無理矢理変更してやればいいんでない?
//継承元のInterface interface IMiserable { string Hiroyuki(); } //継承先のクラス(テスト対象のクラス) class AClass : IMiserable { private int _date = 20100131; ←テストコード中でアクセスして値を変えたいメンバ public IMiserable.Hiroyuki() ←テストしたいメソッド { (処理) return XXX; } //テストクラス中のテストメソッド [TestMethod()] [DeploymentItem("Doukaku.exe")] public void SumWithStateTest02() { AClass_Accessor target1 = new AClass_Accessor(); IMiserable target2 = new AClass(); } プライベートアクセサでやろうとすると target1._dateは使えるけど、target1.Hiroyuki()やtarget1.IMiserable.Hiroyuki()は使えません テスト対象クラスを宣言しようとすると、privateな_dateにアクセスできないのでうまくいきません privateな_dateにアクセスしつつ、.IMiserable.Hiroyuki()をテストコード中で使う方法はないでしょうか? ってかんじでわかるでしょうか??
リフレクション使えば?
_dateにアクセスするSetDate_TESTONLY()メソッドを追加するとか [Conditional("TEST")] SetDate_TESTONLY() {} こんな感じ
DynamicObject継承してラッパー作るのが手軽だと思う 実装はもちろんリフレクションで
>>401 VSTSをよく知らないんだけど、
AClass_Accessorは自動生成されるの?
>>405 されます
テスト対象のメンバがプライベートなら勝手に作られます 使わなくともいいですが
>>406 それならAClass_Accessorから元のクラスの参照へアクセスする手段が用意されてないとおかしいから調べてみたら?
まーたMSは微妙ツールの迷路に顧客迷いこませて囲い込みしてんのかwww おとなしくNUnit使っとけよ 会社の命令だったら乙
ていうか自力でリフレクションできるようになれ
.NET4限定だけど dynamic accessor = new DynamicAccessor(new AClass()); accessor._date = 100; みたいな感じでdynamicでプロキシ使ってリフレクションを隠せる DynamicObjectの実装は簡単だからMSDN読め
>>411 d
dynamicキーワードで調べてみるわ
>>412 DynamicObjectをMSDNで調べろって書いてあるのになんでだよw
いや、dynamicキーワードから知らんし
.NET4よさげだな で、これはXPサポートしてるの?
そんくらいしらべろよ 必要システム * サポートされているオペレーティング システム : Windows 7; Windows Server 2003 Service Pack 2; Windows Server 2008; Windows Server 2008 R2; Windows Vista Service Pack 1; Windows XP Service Pack 3 o Windows XP SP3 o Windows Server 2003 SP2 o Windows Vista SP1 以降 o Windows Server 2008 (Server Core の役割のみ ではサポートされません) o Windows 7 o Windows Server 2008 R2 (Server Core の役割のみ ではサポートされません) * サポートされているアーキテクチャ: o x86 o x64 o ia64 (WPF など、一部の機能は ia64 ではサポートされていません) * ハードウェア要件: o 最小限の推奨要件: Pentium 1 GHz 以上、512 MB 以上の RAM o ディスクの最小空き容量: + x86 ? 900 MB + x64 ? 2.1 GB
それより.NET4知らなかったんだったらVSのバージョンは大丈夫なのか?w C#4.0も.NET4もVS2010でないと使えないぞ
あ、僕コンソール派なんで大丈夫です^^
>>419 >>411 じゃね?
それかリフレクション
VSTSはよく知らんけど、〜_Accessorなんて
テスト中に違うクラスのプライベートメンバ使いたくなったら速攻破綻するのによくやるよな
そのクラスの〜_Accessorも生成してファイルが増えて複雑になる一方だ
objectで渡ってくるインスタンスを元の型に戻す場合はどのように記述すればいいんでしょうか? GetTypeで元の型が取得できるようですが・・・
object a = Hoge(); 元の型 b = (元の型)a; 失敗する可能性があるなら 元の型 b = a as 元の型; としてnullかどうか調べる 元の型が分からない場合は元の型に戻す必要はないはず
423 :
デフォルトの名無しさん :2011/01/31(月) 22:32:27
しかし(type)と as type と動きが微妙に違うやり方があるって 言語設計上失敗じゃないのか?
asはダウンキャスト専用の演算子。 失敗する可能性があるダウンキャストをするとき、javaだと if (a instanceof Type) { (Type)a … } が頻出パターンなんだけど、これだとinstanceofとキャストで二回型チェックが行われて非効率なので わざわざ導入された。
>>422 objectのままだと必要な情報が見えなくて、元の型もその調べたい場所だと
範囲は決まってますが数種類あるんです
やっぱりif文などでTypeを調べて処理するしかないですかね?
>>420 VSがテスト用に自走生成するだけだぜ。
多くの場合は自分で書かなくてもいいから楽だけどな。
ファイルは一つだけだったと思うよ。
追加でほしければ自分で追加もできたような。
プライベートアクセサー試してみたけど、普通にパブリックメンバーもあるし コンストラクターでラップするインスタンス指定できる さらにはTargetプロパティも公開してるからなんとでもなるじゃん
とりあえず困ったらリフレクションと考えるのはド素人
BindingFlags.NonPublic | BindingFlags.Instanceとか躊躇なく書いちゃう素人は嫌だな
テストのために余計なコードを生成する方がおかしい リフレクションが使われるようなケースの中にはコード生成する方が適切な場合も多いけど、 この場合は動的にやれるならそのほうが適切だろ
>>429 それが書けるようになるまでちょっとした試行錯誤が必要だしなwww
こういうラッパークラスってコンポジットパターンとか複雑なオブジェクト構造の場合はどうすんの?
あくまでテスト用だから気にしない 最近のMSのサンプルなんかでもテスト用モックの動的自動生成とかやってるけど 当然そういうのは複雑な構造になるとダメ でもそもそもテストを考えるならa.b.cみたいに階層掘らせるような構造にしちゃダメ
静的ユーティリティクラスの自動生成にはきな臭いものを感じる
簡単なものをわざわざ複雑にしようとしているようにしか見えない
ただのアクセサなら
>>411 で十分だと思うんだが・・・
>>427 プライベートアクセサで、「元クラスのパブリックメソッド」以外に、「interfaceを継承して元クラスに明示的に実装されてるメソッド」
にアクセスできましたか?できたらコード例をお願いします><
そりゃ .NET4ならそれがいいけどね。
438 :
401 :2011/02/01(火) 00:56:48
みなさんの助言聞いて、こんな案を考えました 明日やってみます ありがとうございました ※当方の環境は.net3.0なのでDynamicObjectは使えない using System.Reflection; //テストクラス中のテストメソッド [TestMethod()] [DeploymentItem("Doukaku.exe")] public void TestMethod01() { AClass c1 = new AClass(); Type tp = typeof(AClass); FieldInfo info = tp.GetField("_date", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance); info.SetValue(c1,20110201); IMiserable it = (IMiserable)c1; string actual = it.Hiroyuki(); string expected = "aaa"; Assert.AreEqual(actual,expected); }
439 :
401 :2011/02/01(火) 01:33:28
つーか単体テストクラス内じゃなくてもかけますね なおしました using System.Reflection; public void Method01() { AClass c1 = new AClass(); Type tp = typeof(AClass); ConstructorInfo ci = tp.GetConstructor(new Type[]{}); object target = ci.Invoke(new object[]{}); FieldInfo info = tp.GetField("_date", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance); info.SetValue(target,20110201); IMiserable it = (IMiserable)c1; //デバッグ label1.Text = (int)info.GetValue(target).ToString(); label2.Text = it.Hiroyuki() } 以上のコードで、interfaceを継承したクラスのinterface側メソッドのテストができました (privateメンバへのアクセスあり)
440 :
427 :2011/02/01(火) 06:57:10
>>436 var accessor = new AClass_Accessor();
var target = (AClass)accessor.Target;
var miserable = (IMiserable)target;
あるいは
var target = new AClass();
var miserable = (IMiserable)target;
var accessor = new AClass_Accessor(new PrivateObject(target));
>>436 何がアクセスできましたかだよ
.net1.0からインターフェイスの明示的な実装へのアクセスする場合は
そのインターフェイス型にキャストするって決まってんだろ
お前の勉強不足を俺らのせいみたいに言うんじゃねーよ屑が
もちつけ
443 :
427 :2011/02/01(火) 12:36:44
401は
>>438 でキャスト使ってるように見えるんだが
Assert.AreEqualでNUnitかと思ったけどVSTSにも同名メソッドがあるんだなぁ
.NET4で文字の幅を取得するにはどうすれば良いのでしょうか 以前はTextRendererのMeasureTextをつかっていたのですが 無くなってしまったので代わりになるものを教えてください
>>445 Graphcis.MeasureString()じゃね?調べてないから詳しくは知らん
いくつか調べてみたのですが FormattedTextやglyphTypeface.AdvanceWidths利用すると TextRenderer.MeasureTextの文字幅とは違った値が返されます また、TextBlock.ActualWidthでは計測自体が出来ず、0が返ってきます デザインされた文字ではなく単にTextBoxにMS Pゴシック,12ポイントで 表示した際の文字幅が欲しいだけなのですが、何か良い方法はないでしょうか
FotmattedTextでいいんじゃね ただしWPFのフォントサイズはpx単位だからptからは変換する必要がある px=pt*96/72 ちなみにTextRenderer.MeasureTextとかGraphics.MeasureStringは周囲の余白を含むので大きくなりがち
>>449 ありがとうございます、無事文字幅を取得することが出来ました
emSizeの単位を理解していなかったことと、
TextFormattingMode.Displayを指定していなかったことが、
正しいpixelを取得できなかった原因でした
もう一つ質問させてください FormattedTextを使って、文字幅の取得を行い、空白などを挿入することでMS Pゴシック,12ポイントの環境下で アスキーアートを整形するプログラムをWPFで作っていたのですが、FontFamily="MS PGothic"と指定しても TextBoxに表示した際に空白の幅が本来の半角5、全角11の通りになりません WinFormのTextBoxでは正常な横幅でAAが表示されていたのですが、 WPFで同じように表示するにはどうすれば良いでしょうか
それWPFのバグっぽい仕様のハズ TextBlock系使ってる限り逃れられない
ということはまだWPFに移行しないほうがいいのかな
TextRendererでできてたんだったらそのままでいいじゃん Bitmapに描画してWPFのBitmapSourceにコピーするだけ
そもそもWPFは始まりもせずに終わコン
>>455 まじかよ、MSの新技術はほんとアテにならないな
ここまで俺の自演
ちょっと信じちゃったじゃないですか 実際のWPFはどうなんですか?
今は選択肢としてありじゃないかな。 将来性で言うと、たぶん、今WPFが持ってる機能が全部Silverlightに引き継がれていって、 そうなった時にはWPF消える(けど、今身に着けた知識は使える)。
>>459 WPFが消えることはない。WPFが消えたらSilverlightも自動的に消える。
C#が使えるのにWinForm時代とあれこれ変わってるのが困る・・・
>>459 それって今C#で書かれてるWPFの機能をアンマネージコードで実装しなおすことを意味するんだよな
SilverlightってWinFormsなんかよりずっとアンマネージコードに依存してるんだぜ
SLはMacでも動く様にする為に、色々無理してるからな。 後、ランタイムサイズを抑える都合で かなりイベントやライブラリを削ってる。 せめて、イベントだけでもWPFと等価にして欲しいよなあ。
WPFって至る所で文字がぼけぼけなるのがどうにも
ビットマップフォントは時代遅れですよ
WPFのフォントがぼやけるってビットマップフォントを使うと起きるの?起きた事ないんだが
ClearTypeじゃなくてPDFみたいに縦のスムージングされるからじゃないか
468 :
デフォルトの名無しさん :2011/02/03(木) 11:52:56
>>464 AAかけるからしかたないんじゃないの?
469 :
デフォルトの名無しさん :2011/02/03(木) 11:54:57
つうか画像のデフォルトがボケボケ仕様なのは勘弁して欲しい
.NET4で改善された
ほう?一応公約は果たしたのか
質問です
webBrowser.Navigateを使ってURL呼び出しした後、webBrowser1.Refresh(WebBrowserRefreshOption.Completely)で
更新をかけていますがキャッシュを読み込んでいるようです
下記URLを参考にして
ttp://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200409/04090095.txt "
http://www.hoge.net/hoge.pl?dummy= "+DateTime.Now.ToString("yyyyMMddHHmm")
の形でやってみてもキャッシュを読み込む結果になってしまいました。
当方環境は
CPU:Core 2 Duo E8600
OS:WinXP 32bit
メモリ:3.25G
使用ソフト:VisualStudio2008
private void reloadpage()
{
while (stopflag == 0)
{
reloadpage_bg();
if (stopflag == 1)
{
break;
}
else
{
Thread.Sleep(60000);
}
}
stopaction();
}
(続く)
private void reloadpage_bg()
{
string webad = "";
webad = "
http://www.hoge.net/hoge.pl?dummy= "+DateTime.Now.ToString("yyyyMMddHHmm");
webBrowser1.Navigate(webad,false);
webBrowser1.Refresh(WebBrowserRefreshOption.Completely);
System.Text.Encoding dest = System.Text.Encoding.UTF8;
len = (int)webBrowser1.DocumentStream.Length;
string webcode ="";
//webcode = webBrowser1.DocumentText;
byte[] buf = new byte[len];
webBrowser1.DocumentStream.Read(buf, 0, len);
Encoding ec = Encoding.GetEncoding(webBrowser1.Document.Encoding);
byte[] sjis_temp = System.Text.Encoding.Convert(ec, dest, buf);
string sjis_str = dest.GetString(sjis_temp);
try
{
int cback = sjis_str.IndexOf(")</span>");
webcode = sjis_str.Remove(cback);
int cfront = webcode.IndexOf(" <span>(");
webcode = webcode.Remove(0, cfront + 13);
webcode = DateTime.Now.ToString("D") + "," + DateTime.Now.ToString("t") + "," + webcode;
StreamWriter writer = new StreamWriter(fnam, true, Encoding.GetEncoding("Shift_JIS"));
writer.WriteLine(webcode);
writer.Close();
}
catch
{
stopflag = 1;
}
}
475 :
デフォルトの名無しさん :2011/02/03(木) 17:16:57
イデオーン〜
アイディーイーワンじゃね?
オヤジギャグにマジレスされると気まずいな....
HashSet.Containsって何をもって等しいと判断しているのでしょうか? object.Equalsで比較するような動作をさせたいです。
ハッシュ系の比較はGetHashCode→Equals 両方オーバーライドせんと警告が出るだろ?
お世話になります。 StreamReaderでtxt形式ファイルのテキストを取得する感じで、 doc形式ファイル内のテキストをstringとして取得したいのですが、 関数など無いものでしょうか……?
482 :
デフォルトの名無しさん :2011/02/03(木) 20:49:15
>>473 思いついたアイデアがあるけど詳しくないので今調査中
知ってる人があったら補足をよろしく
以前何かの関係で調べてた際にIEはキャッシュの再取得をなかなかしない設定だった
(なるべくローカルのキャッシュを利用)する傾向が高いとかで意図的に期限などをいじらないとだめだとかなんとか
で、今その期限をいじれそうなところ調べてるんだが(たぶんwebBrowser.Uriのところ)・・・
>>481 Microsoft.Office.Interop.WordのRange.Textあたりじゃないか?
Office非依存にしたいのなら知らん
あーwebBrowser.Uriじゃないわ webBrowser.Navigateにオーバーロードで追加ヘッダとか入れれるジャン・・・
>>479 既定ではHashSetの比較はEqualityComparer<T>.DefaultのEquals
つまりTがIEquatable<T>を実装してなかったらGetHashCode/Equalsを使う
486 :
デフォルトの名無しさん :2011/02/03(木) 21:20:02
こんな書き方でいいみたいだけど
webBrowser1.Navigate("
http://www.hoge.com ",null,null,"Cache-Control: no-cache");
>>486 ありがとうございます
早速試してみます
>>480 、485
ありがとう。
なるほど、コンストラクタで指定するんですね。
489 :
487 :2011/02/03(木) 21:45:38
やってみたところダメだったみたいです
490 :
デフォルトの名無しさん :2011/02/03(木) 21:59:34
webBrowser1.Navigate(u, null, null, "If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT"); 古い日付を与えて無理やりバージョン というかこの辺はあまり利用してる人がいないのか国内に情報なさそうなので MSが配ってるソースをみるとかしないと中でどうやってるかさっぱりわからん あとhttpヘッダーの勉強してくれ
あとはwiresharkなどでどういうヘッダーを送ってるか見てみろ
492 :
481 :2011/02/04(金) 18:20:48
>>483 返答が遅くなりましたが本文の取得に成功しました。
ありがとうございます。
ただ、テキストボックスの内容も必要との事で、
方法をググって探しています。
_Document.Shapes→Shape.TextFrame.TextRange.Textで値自体は取れる 本文と上手くつなぎ合わせる方法は知らない
ぷぅ〜
ぷいにゅー
.netFramework2.0(サーバ)、ASP.net(WebApp)で、 サーバはpng画像を定周期で出力、Webはaspx.csでサーバが出力した画像パスからバイト配列にしてResponseにして返す って処理なんですけど、ファイルアクセス競合ってどうやって防ぐべきなんでしょう? サーバ側は画像保存前後でlockファイルとか作って、web側はlockがある場合は消えるまでリトライ、とか考えたんですけど 結局競合する瞬間はあるし…。 JMeter使って検査するとIOException出ちゃいます。 みなさんこういう場合ってどういう対処しますか?
498 :
デフォルトの名無しさん :2011/02/08(火) 03:31:50
名前付きミューテクスとか
ロックファイルを作るならFile.Exists()使っちゃダメ ロックファイルを開けたらそのまま所有して操作するって風にしないと競合は防げない まぁMutexのほうが便利ですけおね
画像なんぞDBに入れて管理してるからあんま気にしてない
502 :
デフォルトの名無しさん :2011/02/08(火) 11:37:49
.NET Framework 3.5 を対象としてビルドして、3.5が入っているXPで実行したところ、4.0 が必要だと言うエラーが発生しました。 とりあえず、4.0 をインストールしたら正常に動いたのですが、 これは、XPの問題なのでしょうか?それとも、開発側のビルドの問題でしょうか? 開発環境は、Vista、VS2008で、ビルド対象のフレームワークは3.5にしてあります(4.0 は選択できない)。
503 :
デフォルトの名無しさん :2011/02/08(火) 11:41:21
>>502 インストーラのFWが4.0になってると思われ
504 :
502 :2011/02/08(火) 11:51:02
>>503 早速のレスありがとうございます。
今のところEXEで配布しているため、インストーラは使用していません。インストーラが .NET を使う場合は注意なのですね。
また、LINQを使っていないEXEに関しては、対象を3.5にしてビルドをしても、2.0 だけ入っていれば、動きました。
505 :
デフォルトの名無しさん :2011/02/08(火) 11:54:24
VS2008が入ってるマシンって4.0も入れてる?
4.0のDLL参照設定に入れてたりしてな
507 :
502 :2011/02/08(火) 12:09:05
>>505 「プログラムと機能」には、「.NET Framework 4.0 Extended」など、4.0 とつくものが 5つ入っています。
以前2010をインストールして、すぐに削除したこともあり、その影響でしょうか。
>>506 特に参照設定の追加は行っていないです。
508 :
502 :2011/02/08(火) 12:35:57
>>503 >>505 >>506 すみません。原因がわかりました。
難読化する際に、4.0 の ilasm.exe を使うように設定しておりました。
お手数おかけしました。
おヴァカ
あるライブラリのデータ部分にIntPtrを渡すことができるんですが、 ここにファイルのデータを直接渡すことは可能でしょうか? 一度bytesに読み込んだ後にGCHandle.AllocでPinすれば渡せることを確認しています ファイルマップなどを使用して直接渡すことはできないでしょうか・・・
できるよ Win32APIでファイルマッピングしても良いし .NET 4ならSystem.IO.MemoryMappedFiles名前空間のクラス使っても良い
ありがとうございます。 早速やっているんですが、データの先頭を表すIntPtrが取得できません MemoryMappedViewStreamのPositionPointerでbyte*が取れそうなんですが、 実行するとNotSurpportedExceptionが発生します。 また、できればunsafeコードを使用しないでやりたいのですが、 どうやればデータの先頭のIntPtrが取れるんでしょうか?
SafeMemoryMappedViewHandleのAcquirePointerかDangerousGetHandle
できたぁああ!できました! unsafeは避けられそうにないですが、これで満足です。 ありがとうございました!!
unsafeくらい使えよ 画像処理とかやる時、全然違うぞ
配列をアンマネージ領域にコピーしたりその逆をしたりするなら ポインタ触るよりMarshal.Copyの方が速いけどな
>DangerousGetHandle いつ見てもいい名前だ
.NET Reflector 終了だなんて。
差額$60ならPRO買うな
520 :
デフォルトの名無しさん :2011/02/08(火) 22:54:50
まじで? 代替品はないのか?
英語圏の.NETerの間では、フリーの逆コンパイラー作る?とかなんとかいう議論も出てるけどもねぇ。 いいツールだから自分はお金出してもいいけども、 初心者のハードルは上がっちゃうよなぁ。
522 :
デフォルトの名無しさん :2011/02/08(火) 23:16:09
>>521 なんかその辺の流れはどうにもならない見たいねw
フリーで作る->多機能化その他で有料化へ踏み切る->他所が・・・
今のうちにダウンロードしといたらいいやん
今月末までに登録しとけば次のCLRのバージョンアップまではそのまま使えるんだろ 5,6年は先でしょ
今使っているものも登録しないと使えなくなる?
526 :
デフォルトの名無しさん :2011/02/09(水) 23:16:24
>>526 高校ってそんな暇なのか?(中学校の時には個人的にやってたけど、高校じゃそんな暇なかったな…僕が無能だからか)
とりあえず、ぱっと思いついたことを箇条書きにすると
・変数名はもっとわかりやすく。ましてや関数外で宣言されたメンバー変数なんて。
・確かに日本語は使えるけどさ…使わない方がよくね?
・リソースファイルから引っ張ってくるのも良いけど、同じサイズの画像なら、ImageListを使う手もあった
・カードの画像は一度、配列に放り込んで二次元配列なりで使えば、遙かに楽になるな。
ジョーカーとかは14番目のカードとするか、ラッパーになるような関数内で特殊処理するなりして。
・PictureBoxも配列・リストに放り込んでおくなりするとよかった。
・細かいところだけど、関数の途中で変数宣言するのはイクナイ癖。やるにしても、ブロックを作ってその中にするべき
・というか、isFlashなんていう大量の変数を作るくらいなら、列挙型なり、集合型…はC#にはないか、まあそいつらを使うと良い。
・i i2 i3なんて変数をforループのたびに作っちゃうなんて…先生もっと生徒のサポートしろよ
・usingはC#特有とはいえ、せめてtry finallyぐらい指示してあげなさいよ>先生
・c1 c2…なんて変数を宣言した時点で配列に仕様と思わなかったの? というかなんかレジスタっぽくって嫌。アセンブリ嫌い
・つうか、何このスクリプトで出力しました的なコードは…怖いよ
とは言え、よく頑張った。
パソコンに普段触れてないやつが初めてやったプログラミングにしては上出来な方だと思うよ。
ある意味、理想的な「初心者が組んだコード」を地でいっててすばらしい。
ま、そうなる前に周りの人が止めるから、そういうことにはまずならないんだけどな。
528 :
デフォルトの名無しさん :2011/02/10(木) 00:27:32
>>527 ですよね・・・
なんとなく分かるところと分からないところがありますが
私自身もなんでこうなった感じはあります・・・
高校じゃこれが限界・・・
先生はあんまりサポートしない
っていうか個人でがんばるみたいな
まあ工業系の高校で、しかも電気の情報だから勉強してみよかみたいな?
先輩たちもやってるみたいだし
三年の一年間だけ・・・
なんで学校のせいにしてんの?馬鹿じゃねーの 少ない小遣いで参考書吟味して独学する覚悟のないやつがプログラムやるんじゃねーよボケ
>>529 プログラマーとして働く事になる覚悟がないやつは子供の頃からプログラムやっちゃいけない、も追加
>>528 高専の電気情報工学科と工業高校は別な? 工業高校ならそれでも仕方ないかな?
高専ならまずい。もう少し、学力というか、学ぶ力を身につけないと。
>>・細かいところだけど、関数の途中で変数宣言するのはイクナイ癖。やるにしても、ブロックを作ってその中にするべき ソース見ないでケチつけるのもなんだけど、なぜイクナイのか意味不明
>>527 の内容はかなり恣意的な内容だと思う
日本語使うなって言ってるけど、
微妙な英語力でラノベの超能力名みたいな英語書くくらいなら
日本語で書いたほうがいいに決まってる
変なクセつけさせるなよ
途中で宣言するのはわりとよくやるわ
535 :
デフォルトの名無しさん :2011/02/10(木) 01:49:04
>先生もっと生徒のサポートしろよ 教師に期待する方が・・・ 日本式横並び詰め込み方式さえできれば優秀とされる使えない人種なのに
・クラスに宣言した変数(メンバ変数) は 1 箇所にまとめること。上の方とか下の方とかに。 C# はいっぱい文法があるけど、どれもコードの綺麗さを保つ上で重要なものが多い。 徐々に覚えていくといいよ。 まあ、ちゃんと動いてるんだから上出来。俺の初心者の時を思い出した。。 バグが消えないんだよな。。今になっても俺はバグと戦ってるけど。 最低限、ブレークポイントをおいて、ウォッチ式使ってデバッグ出来るようにしておくといい。 ぜんぜん違う。 あと、擬似乱数生成器についてちゃんと理解できてない気がした。 Random rand1 = new Random(); // new Random(1); Random rand2 = new Random(); // new Random(2); for (int i = 0; i < 10; i++){ Console.WriteLine(rand1.Next()); Console.WriteLine(rand2.Next()); Console.WriteLine(); } これを動かしたら何がいけなかったかわかると思う。(コメントの部分と差し替えてやってみて)
537 :
デフォルトの名無しさん :2011/02/10(木) 01:56:33
プログラムの中身は見てないけど >>・細かいところだけど、関数の途中で変数宣言するのはイクナイ癖。やるにしても、ブロックを作ってその中にするべき こういうのは論外ですね Cがそれしかできなかったからって古い悪習を強要するのはやめろ こういうやつが開発現場にいると激しく開発効率が下がるってしばしばコラムでも糾弾の対象になる >>・usingはC#特有とはいえ、せめてtry finallyぐらい指示してあげなさいよ>先生 これも論外
C# というか、.NET 系は割と日本語変数名に抵抗感少ない文化。 何でもかんでも日本語って人はさすがに少ないけど、enum のメンバーとかは普通に日本語使う人多い。 変数は使う場所の直前で定義するのは C# に限らず、C++ の頃から言われてること。 関数の先頭で宣言とかありえない。 using は普通に教えた方がいいと思う。
539 :
デフォルトの名無しさん :2011/02/10(木) 02:12:47
変数でクソ長い複雑な英語考えるなら素直に日本語使うほうが見やすい 先頭は英語で初めて日本語を続けるようにするとVisualStudioのインテリセンスが使いやすくなる
540 :
527 :2011/02/10(木) 02:26:22
途中で宣言するのはやっぱりありか? たしかDelphiかなんかの参考書に、どうしても途中で宣言したくなるようなことがあれば その関数が必要以上に長く・複雑になってるから 別の関数に分けられないかどうか考えろって話だった希ガス
$日本語 = ""; こんな感じで先頭に$がつけられたらいいのにといつも思う 今は_を付けてるけどこれってprivate変数と同じ意味で気持ち悪いのよね
>>540 馬鹿初心者に触ってる時点でお前のレベルが知れる
543 :
527 :2011/02/10(木) 02:36:17
>>537 なぜに二重引用かわからないけど、とりあえず
>>>・usingはC#特有とはいえ、せめてtry finallyぐらい指示してあげなさいよ>先生
>これも論外
え?それじゃあ、例外機構いらないって話?
何のためにtry finallyを拡張したusingまで用意されてると思ってるの?
確保したりソースは確実に解放できるようにすべきじゃね?
それとも例外機構がある言語でも戻り値が-1か調べてやれってこと?
それこそ昔の悪しき習慣だと思うんだが?
>>539 それ良いよね。個人的なプログラムを書くときに、それ使ってる。
>>543 死ね
死んで速やかにふらっとに行け
ここは初心者相手に講釈垂れるスレじゃない
あと
>>526 も二度とくんなよ。お前は存在がスレ違い
たいしたネタないんだから、にぎやかしにたまにはいいよ。こんなのも。 市ねとかいってるほうが、さっさとどこかにいったほうが吉。
Cからの復帰組としては参考になる部分もあるから続けてください。
的確な指摘をするならともかく
>>527 みたいに間違ったことを平気で広めるやつは害悪すぎる
マジでやめてくれ
初心者は真に受けちまうからな
あとスレ違いであることは間違いない
>>547 初心者は初心者スレ行けよ
しょーもない議論でレス流されたら迷惑
>>527 マ歴2年くらい?
まだまだ人に教えられるレベルに無いよ
あんま自惚れちゃいかん
マ歴半年でもあんな指摘しねえ ただしみながわさんは除く
いやいや、むしろ527大先生はよほど実力をお持ちの方だとお見受けした こんな素晴らしいアドバイスを下さる大先生がお書きになったコードが是非みたいですマジで
>>526 遊んでみた
最初から並び替えといてくれると親切かな?と思った
きたままでFlashだったんで交換なしで”交換”ボタンおしたんだけど
カードが小さい順に入れ替わって何となく違和感を感じた
いきなりでこれだけ出来りゃ十分だとおもうよ
自分が教えてるなら
カード1枚の情報をクラスに分離してやってみて
とか言うかも
いい雰囲気のところぶった切って済まない アセンブリ参照についての質問で、C#あんまり関係ないかもだけどどこで聞いたらいいかわからないのでお願いします アセンブリA、Bと、メインプログラムXがある XはA、Bを参照し BはAを参照している Bが参照しているAは、Xが参照しているAより古いバージョンのものである この状況で古いAと新しいAがGACに登録されていれば正しく動作するものの、 実際の運用ではサイドバイサイドで運用したいと思っています そこで、Xから参照するAのみ、厳密にパスなどを指示すればできると考えましたが app.configにそれらしい設定をすると、BからもそちらのAを見に行ってしまい、バージョンが異なりエラーとなります Xから参照するAのみパスを指定するにはどうすればいいのでしょう もしくはほかの方法がありましたらお願いします
む・・・自己解決できそうな予感です
app.configの指定がちょっとおかしかったようです 以下の指定でうまくいきました。お騒がせしました <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="A" culture="neutral" publicKeyToken="xxxxxxxxxxxxx"/> <codeBase version="4.0.0.0" href="A_New.dll"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="A" culture="neutral" publicKeyToken="xxxxxxxxxxxxx"/> <codeBase version="2.0.0.0" href="A.dll"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
558 :
デフォルトの名無しさん :2011/02/10(木) 16:27:44
>>545 すみません・・・
きちゃいました
>>554 ありがとうございます。
実は最初のところでも並び替えしようとしてたんですけど、
なぜかできませんでした・・・
時間もありませんでしたし・・・
そうですね・・・
すべて自分が悪いんです・・・
質問者に答えてくれる皆さんが素直にすごいと思いました。
ブレークポイントってすごく便利ですよね。
今回何度も助けられました。
続きは ふらっと で
プログラムをいじっていたら何か変なところを消したのか付け加えたのか、一斉に大量のエラーが出るようになりました。 自分は根本的なところが分かっていないので何を直せばそのエラーが消えるかさっぱりわかりません。 なので10分くらい前の状態に戻ってやり直そうと思ったのですが、うまくいきません。 最初はアンドゥを繰り返してみたのですが何故か元に戻りません。 ならばとりあえずいったんセーブしないで終了して、今回の作業を開始する前のファイルで起動すれば前の状態からできるだろうとやってみたので すが、何故か、前の状態のが残っていません(勝手にセーブされている?) 一体こういう場合どうすればいいでしょうか?
あんどうくんにたのめ
こまめにバックアップを取って保管しておくべきだった・・・としか・・・
前提としてメッセージが無いと分からんが、一斉にエラー出るのは参照関係じゃないかね あるいはデータセット他の大物クラスを破壊したとか
>>561 デバッグを始めると保存されたんじゃなかったかな・・・?
差分を取ったりと管理してなければプロジェクト丸ごとコピーして履歴管理するしかないと思うよ
そのやってるプロジェクト一式は公開できる?
その書き込みだけでは何が起きてるかなんてさっぱりわからん
>>561 Formのコードだったら、デザイナのコードを開いてundoしてみ?
VisualStudioが勝手に作成する参照関係はバグる事あるね 外部のメーカーのライブラリ導入してるときとかに起こる
>>561 エラーを全部記録してアップしてみれば?
569 :
561 :2011/02/11(金) 00:14:00
みなさん、色々すみません。
本当に助かります。
まず、一回、ビジュアルスタジオ自体を終了しているのでアンドゥがもう出来ません。
おっしゃるとおり、こまめにバックアップ取るべきだということを痛感しました。
ほんとに事あるごとにとらないと私のような人間には対処不能になってしまい、恐ろしいです。
デバックすると保存されるんですね。それは知りませんでした。
以後気をつけます。
一応、ソースを公開します・・・・。
http://amer.web.fc2.com/owata.txt もう何がなにやら・・・・。
public static extern long PlaySound(String lpszName, IntPtr hModule, Int32 dwFlags);の前の}が要らないな
>>570 だね、そこでクラスが終わっちゃってるからエラーが出てる
それにしてもずいぶん古い形式のソースだな
もしかしてVS2003とかじゃね?
VS2003だね 会社で2003使うように強制されてるのか? だとしたら哀れすぎる 2005から格段に良くなってるのに ジェネリックも使えないし そんな会社嫌すぎる
ジェネリックも辛いけどラムダ式使えないのは拷問に近い
>>570 2分で解決・・・・・・・・orz
ありがとうございました・゚・(つд`)・゚・
VS2003?
よく知らないのですが、同じく2chで教えてもらったタダで使えるというビジュアルC#2010エクスプレスというのを
マイクロソフトからダウンロードして使っております。
会社ではなく個人で使ってます。
あれ?もっといいのがある・・・???(゚Д゚;)
VS = Visual Studio(有償) Visual C# Express は Visual Studio のサブセット。
576 :
574 :2011/02/11(金) 00:55:33
そうなのですか。 その教えてもらったスレの人を悪く言うつもりもないのですが、エクスプレスだと色々足りない機能があるという 説明がMSのサイトにあったので、そういうのがないエクスプレス使っても大丈夫?とスレで聞いたら、「その足りない 機能というのはお前程度なやつには不要な機能。エクスプレスで充分」と言われました。 だから、エクスプレスでいいのかな〜と思ったのですが、うーん。 ジェネリックとラムダ・・・・。 ちょっと調べて出直してきます。
>>574 クラスにあるはずのものが無いってエラーなので、}が多すぎるのを疑って、
あとはpublic class Form1の横の「-」をクリックして場所を特定すれば解決だよ
VS2010で作ると、designer.csってのが出来るはずなんだけど、どこかのコードのコピー改変かな?
>>569 caseの使い方が恥ずかし過ぎて
痛々しいコードだな
>>576 絶対おかしい
ビジュアルC#2010エクスプレスならジェネリックもラムダも全部使えるし
そんなソースが自動生成されることはあり得ないし
絶対2003で作ったソースだろ
>>576 とりあえず初心者さんはC#の初心者用スレがあるからそっちいってくれ
初心者のコードの添削とかしょうもない講釈とか始まるからうざいんだよ
2010も入れてるけど前に入れてた2003で作っちゃったとか? ちなみにExpressといえど出欠大サービス(死語)だぞ まあある程度ごりごり書いて公開とかのになると難読化してー とかクラス図作りてーとかでExpressは不満に思うけどそこまでまずはいかねーだろうし 仕事で使うなら会社に買ってもらえ(もしくは買え)ってところだな
>>576 うん、お前程度にはエクスプレスで十分。
Expressかどうかの問題よりも、バージョンの問題じゃね?って言われてるわけよ、今は。
2003→2005→2008→2010と、使える機能増えてるわけだけども。
いい加減初心者弄るのやめない? 初歩的すぎて誰の得にもならない助言とか時間の無駄だし そういうの初心者スレでやるべきだと思うけどなぁ。 何でそんなに初心者構うのか分からない。 …また騒ぎになるからこれ以上はやめとこ!
ここも初心者スレのようなもんだけどねw まー古いバージョンのIDE入れてるなら削除しちゃった方がいいけどね WinForm書くのであればVC#2008でも十分だしな OSやマシン次第では2008の方がサクサク動くし 最近はSL関連書いてるからVWD2010使ってるけどもっさり気味・・・
586 :
デフォルトの名無しさん :2011/02/11(金) 01:34:24
初心者スレは初心者が初心者をバカにするスレだからお勧めできない 別にスレ違いでも、過密スレでもないのに騒ぐなよ
こっちは中級者が初心者と中級者と上級者をバカにするスレだよなwww
588 :
デフォルトの名無しさん :2011/02/11(金) 02:03:27
「出欠大サービス」は死語どころか日本語じゃないと思うんだ 「今日は大サービスで出勤したことにしてやる」なんて良い上司だな
System.Random r = new System.Random(); for(int i = 0; i < 10; i++) { int j = r.Next(i + 1); num[i] = num[j]; num[j] = i + 1; } ってやれば空の配列に数字を入れながらランダムにできる
↓分布がどうたらという聞き飽きて既に何回目だか分からない指摘
OrderByは評価関数を一度しか呼ばないからなんたら
>>588 花粉症の季節には何度かそのありがたいサービスつかってます。
あるクラス内の配列を呼び出すときに場合によってその対象を差し替えたいのですが ポインタの使えないC#ではどのように記述すればよいでしょうか 具体的にはXNAで描画するときの頂点配列verticesなんですが 今は重いデータと軽いデータ両方の頂点配列をpublic宣言して そのクラス達を管理してる外側で描画時にif文でDrawUserPrimitivesに渡すもの自体を切り替えていますが あまりスマートでない気がします プロパティで参照すればいい気もしますが都度コピーしていては効率も悪いので 何かいい方法はないでしょうか
配列の中身が値型でも配列は参照型だから 普通に参照返すだけなら中身まではコピーされないですよ
>>593 private double[] vertLarge;
private double[] vertSmall;
private bool Large = true;
があったとして
プロパティで
public double[] vertex
{
get
{
return Large == true ? vertLarge : vertSmall;
}
}
じゃいかんの?
仮に何かにコピーして返したとしても、
>>594 が言うように配列の変数自体は参照を持ってるだけだから、中身全部コピーなんていう ことにはならない。
XNAはよくわからんが、OpenGLの知識で行くと毎回頂点配列をメモリに送っていること自体がもったいないと思う。
OpenGLでいうところのVBOみたいなのがあるのならそれを使うべき。
>>594 あ,なるほど勘違いしていました.
どーもです.
状態ごとに
vertices = omoi;とか代入しておけば
描画時にはverticesを呼び出せばいけると.
追加で申し訳ないのですが
型の違う配列になったらさすがに分岐しないと無理ですよね
まだちょっと重かったので軽いモデルでは法線情報を削り
<VertexPositionNormalColor>と<VertexPositionColor>を使い分けたいのですが
つくづく自分の設計能力の低さを実感orz
>>595 道理でしょぼいプログラムが重いわけですね
C#もXNAも始めたばかりなので勉強になります.
今ならXNAよりunityのほうがいいんじゃない? XNAが勝ってるところが思い浮かばない。
別にXNAはゲームエンジンじゃないんだから比べるのはおかしい 特定のゲームエンジンの勉強しても他の環境では全く役に立たないけど XNAは生DirectXに近いから知識の応用も広い
ましてや構文はC#だしな
>>600 それがさ、unityもC#で、しかもネイティブに変換できて
ブラウザ含めマルチプラットフォームという…。
使いたいやつを使えばいいよ
603 :
デフォルトの名無しさん :2011/02/16(水) 11:48:26
使えばいいよ
レキシカルクロージャといって、クロージャにキャプチャされるのは変数の値じゃなくて変数そのもの。 foreachの繰り返し変数はループ全体で使い回されるから、 すべてのクロージャが一つのitemを共有することになる。 a b cと出力させるには、ループの中でvar item2 = item;と宣言しなおして 取り込む変数のスコープを一回のループだけに限定してやればいい。
>>605 なるほど!ポインタ渡しのようなものなのですね
ありがとうございました
XElementで生のタグをそのまま入力する方法はないでしょうか? XHTMLを処理したいのですが XElement("div", "aaaaaaaaaa<br />bbbbbbbbb"); のような書き方をしたいです 元の文字列をパースしてXNodeに変換すると、 異常に手間がかかってしまうので直接入力する方法が知りたいです よろしくお願いします
>>607 そんな風な汎用メソッドを一つ作ればいいんじゃないかと
XElement hoge = fuga.moge("div", "aaaaaaaaaa<br />bbbbbbbbb");
C#でwebサイトのソースコードを取得するプログラムを 作ってますが、javascriptが出力するソースコードが取得できません。 firefoxの「選択した部分のソースコードを表示」の機能で表示することはできます。 どうしたらC#のプログラムから取得できますでしょうか。
そういうのはjavascriptを動かすしかないんじゃないの? それとhtmlヘッダーに書かれてるjsを取得したいだけってことはないよね?
Ajaxで取得して来てるデータを取りたいなら、Chromeとかのツールで通信を見てそれを真似てリクエストを送ればいいだろうけど...
>>608 ,609
XElement hoge = new XElement("div", XElement.Parse("aaaaaaaaaa<br />bbbbbbbbb"));
これでいけました。ありがとうございました!!
>>611 >>612 webBrowser.Document.Body.OuterHtml
これでいけました。ありがとうございました!!
615 :
デフォルトの名無しさん :2011/02/18(金) 01:19:41
どういたしまして
HashSetで意図した比較ができません。 どこが間違っているのでしょうか? class CTest : IEquatable<CTest> { public bool Equals(CTest other) { MessageBox.Show("call"); return true; } } CTest test1 = new CTest(); CTest test2 = new CTest(); bool test = EqualityComparer<CTest>.Default.Equals(test1, test2); //呼ばれる HashSet<CTest> set = new HashSet<CTest>(EqualityComparer<CTest>.Default); set.Add(test1); set.Add(test2); //呼ばれない
HashCode違うのに呼ばれるわけないだろあほ
>>616 IEquatable<T>だけを実装してはいけない
実装するならObject.Equalsもオーバーライドして、同じ結果を返す必要がある
GetHashCodeの実装も必要
そもそもIEquatable<T>は構造体のEqualsのパフォーマンスを上げるために実装するもので
クラスに実装する必要はない
IEqualityComparerがEqualsとGetHashCodeの両方の実装を要求してる時点で気付け
IEqualityComparer<T>は値型のボックス化を防ぐためだけに存在する クラスならEqualsとGetHashCodeをオーバーライドするだけでいい 実際、structにするとIEquatable<T>.Equalsが呼ばれるようになる
>>620 訂正
IEqualityComparer<T>ではなくIEquatable<T>だった
622 :
616 :2011/02/18(金) 21:22:29
なるほど。 ありがとうございます。
フォームのコントロールにバインドされているBindingList<T>のメソッドって UIスレッド以外から呼び出して大丈夫なんでしょうか?
例外は起きないけど無反応っぽ
ありがとうございました!UIスレッドで実行するようにします
例外起きないんだ。 意外だな。 Formsの中で勝手に処理してしまってる可能性もあるか?
プロの方、知恵をください 他のクラスで使いまわしたいstaticなメソッドを集めたユーティリティクラスがあります。 このクラスを 「継承せず」 にクラス名の修飾無しでメソッドを使うベストなプラクティスはありますか? Javaで言う static import みたいな事です。 例 namespace NS1 { public class UtilClass { public static Method1 {} } } namespace NS2 { ここで Method1 を修飾無しで使いたい。 }
普通にusingするだけでは? でも、個人的には「クラス名の修飾無しでメソッドを使いたい」なんて要求は、 たぶん正しくないと思うんだよね。 コード書くときのことばっかり考えて、後で見直すときのことを考えてないんじゃないの?
629 :
627 :2011/02/19(土) 19:02:43
>>628 using だとクラス名の修飾が必要になるかと思います。
UtilClass.Method1 のように
四則演算や配列操作をまとめたユーティリティクラスなどはよく作られると思いますが、
拡張メソッド以外のスマートな呼び出し方がないか探しています。
630 :
デフォルトの名無しさん :2011/02/19(土) 19:05:01
修飾有りでいいんじゃないの? Sin Cosなんかだって Math.Sinとかじゃん
探したってないものはないのだし、潔くJavaに戻るのがいいのでは
意図的に修飾を強要してるんだよ オブジェクト指向を崇拝してたくせにVBみたいな機能を後付けしたJavaのほうがおかしい
クラス名は名前空間じゃない。
なんていうか、慣れるとか合わせるって発想はないのかね?
別にそういう機能があってもいいとは思うけど、名前被りが嫌そう
>>633 Cみたいなスタイルのコーディングを助長するという意味だよ
モジュールを使ったVBのスタイルと言ってもいいな
拡張メソッドならスマートってのも危険な兆候
多用しないほうがいいのはもちろんだけど、特定の型に対してメソッドを追加するのと グローバル空間にメソッドを追加するのでは名前が被る可能性が全然違う
話はそれるけど、VBのModuleをC#で書きたいならこう書ける。 using Microsoft.VisualBasic.CompilerServices; [StandardModule] public static class StdModule { public static int Mul(int i, int j) { return i * j; } } これでVB側ではクラス名の修飾なしで使えるからVBを使えってことで。
VB(と言っても.NET以前の)でもむしろモジュール名で関数名を修飾して書いてたけどな。 余程小さなプログラム以外は
ToolStripのTabStopをTrueにしてSHIFT+TABキーでフォーカス移動すると ToolStripから後ろに戻れないんですがこれバグですか? (TABだけならちゃんとループする)
2005です
>>642 バグでしたか、とりあえずGetBaseExceptionをオーバーライドして回避出来るみたいですね
ありがとうございました
1.独自のユーザーコントロールを張り付けたコンポーネントクラスがあるとします 2.このコンポーネントクラスを継承してコンポーネントクラスを作ったとします 継承先のコンポーネントクラスで、1.で張り付けたユーザーコントロールのメソッドを使いました。 このメソッドは継承元(base)のもの?継承先(this)のもの?
>>646 継承しない場合はそのメソッドを使うには1で貼り付ける予定のコントロールを
newして・・とかしないと使えないよね
つまりそういうことです
オーバーライドしたともnewしたとも前提条件がない訳だけど、どう答えることを期待されてるの? ストレステストなの?
ユーザーコントロールは「貼りつけた」とあるだけで継承も何もしてないからbaseもthisもないと思うんだが・・・
>>641 が何を言ってるか理解できた
>>642 のエスパー力凄いな。
俺には何を言ってるのか全然理解できなかった。
その独自のユーザーコントロールは、公開していなければ、どっちみち継承先で使えないのでは?
>>650 おう、もっと褒めてくれ
ま、リンク先のstringリテラルだけ見れば意図は分かると思うし、
>>641 本文も変なことは言ってない
そして私は天才・・・ふふ・・
皆XML読み書きしたりする時にどうやって書き込んでる? やっぱXmlWriter? あと、対象の属性・要素検索したり取り出す時に使うのってLinqToXML? 他の人が標準的に使うやり方でやってみたいけど標準が判らない
msdnは見ないのかね
XmlWriterを直接使うのはストリーミング処理が必要なときだけ 書き出しや検索はLINQが使えるならLINQ to XML 使えないならXML DOMとXPath
>>656 MSDNとかで調べたら
Xml.XmlDocument
とかで書いてるのは紹介されてたりしたんでそれ使ってたけど
今風の使い方的な?
XmlDocumentは使いにくいからスクリプト言語っぽくDOMを再設計したのがLINQ to XML
なるほど 基本的にLinqToXMLでやっておくのがこの先 妥当な感じがしますね。 情報ありがとうございます。
LINQ to XMLは読み書きも検索も共通のモデルで扱えるのが便利だよな XPathをいちいち思い出さなくてもLINQだけで検索できる
XPathも普通に使うけどね
XmlReaderは悪夢だった Linq最高
LINQ to XMLもXML DOMも下層にXmlReader/XmlWriterを使ってる
666 :
デフォルトの名無しさん :2011/02/21(月) 16:30:24.87
C#って、 1バイトのプリミティブ型が4つ並んでる配列があったら それを直接4バイトのプリミティブ型としてキャストする事は出来ますか? Cで言う、char型が4つの配列の先頭アドレスをintとして扱う、というような事です。 unsafeとかを使えば可能ですか?
BitConverterでどう?
668 :
デフォルトの名無しさん :2011/02/21(月) 16:34:38.22
>>666 Marshalクラスのメソッド一覧眺めてみたらたぶんあるよ
>>666 unsafeならCと全く同じことができたはず
670 :
デフォルトの名無しさん :2011/02/21(月) 16:51:52.30
unsafe、fixedでポインタを使えばいい
C#でJavaアプレット的なWEBページでクライアントサイドで動くアプリって作れますか? どういう名称ですか?
クイズなら自分で調べろ
クイズ100人に聞きましたの問題作成準備かも知れないぞ
え、何?SilverLight?
C#使いってつくづく糞揃いなのはなんでだ? MSごと切っちゃった方がいいかもな
676 :
671 :2011/02/21(月) 19:46:23.80
>>675 は僕じゃないです。
引き続き情報待ってます。よろしくお願いします
comboboxでownerdrawを使いたいんですが ownerdrawを使いつつビジュアルスタイルにすることって出来ますか?
679 :
671 :2011/02/21(月) 20:06:28.77
WPF時代なんで、もうownerdrawって言葉は死語。
>>680 やっぱりそうですかー
これを機会に学んでみようかな
現実的にはWPFの時代、なんてものは来ない気もするけどね。 少なくともビジネスユーザーはそんなもの望んでない。
WebBrowserばりにレイアウトが簡単なら移行しようかな XMLでUIパーツを配置してスタイルシートで装飾みたいなことはできます?
WPFはWindows8時代から本格普及するだろうから、今のうちに覚えておくのがベスト。 MFCプログラマーだった俺が、WinFormsの習得に遅れて苦労した経験上の話。 今回は出遅れないぞと。
685 :
デフォルトの名無しさん :2011/02/21(月) 20:31:11.38
>>683 出来るよ。但しCSSにあたる物がちょっと複雑なだけで
MSDN読むの怠いんだよな、文章はMFC時代より遥かに良くなってるけど ハイパーリンクであっちこっち飛ぶ学術書を長時間読むのは辛い みんなどうしてるの?
MSDNは文章が固くて読みにくい atmarkitとか個人サイトとかで沢山資料はあるだろ WPFもしかり
689 :
デフォルトの名無しさん :2011/02/21(月) 20:42:51.40
とりあえず1,2時間で読める入門の文書読んだら何か作ってみる で、詰まったらそれをwebで調べてとりあえず完成させる 一つ作った後だと長い奴読んでも飽きずに続けられるよ
>>688 ,689
ありがとうございました。トライアンドエラーですね。頑張って勉強してきます
試行錯誤を繰り返して江戸幕府を開いた徳川家康のように苦労と忍耐こそがプログラミング。 それができない奴にプログラミングは無理。
692 :
大便 :2011/02/21(月) 21:17:58.92
MFCは悪質で違法かつ許し難い難解なクラスライブラリです。 こんなもの、さっさと廃止すべきです。
苦労と忍耐というとちょっと大げさ。 執念深さとか粘着力とかいう言葉の方が適切だと思う。 でもこれ、確かに一つの才能だとは思うが、一歩間違うと偏執狂だから、 あまり人に威張れるようなものかという気もする。 あとまあ本当に頭がいい人は粘着力なんて要らない気もするよ
>>693 そういう人はソフト作る人じゃなくて言語作ったり論文書いたりしそう
糞#とかマジで使えねーわー
あんまりJ#たんをいじめるなよ
J#たん(´・ω・`)
ダメだダメだとか言ってないで お前が一番好きな言語を褒め称える活動に精を出せよ
やっぱVB.NETかな
ここはC#スレだけどね
豚は煽てりゃ木にも登るが 人の雄は煽てても調子に乗るのがオチじゃ -電撃文庫 狼と香辛料-
もっとちゃんとした文献から引用してください
>>700 残念だけど、VB.NETはC#の ̄の上空に漂う最強なんだが?
すれはいをみないしたほうがっj
704 :
デフォルトの名無しさん :2011/02/21(月) 22:24:25.00
>>686 MSDNは初めての概念を学ぶ時に読むものじゃないと思う。
比較的分かりやすく書いてる記事でも分かりにくい。
あと、日本語版は読まない方がいい。
知らない概念のことなら、CodeProjectとかに分かりやすい記事があったりするので、
そちらを読んだほうが早い。
そのままじゃん
ところでプログラムで会話は可能だろうか
うん
まず会話の定義から
かいわれ大根ですYo!
public class 2channeler{ private void masturbation(Okazu okazu){ } } public interface Okazu{ } public class HentaiMovie implements Okazu{ } public class MysteriousHash{ }
J#スレでやれ
>>711 privateメソッドもPascalCaseで書くべきだと言っておこう。
あ、ってJavaなのか、そりゃすまん。
最近のJavaは識別子を数字で始められるのか
716 :
デフォルトの名無しさん :2011/02/22(火) 00:46:09.67
いつもすいません。lockに関する質問をさせてください。 下のようなコードでChildren.Addは排他的に実行されますか? 本来ならlock(Children)をすれば疑いようもなく排他的になると 思うのですがChildren = nullの状態を作りたいのでlock(this) をしています。 (Childrenがnullのときにlock(Children)をしてしまうとエラーになるので。) class MyClass { public List<String> Children = null; public MyClass(){ Children = new List<String>(); } public void Add(String hoge) { lock (this) { Children.Add(new Object()); } } }
717 :
sage :2011/02/22(火) 00:58:28.38
すいません。自己レスですがロックされてました。
Childrenをprivateにしなきゃダメじゃね?
うん this含め、クラス外から見えるものをロックするのは厳禁
なんで?
private readonly object _cri = new object(); private static readonly object _cri = new object(); のようなロックオブジェクトを作りクラス内だけで使うのが作法 クラス外からロックできるとデッドロックする可能性がある
彼女のロックを外したいです
readonlyは必須なの?
[NTR]
必須ってことはないだろうが、ロックオブジェクトにはそれ以外の機能を持たせることはねぇだろうし 挿げ替える必要がなければreadonlyにしておくべきだろう
外部からlock(なんとか)するのもそのクラスのメソッド内でlock(this)するのも変わらない気がする
NTRはどの名前空間に属しているのですか?
>>728 ありがとうございます。そこで聞いてみます。
730 :
デフォルトの名無しさん :2011/02/22(火) 10:11:20.13
そのlock(なんとか)が知らないうちにいろんなところで行われるんだから そりゃデッドロックの可能性は上がるだろ それに、 スレッド1: lock (a) { 処理 lock(b) { 処理 } } スレッド2: lock (b) { 処理 lock(a) { 処理 } } こう書くといかにもデッドロックしそうだけど スレッド1: lock (a) { 処理 b.Foo(); } // Fooはthisをロックする スレッド2: lock (b) { 処理 a.Bar(); } // Barもthisをロックする これはわかりにくいだろ?
>>726 ライブラリの設計者もそのつもりだったけど、
いろんな人が検証した結果、
>>721 が一番無難であるという結論に達したみたいだよ
732 :
デフォルトの名無しさん :2011/02/22(火) 10:42:42.33
別にロック専用のprivateオブジェクト一個増えたところで
パフォーマンスが落ちるわけでもないしそんなに面倒になるわけでもないもん
>>721 なら少なくともそのクラス内でのロックがデッドロックにつながることはなくなるわけで
危険の大小は別にしてもわざわざ潜在的な問題を含む方法を選ぶ意味がない
>>721 みたいにして
外から値変えたい場合全部公開のメソッドとか経由で操作させるようにしてるかな
内部でprivateなロック使ってセーフな感じに
自由に外からロックかけられても困るしソフト肥大化してきたらバグつぶすのがしんどくなりそう
じゃあ俺はプロパティ
>>723 .netのreadonlyクラス変数はダブルチェックロッキングしなくても安全と聞いた
それはreadonlyかどうかは関係ない ロック用のオブジェクトなんか後で変更するわけがないから readonly付けといて損はないというだけ
DataGridView上の数値項目に 文字列("aaa"等)を入れてフォーカスが外れた タイミングにエラーダイアログが表示されてしまうのですが これを回避するにはどうすれば良いでしょうか? ※チェック処理は「実行」ボタン等がクリックされたタイミングに集約したいと思っています。
それはDataTableとかをバインドして使っている ということでいいの?
>>737 DataErrorをハンドリングしろとダイアログそのものかに書いている筈
その通りにすればいい
>>737 あ、一つ注意点が有った
エラーが起きるものはDataTableには保存されないので、表示と内部データが一致しなくなる
エラーチェックをDataTableの値を使ってやりたいなら数値カラムを止めるか、数字しか入力できないようにしないと無理
文字カラムにしてFomattingイベントで体裁を整えるようにするとか
>>739 >>740 >>741 アドバイスありがとうございます。
DGVのセル上では属性を文字列にし何でも入力可能な様
にする事により対応したいと思います。
DataGridViewで指定した行をアクティブにするにはどうすれば良いのでしょうか? 例えば、10行のデータが存在しているとして 3行目をアクティブにしたいのですがやりかたがわかりません。
743自己解決 アホに聞かなくても調べたら一発だったwww
よかったねおめでとう
これからも、自分で調べるのがいいと思うよ
YES → 【ヒットした?】 ─ YES →最初からググレカス。死ね。 / \ 【検索した?】 NO → なら、ねぇよ。死ね。 \ NO → 死ね。 まさにこれだな
プリプロセッサでc#のバージョンや.NetFrameworkのバージョンを取得することはできますか?
2分木
>>750 不可能
プロジェクトのプロパティでNET_VERSION_4とかCS_VERSION_4のようなシンボルを自分で定義しておく
オーバーロードが多いと継承時にコンストラクタ書くのめんどくさくね? これには何か意図があるの? コンストラクタはスーパークラスでキャストされた状態で呼ばれる事は無いから インターフェイスを合わせる必要が無い事ってのは分かるんだけどさ。
なんか上手い方法考えて開発チームに教えたれ
抽象クラスや継承前提のクラスはそんなにコンストラクタ多くないでしょ めんどくさいと感じるほど継承なんか多用するもんじゃない
: base(・・・)で引数渡すだけじゃん 見せたくない基底クラスのコンストラクタって、見せたいのと同じくらいあると思うよ デフォルトで基底クラスのコンストラクタが見える仕様だと、隠すための特別な構文が必要になって格好悪い
757 :
753 :2011/02/27(日) 15:16:55.65
オレが少数派だったか… JAVAが長いからかな? 確かに見せたくない場合にはいいね。 でもコンストラクタで渡すものって大体プロパティあるしそっちも消すの? (隠蔽+Editor属性だっけ?)
似てるようでJavaとはぜんぜん違うんだな
>>757 が何を言おうとしているのか理解出来ない
コンストラクタって初期化時じゃないと整合性を欠くパラメータか 利便性のためのもののどちらかでしょう
>>757 こういうのは多いと思う
Hoge(a, b) : base(a, b, b.A)
761 :
デフォルトの名無しさん :2011/02/27(日) 22:25:48.96
自分で Exception またはその派生クラスから、派生させて例外クラス作るとき、 コンストラクタを何パターンか用意するのがめんどいとは思う。
Excaption<Tab><Tab>でかなり楽になる
必要になってから書くようにするか、 派生例外クラスを出力するプログラム組めば?
基底クラスと同じパラメータなら、アドインとかの機能で自動生成するだけじゃないのか?
T4で簡単に作れるな
そんな機能があるの…
ApplicationExceptionから派生させるのがマナーと聞いたんだが、そうでもないの?
けっこう前に、ApplicationExceptionから派生させても特に意味がないってことになって、そのルールは推奨されなくなった
[Editor(typeof(FileNameEditor), typeof(UITypeEditor))] この属性をプロパティにつけると そのクラスのシリアライズに失敗します。 つけなければ問題なく保存できます。 なにか対策ありますでしょうか。 実行環境はWin7 32bit .net 4 Client Profile です。
シリアライズされるようなクラスに付けるような属性じゃねえような まぁいいか 失敗したときに例外くらい出てないのか? それを書けよ。一字一句もらすなよ
>>770 確かに属性がシリアライズ不可なだけかもしれません
例外は「シリアライズに失敗しました・・・」的なメッセージらしいです
客先のPCなので残念ながら全部はわかりません
属性をはずすことにします。
772 :
デフォルトの名無しさん :2011/02/28(月) 13:25:14.60
シリアライズする予定の物にはなるべく余計な物はつけない方がいい 一番いいのはシリアライズ用のクラスを作ってそれ経由でシリアライズ、デシリアライズした方がいい
>>772 そこまでやるとシリアライズする意味がわからなくなってXlinqになったのが俺
.NET2.0です。 メニュアイテムにショートカットキーを割り当てたのですが たまに効かなくなって、そのキーを押すとフォーカス移動 なんかが起ります。 デフォルトでフォーカス移動にショートカットキーが割り当てられて いるコントロールがあるのでしょうか?
変な質問。
LINQでTreeViewにBindingできるファイルシステムツリーのデータセットを作る エレガントな方法ありませんか?
>>774 そのショートカットキーが何かを書かないのか?
778 :
774 :2011/03/02(水) 10:57:55.46
すいません。間違えです他。 メニューアイテムがenabledになってませんでした。
779 :
774 :2011/03/02(水) 10:59:26.87
popupのときにenabledの切り替えしてる人 要注意 だよね。
>>779 enabledかどうか見りゃすぐわかるだろ
バインドするようになってからあんまりそういう目には会わんな
エレガントさに拘る奴が肝の部分を人にまる投げとか エレガントじゃねぇな
784 :
デフォルトの名無しさん :2011/03/02(水) 19:57:12.21
つうか精々数十しかデータがないファイルシステムのTreeViewで Linq使ったらエレガントじゃない罠
データの件数でLinq使うかどうか考えるのかw
LINQで統計がうんたら
統計的結果がどうたらは初心者スレの話
788 :
デフォルトの名無しさん :2011/03/03(木) 06:10:56.77
つうかDirectoryInfo使ってもApiCodePackのShellObject使ってもアルファベット順にソートされて居るのに Linq使って何をやるんだ?
>>788 MSDNでDirectoryInfo.GetFiles をみてみたら、返される順序は保障されないって書いてあったけど。
関係ないけど.NET4からはGetFilesじゃなくてEnumerateFilesが推奨 遅延評価(読み込みながらyieldで列挙が行われる)だから効率が良い
統計的結果が反映されないからLINQ引いてはyieldは駄目だ
そのネタ飽きたよ
全てのファイル情報の取得が完了するまでGetFilesの結果を取得できないって 普通に考えて糞設計だよな yieldが一番エレガントなのはもちろんだけど デリゲートでコールバックするバージョンが今まで無かったのが不思議
統計的結果とか言ってる奴は面白いと思ってんの?
統計的結果を言い出した奴は面白かったよ。
796 :
デフォルトの名無しさん :2011/03/03(木) 21:53:57.26
>>789 Treeだから使うのはGetDirectoryです。こっちは記述無いけどソートされて居たと思う
GetDirectoryがソートしてるんじゃないよ。 NTFSが名前順に並べてるから、それをそのまま返してるだけ。 ファイルシステムの実装が変われば順序が変わってもおかしくはない。
FATは書き込んだ順番だったな ウザかったな
799 :
デフォルトの名無しさん :2011/03/03(木) 23:48:16.06
今C#でアンドロメダ銀河にいる宇宙人とコンタクトを取るための ツールを作っています。
>>799 なんで宇宙人とコンタクトレンズ取り合う必要があるの?
帰りたいんだろ 察してやれよ…
どうせならパンツを取り合えばいいのに
TimeSpanの上限は2万9千年だからアンドロメダには3桁足りないぞ
RFC2550を実装すれば万事解決
いまだに亜光速通信とか使ってるのかよw
.NET 4.0で新しく追加されたクラスとかをまとめたMSDNってある?
MSDNマガジンにならちらほら
でも使うのは2.0 7専用でも3.5
2008serverの事とか考えると2.0になっちまうな…悲しいけど
AppDomainA内のオブジェクトから、AppDomainB内の静的オブジェクトにアクセスする方法はありますか?
静的オブジェクト?
http://ideone.com/6Z5f2 コードを用意した。
StaticObjectクラスはAppDomain毎に確保されるから、
見かけ上はMainDomainのコードが変更してSubDomainが10を返すように見えるけど、
実際にはMainDomainが変更したのはMainDomainのStaticObjectで、SubDomainが見てるのはSubDomainのStaticObjectじゃないですか。
SubDomainからAppDomainのStaticObjectにアクセスする方法があれば知りたいのです。
誤:SubDomainからAppDomainのStaticObjectにアクセスする方法があれば知りたいのです。 誤:SubDomainからMainDomainのStaticObjectにアクセスする方法があれば知りたいのです。
ちょっとおちつけマジ落ち着け
なるほど、同じアプリケーション内でIPCRemotingするのか。 実際共有したいオブジェクトの中身は複雑だから単純にこうは行かないんだけど検討してみます。 ありがとうございます。
WCFのプロセス間通信を使う手もあるよ 古臭いリモーティングの仕組みやMarshalByRefObjectを排除できるのでちょっと気持ちいい
emlメールファイルの解析したいのですが そういうライブラリってあるのでしょうか?
探してる手間暇あるなら作ってしまう方が早いわな
AppliationSettingsBaseの設定ファイルを実行ファイルと同じディレクトリに保存したいのですが、 SettingsProviderの独自実装を作るしかないでしょうか? ユーザーごとバージョンごとに設定ファイルを分けたりするは必要ないので (むしろソフトのディレクトリ以外を汚染したくないです) シンプルに設定を保存したいです いい方法はないでしょうか?
それVista以降だとセキュリティで弾かれるよ
インストーラーを使わずに任意の場所に配置するアプリなので、 USBメモリなどに入れて設定ごと持ち運びたいです インストーラーを使って配置するアプリでは諦めるしかないみたいですね
823 :
デフォルトの名無しさん :2011/03/06(日) 00:57:27.79
>>822 スタティックなクラス定義して、シリアライズするのが早道だよ
に、日本語なのかそれは・・・
>>824 スタティックなクラスをデファインして、シリアライズするのがセオリー
育ってきた環境が違うからすれ違いは否めない・・・
DefaultIfEmpty()でのデフォルト値の指定の仕方がいまいちよくわかりません。 どんな型でデフォルト値のパラメータを渡してあげるのかがわからないのです。 ご教授お願いします。 var a = new[] { new { X = 0, Z = "ONE" }, new { X = 1, Z = "TWO" }, new { X = 2, Z = "THREE" }, new { X = 3, Z = "FOUR" }, new { X = 4, Z = "FIVE" }, }; var b = new [] { new { X = 0, W = "あ" }, new { X = 0, W = "い" }, new { X = 1, W = "う" }, new { X = 1, W = "え" }, }; var d = from cura in a join curb in b on cura.X equals curb.X into p from curp in p.DefaultIfEmpty(ここに何を入れればいいか分からない) select new { cura.Z, curp.W };
DefaultIfEmptyの中に返す値を書く
>>828 p.DefaultIfEmpty("値なし")
こんな感じでしょうか?これだとエラーになってしまって…。
何か根本的なことを理解してないのかもしれません。。
一度メソッドで書いた方が分かりやすいと思うぞん
普通にこれで通らないだろうか from curp in p.DefaultIfEmpty(new { X=0, W= "default"}) TSource(この場合は匿名型 {X,W} )を要求されているのにstringを返して通るはずがない罠
>>832 それで通りましたん!
ありがとうございます!!!
仰るとおり、stringじゃだめですね!!馬鹿ですみませぬ。
デッドロックでちょっとした疑問 よくlock(this)でデッドロックの危険が、と言われるけど typeofみたいに対象インスタンスが複数になるわけでも ないのになんでデッドロックになるんだろう?
thisはクラスの外から見えるだろ? 外からlock(a)とするのと、aのインスタンスメソッドの中でthisをロックするのは どちらもaのインスタンスをロックしている。 同じオブジェクトが同時にロックされる可能性が高くなるから、当然デッドロックの危険も高くなる。 クラスの外から見えないオブジェクトをロックしている限り、 そのクラスの中だけで待合状態を起こさないように気をつけていれば そのロックがデッドロックの原因になる恐れはない。つまり責任範囲が限定できるってこと。
隠蔽はオブジェクト指向の基本だろうがよォ なんでロックを露出したがるの?変態なの?
>>835 つまりは規約でlock(this)縛りするなら問題はないということか
規約縛りなんて守られないからやめとけって話かな
>>836 つまりICollection.SyncRootは変態という話ですねわかります
そういえば、BindingList<T>をマルチスレッドで安全に列挙するにはどうすればいいんだろう
>>837 列挙中に変更されないように外部からロックする必要があるだろ
>>839 ジェネリック"以外"のコレクションならSync派生があるだろがよ
つかなんでジェネリック版にも用意しなかったのか理解に苦しむ
要らなくなったから取っ払われたという発想はないんかい
>>839-840 おまえらこれでググれ つSynchronizedCollection
>>837 残念ながらBindingにはないらしい
地道にlockするしかないっぽい
SyncRootプロパティはSynchronizedメソッドが生成するラッパーコレクションが利用していたんだ ジェネリックコレクションではSynchronizedメソッドがなくなったので、SyncRootプロパティもお役御免となった
リロードしてなかったアウチ
非同期処理なんてのは慎重に設計して責任範囲を限定して扱うもの 片っ端からコレクションなどをスレッドセーフにしたからといって安心というようなものじゃない .NETはそういうポリシーなんだよ
フォームの背景を完全に透明にしたくてBackColorにTransparentを使えるようにしたのですが 若干グレーっぽいような色が見えてしまいます。 何かいい方法はないでしょうか? ただしTransparencyKeyは作成しているものの仕様上使うことはできません
Region設定する方が素直なやり方じゃないのかなと。 まあ固定サイズじゃないと上手くいくのかなって気もするけど。 しかし、なんでそんなアタック25みたいなキモいUI作りたいかね。 あんまり趣味のいいセンスとも思えないが
848 :
デフォルトの名無しさん :2011/03/09(水) 00:07:01.12
いろんなニーズがあるんだから、いい悪いをお前が決めつける必要はないだろ。 技術的なことだけ答えていればいいのに。
>>848 >若干グレーっぽいような色が見えてしまいます。
これだけじゃあなあ
SSもないし晒せる範囲のコードもないので本当に余計なことをやってないのかすらわからん
>>848 決め付けてないでしょ。個人の感想です。
しかし、人にケチつけるな、というケチ?
平気で人をお前呼ばわりするタイプって大概こういう自分棚上げ野郎だね。
851 :
デフォルトの名無しさん :2011/03/09(水) 00:29:52.57
方法は色々あるだろうけど、とりあえず下のコードで試したらいけた。 Formから派生させたForm1クラスに以下のコードをどうぞ。希望通りかは分からんけど。 public Form1() { InitializeComponent(); this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.BackColor = Color.Transparent; } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x020; return cp; } } protected override void OnPaintBackground(PaintEventArgs e) { // base.OnPaintBackground(e); } p/invoke使ってWinAPI使ってもいいけど。 Windows.Formsのコントロールを透明化するテクニックはネット上で沢山掲載されてるから、 分からなければ英語で検索することをおすすめする。"Form" "C#" "Transparent" とか。
またどうでもいいことを・・・ あとどういう物を作りたくてそういうことをやってるかというのも 軽く添えておけば代替案なんかもでてくるのにね 質問の仕方によっては答えがもらえないどころか攻撃されるだけという・・・
854 :
デフォルトの名無しさん :2011/03/09(水) 00:46:37.08
フォームの背景を透明にしたいって言ってるんだから、これ以上明確な質問は無いだろw 代替案も糞もない。分からなければ分かりませんでいいのでは?
winformの背景を透明にしたいという質問者はおかしい人ばっかりw
そうだねPowerPointで文字を入力する際に、いちいち背景が消されて見えなくなったら不便だね。
特殊な形状のウィンドウを作りたいとかそんなのじゃね?
別に=なんて無くても両方キチガイの類
846です
遅くなって申し訳ないです。
用途はスプラッシュウインドウに使おうと思っています。
スプラッシュウインドウに使う画像はAlphaBlendを使用した影があるのですが、
TransparencyKeyで指定してしまうと影の部分がうまく透過されなかったのです。
>>851 さんの方法で透明化し、
protected override void OnPaintBackground(PaintEventArgs e)
{
//base.OnPaintBackground(e);
e.Graphics.DrawImage(bmp, 0, 0); // bmp はスプラッシュウインドウの画像
}
このようにしたところ背景は透過されましたが、フォームの裏側の状態が変わってもはじめフォームの裏側にあった物が
透過され続けていましたw
いろいろサンプルを探してみたいと思います
>>860 裏側のものが変わってもWM_PAINT飛んでこないかも
Visual C# expressって言うのを使ってみたんですが すごいですね なんとかツクールみたいにパーツ持ってきて切り貼りして数値変えたら ソフトが作れるんですね 直接プログラムを書かなくていいって凄い でもこんなのが通用するのはチュートリアルだけなんですよね、やっぱり?
いやボタンを貼り付けるのはプログラムいらないけど ボタンが押されたときの処理はプログラムで書く コントロールをペタペタ貼り付けるのは業務でも普通に使う
>>864 今まだチュートリアルで画像ソフトを作成しているんですが
プロパティで(name)って所にclearbuttonだのcloseButtonだの書いて
ダブルクリックで生成されたコードっぽいのは
処理じゃなく只のラベル?なんですか?
ダブルクリックして生成されるのは何もしないスケルトン private void clearbutton_Click(object sender, EventArgs e) { // ここにclearbuttonが押されたときに実行したいプログラムを書く }
あああ、なるほど・・ 先は長い・・
まぁそれでもVisual C#の生産性の高さはすごいものがあるよ。 これに嵌る人ならモチベーション上がって一気にプログラムに慣れることができるだろう。
>>867 長くかかるようならふらっとのほうに行ってくれないかな
初心者が居つくと講釈垂れる人が発生してうざいんだ
そそ、だからフラットに行ってね^^
ターゲットフレームワークをガン無視してるのは何でなのかね
C#のバージョンと.NETのバージョンを混同しすぎ 記事のタイトルの 「C# 4」が象徴してるな .NETのバージョンは「4」で正しいが、C#のバージョンは「4.0」
まぁ川俣だし
むしろアホな2chネラの小姑ぶりを象徴してるだろ
>>874
そんなこと書くと川俣乙って言われちゃうぞ☆
>>876 ちゃんと読めよ
C#3.5とか出てくるぞw
今自分はFormでタイトルバーにもスキンを使えるようなアプリを作成したいのですが、
角を丸くするのに手こずってます。
というのは角を丸くすると背景を透明にしなければなりません。
しかし作っているのがグラフィックエディタということがあり、TransparencyKeyを
使うことが出来ません。
>>860 の方法ではコントロールが描画されませんし……
いい方法はありませんかね??
やっぱりFormに透明が関わる質問をする人はちょっとあれだなw
WPFで作るか、スキンを諦めるか、めんどくさいけど
>>860 で自力でがんばるか
透明使わなくてもRegionでがんばれば何とかなる
882 :
デフォルトの名無しさん :2011/03/13(日) 23:37:21.31
あ、そういえば
>>860 の方法にちょっと足せばコントロールのイベントも取れるとか以前やってたな
ログを漁ってみなよ
確か、Formを2枚重ねて〜とか話してたはず
884 :
デフォルトの名無しさん :2011/03/13(日) 23:41:23.69
886 :
デフォルトの名無しさん :2011/03/13(日) 23:53:40.84
>>885 それじゃないかなあ・・・
その後に一応サンプルコードも出回った記憶が・・・
思い出した 赤い線を描いてそれをつまんだらウインドウのサイズを変えるとかなんとかやってたな
>>886 そうですかあ・・・
今日のところは一旦諦めます。
また明日にでも挑戦してみます
ありがとうございました。またよろしくお願いします
と思ったらでしたwwww 連レスすみません
891 :
デフォルトの名無しさん :2011/03/14(月) 00:13:19.16
どうも昨日のFormのスキン云々の人です。
結局
>>881 の方法でごにょごにょしたら出来ました。
フォームの移動等も割とすんなり出来ました。
ありがとうございました
>>881 っていうか、透明なんてアホっぽい方向にがんばるより素直にRegion使った方がよいのではって
>>847 の時点で書いてあるんだけどさw
>>893 そもそもWinFormで透明を扱う需要がないし透明扱うサンプルって
Region使ったの無いので関係ない話に見える
コマンドラインで作業したいんですけど、MSBuildとNAntどっち使うのがいいでしょうか?
VC#で作ったプロジェクトをコマンドラインからmsbuildでビルドできるよ
NAntとかもう存在価値無いだろ MSBuildとの差別化として手書きに適したツールを目指すならわかるが、XMLとかアホかと VSで作ったプロジェクトファイルを必要に応じて弄ってコマンドラインからmsbuildでだいたいなんでもできるよ
あるアプリを作っていてそのアプリに更新機能をつけたくて アップデーターを作ったのですが アプリ起動→更新をクリック→アップデーター起動→新しいバージョンの.exeをDL→ 古い.exeを削除し新しいものに置き換える としたいのですが、最後の置き換えるときに古い.exeを削除できません。 Process.Start("Updater.exe"); Application.Exit(); // .exeを削除できるように終了する このようにしてアップデーターを呼び出しています。 アップデーターを起動後はボタンをおすことで更新が始まります。 どなたか良い方法をご教授ください
起動している自分自身を削除しようとしてねえか?
>>899 起動している自分自身ということになるのですかねえ・・・
一応対象となるプログラムは
Application.Exit();
でとじていますが・・・
削除の時点でちゃんとプログラム終わってんの?
もしくは権限とか、削除できない理由をAPIの戻り値とかで調べたりできたとおもうけど。 削除できないと例外がでるんだっけな、そこら辺はしらべてみてくれい。
アプリ側にMutex作らせておいて、アップデータ側でMutexが消えるのを確認するまで待つとか
>>901 タスクマネージャーでプロセス見る限りではアップデーターではない方は消えています。
>>902 例外は出てます。アクセスが拒否されているみたいです。
>>903 hmhmググッてきます
ううむやはりできない
ひとつわかったのは
>>898 の手順でアップデーターを起動した状態だとアップデートを行っていないにもかからわず
Windowsからアップデート対象のファイルを削除できませんでした。
Process.Start("Updater.exe"); だと呼び出し元がロックされた状態になるのですかねえ
アップデーターの権限が実行ファイルを削除できるレベルのものではないのではないかな? 特権みたいのを与えないとむりとかそんなんじゃねえかな。
>>906 試しに適当な実行ファイルを消させてみたら普通に消せました。
ごめんなさい原因分かりました。 オリジナルコントロールを作っていて、同じプロジェクト内でそのコントロールを使うために参照に アップデート対象となる実行ファイルをいれていたせいでした。 クラス等も含めてコピーしてソースを直した結果無事に成功しました。 こんな初歩的なことですみません。
#頭に指して死ね
死んじゃえ!死んじゃえ!#の角に頭ぶつけて死んじゃえーっ!
#の角は痛そう
どうすればDelegate継承型のTypeオブジェクトから引数や返り値の型を 取得できますか? 例:typeof(Func<TArg,TRet>)からTArgとTRetを取得
Delegate派生型ならInvokeのMethodInfo見ればいいんじゃないの? 試したことはないが
MethodInfoは、Delegate派生型(継承型)のインスタンス がもつのではないでしょうか。 型情報から取得ってわけにはいかないでしょうか?
typeof(Func<TArg,TRet>).GetGenericArguments()ただしFunc限定 一般には、typeof(デリゲートの型).GetMethod("Invoke")でMethodInfoを取得するしかない それだって立派な型情報だと思うけど何が問題なのか
>>915 申し訳ありません。せっかく素晴らしい方法を
教えていただいたのに、Invokeメソッドのことを見落としておりました。
DelegateはTarget(object)とMethod(MethodInfo)から成っているので、
デリゲートインスタンスからそのMethodを習得しろといわれているのかと
MethodInfoだけ見て反射的に…。
その方法でやらせていただきます。ありがとうございました。
なんで無理してLINQでやろうとするかな OrderByとFirst使え
>>918 なるほど!!それで出来そうです!!
>なんで無理してLINQでやろうとするかな
すみません。まだ覚えたてなので、使いこなせるようになりたくって。
そうおもうならやり切れよ Linqでガッツリやれ
C#でID・パスワードの自動再発行の機能をつくりたいのですが 一番効率的な方法ってどんなものがあるんでしょう? ざっくりな質問ですいませんがよろしくお願いします。
登録時のメールアドレスにリセットアドレス投げればいいんじゃないですか C#全く関係ないけどね
使えるなら統合認証が楽だとは思う
PasswordRecoveryコントロール
>>922 ありがとうございます。ただ、実装にちと時間がかかりそうな気が・・
>>924 なるほど。。ちょっと調べてみたんですが良さげですね!
ありがとうございます。
デリゲートを使う目的、利点を教えてください どの解説も直接メソッド呼び出せばいいだろって ツッコミたくなるような糞ばっかりでうんざりしてます
ふらっとに帰れ
向こうは荒らしが常駐しているのでここで質問させてください というか、あなた荒らしじゃないの? この時間にいるのは荒らししかいないようだしね
つか住人はほぼ同じだよ。 向こうはくだらねぇ質問スレの残骸なんだけど、C#が君のようなくだらねぇ質問者を引き寄せるんで、わざと分けたままなの。
で、お前らは初心者煽って楽しんでるんだ? 気の毒な人たちだね そうやって自分たちの首絞めているんだね? 若いプログラマが育たなければ安泰とでも思ってるのかな? そりゃ海外に負けるわけだ
少なくともお前のようなバカはいらん。
932 :
デフォルトの名無しさん :2011/03/19(土) 07:12:56.27
若手を育てるのは仕事であって趣味じゃない どうしてもっていうなら1万/hぐらいでお安く教えてやるよ
ID出ないから自演するの良くないと思います
934 :
デフォルトの名無しさん :2011/03/19(土) 07:29:48.79
ID出ないから自演と決めつけるの良くないと思います
自演は自粛汁
雨には放射能が含まれていると危険だから 必ず傘をさすようにってお天気で毎回言った方が良い
はい
合点承知
>>926 Observerパターンを従来のインターフェイスによる方法とデリゲートを使った方法の
両方で書いてみれば、嫌でもデリゲートの威力は体感できると思うけどね。
あと別解。
FirstName, FamilyName, Age, .....などのプロパティを持つPersonクラスがあるとする。
List<Person>のソート方法を、Personのプロパティーの数だけ用意したい(Personの各プロパティーを
キーにしてソートする)とき、List.Sortのどのオーバーロードを使うのが一番簡潔に書けるか
やってみるとか。
>>939 ありがとう
ソートはよくわからないけど、Obseverの方はよくわかった
Linq使えば一発で分かる。 デリゲートがないと話にならない。
そもそもeventがデリゲートな件
そもそもeventがObserverな件
>>943 それそれ、その説明がわかりにくい
普通にメソッドでいいじゃんって思う
eventや非同期でのデリゲートの有用性はわかりますが
それ以外でのデリゲートの有用性が知りたい
>>945 その二つで有用ならそれで十分じゃねーの?
ドライバーでねじを締められるのはわかりますがほかの使い方を知りたい 鼻くそでも穿ってれば?
>>945 ひょっとして、匿名メソッドとデリゲートを混同してない?
あと、eventと非同期の有用性わかったんならそれでOK。
つか他にあんのかい?
>>943 ではコールバック=非同期みたいないい方をしてるけどLINQもコールバックだ
コールバック処理の中の一つの例が非同期処理
>>948 え?それだけでいいの?
例えば、デリゲートに複数のメソッドを追加することできるけど
こういうを使う機会とかないんですか?
解説サイトの例がこういうのばかりなので
何に使えるのかが知りたいんだけど
もちろん自作クラスやコントロールに複数のイベントを
登録するというのはわかります
直接マルチキャストデリゲートを使う機会はまずない eventを使うと勝手に利用されるつから
>>948 それはあるかもしれない
匿名メソッドとデリゲートを一緒に解説してたりするから
混同している部分はあると思う
>>950 マルチキャストなデリゲートなんて、イベント以外の何に使うんだよ。
>>953 そうなんだー
じゃあ、とりあえずは、非同期とイベントを実現するのに
デリゲートは使われているって思っていればいいんですね
解説サイトの多くは演算処理に使ってたり
いまいち実用性がないようなコードばかりだったので
それ以外の使い道があるのかと思っていた
DelegateComandのようにある処理をまとめるために使う方法で
みんな使っているのかなと思ったけどそうでもなさそうですね
そもそもDelegateCommandってWPF(とSilverLight)の奴だし 超少数派
956 :
デフォルトの名無しさん :2011/03/19(土) 16:55:01.35
>>954 >多くは演算処理に使ってたり
あんまり使ったことないけどC/C++時代にコールバックて
ソートか何かで使ってなかったっけ?
C++はファンクタを要求する奴がSTLに沢山あるよ また増えるし
他はW32APIを使うときにデリゲート使うぐらいですね
また何に使うんですかとか言い出すから覚えんでいい。
>>956 いわゆる述語ってやつね。
比較関数とかを外から挿しこむの。
C#だと、IEqualityComparer使ったものとデリゲート使ったものが混在してるのよねぇ。
3.0以前のものはインターフェイス、3.5以降はデリゲートって感じで。
そっか。"DelegateCommand"が、とかって言い出すのって以前いたWPF云々の奴か。 前も同じこと言ってて同じ流れになったのに、また同じこと聞いて、何度繰り返すんだか。
いいんだよWPF使ってる奴なんて珍種なんだから気にしなくて
964 :
デフォルトの名無しさん :2011/03/19(土) 17:05:46.85
>>957 >>961 その辺その辺
>多くは演算処理に使ってたり
ってのは手っ取り早く簡単なネタで説明するには
その辺のコード書くほうが楽ってだけだと思うよ
実際はその辺のコードなんて.net側でどんどん実装しちゃうから
ほとんどユーザーが気にする必要が無いので無意味に見える
盛り上がってるところ悪いが次スレをだな 俺は規制中なので無理
次スレ不要だろ
変なのが沸かない限り、このペースなら
>>980 あたりでいいだろ
>>961 IEqualityComparerはEqualsとGetHashCodeが常にセットだから
デリゲートよりもインターフェイスを使う方が適切
SequenceEqualはデリゲート使えてもいい気はするけど
>>968 でもそれはやっぱり、ハッシュ値使うかどうか次第では。
ソートにハッシュ値は使わないわけで。
OrderByはIComparer。 これもComparison使えたほうがいいとは思うね。
糞#
Streamをファイルに出力したい StreamReader reader = new StreamReader(stm, System.Text.Encoding.GetEncoding("Shift_JIS")); StreamWriter writer = new StreamWriter(filePath, false, System.Text.Encoding.GetEncoding("Shift_JIS")); writer.Write( reader.ReadToEnd(); これでおk? 回りくどい気がする、StreamからStreamWriteに直接データ送れないの?
File.Copyすれよ あとエンコーディングが同じならReaderWriterなんか使わずStream.CopyToでいい
追記したいんじゃないの?
Stream.CopyTo()で追記できるじゃん
StreamReader/WriterのStreamはBaseStreamプロパティって事までは言わせんな恥ずかしい
CopyTo使うとビルドできねーぞ 引数 1: 'System.IO.StreamWriter' から 'System.IO.Stream' に変換できません //ネットのデータ受け取り Stream stm = rsp.GetResponseStream(); //ファイルに出力 StreamWriter writer = new StreamWriter(filePath, false, System.Text.Encoding.GetEncoding("Shift_JIS")); stm.CopyTo(writer, (int)stm.Length); stm.Close();
おまわりさんに頼んでこの馬鹿逮捕してもらうか。
>>977 その使い方だとReaderで読み取ってWriterの手順を踏まないとエンコーディングぶっ壊れるので
直接書き込むのは止めた方がいいと思う
できたぞ Stream stm = rsp.GetResponseStream(); FileStream source = File.Open(@"D:\data.txt", FileMode.OpenOrCreate); stm.CopyTo(source); StreamWriterは糞、FileStreamは神
お前の頭に糞が詰まってるんだよ
FileStream source;じゃなくてdestじゃねえのかと思ったけどまあどうでもいいか。
障害者はネットに繋ぐな
で、お前らは障害者煽って楽しんでるんだ? 気の毒な人たちだね そうやって自分たちの首絞めているんだね? 若いプログラマが育たなければ安泰とでも思ってるのかな? そりゃ海外に負けるわけだ
みずほの中身とかこんなもんだからな
新たな問題が発生したぞ ファイル出力後TextBoxを更新しようとすると "追加情報: このストリームはシーク操作をサポートしません。" なんでシークできないんじゃ stm.Seek(0, SeekOrigin.Begin); StreamReader reader = new StreamReader(stm, System.Text.Encoding.GetEncoding("Shift_JIS")); this.richTextBox1.Text = reader.ReadToEnd();
次スレ立てるからちょっと中断しろゴミども
C#のアンチか? C#関連のスレがこの障害者に荒らされまくってる
日本人は何でこんなつまらないことしているのかな リアルじゃびくびくしてるくせに ネットではキチガイになる
>>990 みんなはどう対策してる?
泣き寝入りかこれ
>>992 みんなは天才なので1パスで済ます方法を考えるかMemoryStreamなどにコピーしてしまう
完璧だ、満足 //メモリコピー MemoryStream ms = new MemoryStream(); stm.CopyTo(ms); //ファイルに出力 FileStream fs = File.Open(filePath, FileMode.Create); ms.Seek(0, SeekOrigin.Begin); ms.CopyTo(fs); fs.Close(); //ボックス更新 ms.Seek(0, SeekOrigin.Begin); StreamReader reader = new StreamReader(ms, System.Text.Encoding.GetEncoding("Shift_JIS")); this.richTextBox1.Text = reader.ReadToEnd();
テキストボックスに書き込んでからそれをファイルに出力すればMemoryStreamなんか要らんけどね。この場合。まあいいか。
もうどうでもいいから
できたぞー、神コードに近付いている //ボックス更新 StreamReader reader = new StreamReader(stm, System.Text.Encoding.GetEncoding("Shift_JIS")); this.richTextBox1.Text = reader.ReadToEnd(); //ファイルに出力 FileStream fs = File.Open(filePath, FileMode.Create); fs.Write(Encoding.Default.GetBytes(this.richTextBox1.Text), 0, this.richTextBox1.Text.Length);
Encoding.DefaultってUnicodeだぞ
Rubyなら一行でできる
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。