トップページ⇒tech
1001コメント310KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/16(木) 18:23:33
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part66
http://hibari.2ch.net/test/read.cgi/tech/1290854247/

■関連スレ
C#, C♯, C#相談室 Part63
http://hibari.2ch.net/test/read.cgi/tech/1289733048/
VB.NET質問スレ(Part35)
http://hibari.2ch.net/test/read.cgi/tech/1284423653/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/

■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。

直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0357デフォルトの名無しさん2010/12/27(月) 13:28:34
>>356
できるでしょ
でもシリアライズ用のクラスってpublicでいろいろ開放してないと使えなかったような
0358デフォルトの名無しさん2010/12/27(月) 13:36:08
規定のコンストラクタがあって
かつ
読み書きのできるパブリックフィールドとプロパティだけだったと思うんだけど

嘘だったらごめん
0359デフォルトの名無しさん2010/12/27(月) 13:41:58
>>356
俺はインスタンス化しないとシリアライズできないと思ってるけど。

インスタンス化されたクラス?がよくわからん。
0360デフォルトの名無しさん2010/12/27(月) 13:51:25
したいこととしては
あるクラスをシリアライズする場合に、プロパティにインターフェイスを継承している
項目をシリアライズしたいのです。
(Ex)
public class TextClass
{
public stirng Ex1 { get; set }

public int Ex2 { get; set; }

public IInterface { get; set; }

}

のようなクラスをシリアライズしたいのです。。
0361デフォルトの名無しさん2010/12/27(月) 13:52:36
追伸:
public IInterfaceがとあるインターフェイスを継承したものを格納しています
0362デフォルトの名無しさん2010/12/27(月) 13:54:41
>>344 >>345 >>346
ありがとうございます。
複雑な外観・バインディング(データの同期?)
などをしたい時にWPFを勉強しようと思います
0363デフォルトの名無しさん2010/12/27(月) 14:25:36
>>360
インターフェースを格納したいって話?
0364デフォルトの名無しさん2010/12/27(月) 14:31:35
>360と>356が全然結びつかないけどまあいいや

XmlSerializerは構築されるときにシリアライズ・デシリアライズするすべての型を知ってる必要がある
interfaceとかabstract classがメンバに含まれるなら、そのメンバが取り得るすべての型を教えておかないといけない
普通はXmlElement属性でそういうメンバにこういう型こういう型があり得るってことをマークする

属性ベースで静的に設定できない場合、XmlSerializerのコンストラクタ引数で指定する

> public IInterfaceがとあるインターフェイスを継承したものを格納しています
IInterface以外(だけ)を継承してたらびっくりだ
0365デフォルトの名無しさん2010/12/27(月) 14:57:03
>>363インターフェイスを継承したインスタンスを格納します><

>>364ありがとうございます。XmlElementは3.0からのサポートなので
2.0で開発している現在は使えれませんね;w;

コンストラクタの引数の方法で試してみたいと思います。
0366デフォルトの名無しさん2010/12/27(月) 15:18:43
>>365
> >>364ありがとうございます。XmlElementは3.0からのサポートなので
> 2.0で開発している現在は使えれませんね;w;
んなことない
XmlElement属性(XmlElementAttributeクラス)は.NET 1.0から存在する
0367デフォルトの名無しさん2010/12/27(月) 15:22:43
存在するね
0368デフォルトの名無しさん2010/12/27(月) 16:11:20
C#は参照リークするからなぁ
0369デフォルトの名無しさん2010/12/27(月) 16:11:52
C++ってデリゲートってあるんけ?
0370デフォルトの名無しさん2010/12/27(月) 16:56:41
>>369
C/C++でいうところの関数ポインタだよ
0371デフォルトの名無しさん2010/12/27(月) 17:22:45
そう、関数ポインタだよ
0372デフォルトの名無しさん2010/12/27(月) 18:19:18
でも関数ポインタだよ?
0373デフォルトの名無しさん2010/12/27(月) 18:20:18
C#のデリゲートは関数ポインタのように直接ポインタを扱うわけじゃないし
+とか-で登録削除可能なので違うといえば違うんだけどねw
0374デフォルトの名無しさん2010/12/27(月) 18:27:01
全然違うよ
デリゲートは関数ポインタ+呼び出し先のインスタンスへのポインタ
0375デフォルトの名無しさん2010/12/27(月) 20:41:13
Windows SharePoint Services 3.0: ソフトウェア開発キット (SDK)
に含まれているSPUtility クラスを使ったプログラムをC#で作った場合、
Windows SharePoint Services 3.0をインストールしていないパソコンでも動きますか?
0376デフォルトの名無しさん2010/12/27(月) 20:55:22
>>253
チュートリアル : オブジェクトによるダイアログ ボックス情報の一括取得
ttp://msdn.microsoft.com/ja-jp/library/cakx2hdw.aspx
0377デフォルトの名無しさん2010/12/27(月) 20:59:21
>>375
SPUtilityクラスが含まれてるDLLはSharePoint Servicesに含まれてるんだろ?
動くわけないじゃん
当該DLLのローカルコピーを配布してしまえば動くかもしれないけど
おそらくライセンス違反(要確認)
03783752010/12/27(月) 21:29:52
>>377
SPUtilityクラスの使用は諦めたいと思います
ありがとうございます
0379デフォルトの名無しさん2010/12/27(月) 22:03:28
糞#のせいでいまだにDTだ
0380デフォルトの名無しさん2010/12/27(月) 22:38:48
>>362です
調べてるうちにWPFの勉強したくなりました。
XAMLは意外と馴染みやすかったので大丈夫そうです。
機能面がいまいち分からないのですが、
これ便利・かなり使うからやっとけって機能ありませんか??
0381デフォルトの名無しさん2010/12/27(月) 23:06:17
まずはBindingをマスター。

というわけでWPFスレへどうぞ
0382デフォルトの名無しさん2010/12/27(月) 23:28:54
private void Substitute()
{
presskey(VK_SPACE, 20);

startcap((int)Math.Ceiling(power * 360 / 100) + 3);
presskey(VK_SPACE, 20);

if (power >= 80)
{
startcap(175);
}

startcap(hidoffset);
presskey(VK_SPACE, 20);
}

↑にGetAsyncKeyState()を使用してCtrlを押している時はスペースを押さないという構文を入れたいのですが

short sw;
sw = GetAsyncKeyState(17);
if (sw == 0)
{
presskey(VK_SPACE, 20);
}

GetAsyncKeyState()使用宣言をした上でこれを入れても上手く行きません。
どなたか入れ方等のアドバイスを頂けませんでしょうか?全くのド素人なのでメチャクチャな事を言っていたらすみません。
0383デフォルトの名無しさん2010/12/27(月) 23:37:28
VS入れたら、アプリがエラーが起きた時に
デバッグ確認が毎回出てうざいんだけど
無効に出来ませんか?
0384デフォルトの名無しさん2010/12/27(月) 23:41:12
出来ません
0385デフォルトの名無しさん2010/12/27(月) 23:42:17
まじかよ、何でこんな嫌がらせみたいな機能つけるんだよ・・・
0386デフォルトの名無しさん2010/12/27(月) 23:43:26
>>382
http://dobon.net/vb/dotnet/form/keypreview.html
http://sourceforge.jp/projects/cs2h/svn/view/Tetris/Tetris/Form1.cs?view=markup&root=cs2h


0387デフォルトの名無しさん2010/12/28(火) 01:13:50
ASP.NET2.0 C#で開発しています。

ページに入れたPanelオブジェクトをチェックボックスのONとOFFで表示/非表示を
JavaScriptで制御する作りを実装しました(仕様としてポストバックでのチェックはできません)

単にvisibleで制御しても出来ないため、Panelのstyle属性にdisplay:blockを埋め込み、とdisplay:noneと切り替えて
とりあえず表示と非表示の制御はできるようになったのですが、ボタンを押した時のイベントのコードビハインドで、
Panelオブジェクトが表示されているか、非表示かも取得したいのですが、どうにも上手くいきません

1.JavaScriptで処理実行時にsetAttributeも一緒に入れて、style属性のdisplayも切り替える→チェックできず
2.いっそPanelのvisibleプロパティを無理やり取ってみる→そもそも設定していないので全てtrueで返ってくる
3.style.valueを取得してチェックしてみる→aspx側で設定した値しか返ってこない(1と類似)

と、色々やってみたのですが…。
無知で申し訳ないのですが、どなたか上手い方法を知っていらっしゃる方いますでしょうか?
Panelを使っていることがそもそも間違っているのかもわかりません

スレ違いでしたら申し訳ありませんが、宜しくお願いします
0388デフォルトの名無しさん2010/12/28(火) 07:06:21
HiddenFieldとか用意しといて、onsubmitとかでJavaScriptで値を入れてやれば?
コントロールじゃないただのhiddenを置いても、Request.Paramsに反映されるはず

どのDOMイベント/JavaScript関数で処理するのがベストかは忘れたんで自分で調べてね
0389デフォルトの名無しさん2010/12/28(火) 12:06:01
正規表現を使う、使わない両方の置換を行いたいのです。
正規表現を使う場合は、最初にヒットしたものを置換というのは調べればできそうなのですが、
使わない場合はたとえば
string s = "ccc\naaa\nbbb\naaa\n";
s = s.Replace("aaa","ddd");
とやると両方のaaaが置換されてしまいます。
これを最初のaaaや2番目のaaaだけ置換するというのはできないでしょうか?
0390デフォルトの名無しさん2010/12/28(火) 12:07:42
>>389
いきなり置き換えじゃなく検索して列挙した後お好きなように調理すればいい
0391デフォルトの名無しさん2010/12/28(火) 12:10:44
>>390
あーーーーなるほど!
ReplaceじゃなくてIndexOfでやればいいんですね。
ありがとうございます。
0392デフォルトの名無しさん2010/12/28(火) 13:19:00
C#でつくった自分のプロジェクトを元に更に機能付加していって新バージョンをつくり
Ver1,2,3,4…としたいです。それぞれのバージョンは残していきたいです。

今のところ既存のフォルダをコピーしてフォルダ名とプロジェクト名を変更していきながら作っていこうかと思っているのですが、
このような場合のスマートな方法があるなら、教えてください。
0393デフォルトの名無しさん2010/12/28(火) 13:20:28
バージョン管理使いましょう
03943922010/12/28(火) 13:28:54
>>393
どうもっす。バージョン管理ってのがあるんですね。ググッて調べてみます。
ありがとうございました。
0395デフォルトの名無しさん2010/12/28(火) 14:02:21
俺バックアップという意味であえて別HDにバージョン毎フォルダコピーして残してる
0396デフォルトの名無しさん2010/12/28(火) 14:34:19
C#にお詳しい方にお聞きします
{smartassembly} とういうソフトで、
難読化されたアセンブリをソースコードレベルに戻したいんですが
どうすればよいでしょうか?
また、解除できるなら、難読化解除を100パーセント防ぐにはどうしたらいいでしょうか?
0397デフォルトの名無しさん2010/12/28(火) 15:00:56
プログラム自体を暗号化してメモリ上でのみ複合化させる
0398デフォルトの名無しさん2010/12/28(火) 15:35:10
返信ありがとうございます。
しかし、マルチスレッドを用いるプログラムや、インポートしたアセンブリ、
プラグイン等でも簡単にデバッグが行える
VisualStudioでコンパイルできることを想定した場合、その方法だと
実現できるでしょうか?
Reflector等で、メソッドやフィールドの難読化された名前は
見られてしまうのは仕方ないかもしれません。
結局有効なのは、上記のsmartassembly他と同様に、
実行速度を犠牲にし
メソッドの開始時点に不要なジャンプ命令を組み込むしかないのかもしれません


0399デフォルトの名無しさん2010/12/28(火) 15:54:46
何を守りたいのか分からんが、名称を難読化するだけで流用する価値はなくなるだろ
重要な情報を隠すという意味ではローカルである限り、どんな暗号化でも完全にはならないし
0400デフォルトの名無しさん2010/12/28(火) 17:02:34
質問が漠然としてました、申し訳ないです。具体的には
Reflectorや、spices.NET等のツールを用いて
IL以外のC#やVB等の言語で
メソッドの中身を容易に見れなくしたいのです。
例えばrefleectorであれば
"// This item is obfuscated and can not be translated."
が表示されるか、または例外を発生させるようにしたかったのです。
0401デフォルトの名無しさん2010/12/28(火) 17:44:04
ネットワークアプリケーションにユーザ認証機能を乗せたいと考えています。
参考になるサイトや、参考書などありましたら教えていただけたら幸いです。
0402デフォルトの名無しさん2010/12/28(火) 17:45:13
C#にはAPIないのですか? C#ではWIN32 APIしかありませんか?
C#のAPI一覧とかのってるサイトあったら教えてください お願いします。
0403デフォルトの名無しさん2010/12/28(火) 17:46:54
嫌です
0404デフォルトの名無しさん2010/12/28(火) 17:47:43
>>402
C#とAPI(Win32API)との関係をよく分かってないだろ
0405デフォルトの名無しさん2010/12/28(火) 18:07:55
http://www.atmarkit.co.jp/fdotnet/dotnettips/676dragdrop/dragdrop.html
ここを参考にテキストボックス内へファイルのドラッグ&ドロップというのはできたのですが、
フォルダのドラッグ&ドロップで中身のファイル名を取得するというのがわかりません。
最終的にDragDropイベント・ハンドラ内の
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
この部分をフォルダがドロップされてもファイルがドロップされても取得できるようにしたいのですが
どうしたらいいでしょうか?
System.IO.Directory.Exists(d))で分岐させればいいのかなとは思うのですが、
e.Effect = DragDropEffects.Copy;
この部分にどうつなげるかわかりません。

0406デフォルトの名無しさん2010/12/28(火) 18:08:06
メニューストリップにショートカットを付けたいのですが、
MenuItemクラスの Shortcutプロパティの値は、
Shortcut列挙体のメンバー以外は指定できないのでしょうか?
0407デフォルトの名無しさん2010/12/28(火) 18:12:31
>>401
http://dobon.net/vb/dotnet/internet/usecredentials.html
.NETなら標準のコントロールやメソッドが用意されて簡単に作成できるかもしれませんが
開発期間に余裕があり、後々のことを考えると、
まずはHTTPの仕様などwebの基礎から勉強し、
.NETの基礎を@IT等のサイトで調べるのがいいかもしれません。
書籍なら"プログラミング.NET framework"や
"プログラミング Microsoft ASP.NET"が、私はまったく読んでませんがよく
お勧めとされているようです。
コードがそのままのっている本はその場限りで理解につながらないもしれません
その他、サンプルコード等は英語ですがcode project,source forge.net,koders.com,code plexが
あります。
http://www.pinvoke.net/等もwin32APIを使う上で参考になります。
また、googleのコード検索もかなり使えます。
0408デフォルトの名無しさん2010/12/28(火) 18:24:18
>>402
C#でWin32APIを使うには、dllを定義をしないといけないんだよ。
PInvokeてサイトをググって、サンプルコード探すのが速いかな。
ほかにマーシャリングって知識も必要かもしれない。
おれもよく分からないんだけど、その辺調べたら使えるようになった。
0409デフォルトの名無しさん2010/12/28(火) 18:33:47
できるかどうか不明ですが
private void _DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}

private void _DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
string[] strs = e.Data.GetData(DataFormats.FileDrop, false) as string[];

if (strs == null || strs.Length == 0)
{
return;
}

for (int c = 0; c < strs.Length; c++)
{
if (Directory.Exists(strs[c]))
{
string[] fileNames = Directory.GetFiles(strs[c]);
}
else
{

}
}
}
0410デフォルトの名無しさん2010/12/28(火) 18:57:29
>>406 おそらく指定できません。
できるかどうか不明ですが
public Form1()
{
InitializeComponent();
this.KeyPreview = true;
shortCutkey = Keys.A;
menuitem.Text = "A";
menuitem.Shortcut = Shortcut.F1;
menuitem.Click += new EventHandler(menuitem_Click);
MainMenu ms = new MainMenu();
ms.MenuItems.Add(menuitem);
this.Menu = ms;
}
MenuItem menuitem = new MenuItem();
Keys shortCutkey = Keys.None;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (shortCutkey != Keys.None &&
shortCutkey == keyData)
{
menuitem_Click(menuitem, new EventArgs());
}
return base.ProcessCmdKey(ref msg, keyData);
}
0411デフォルトの名無しさん2010/12/28(火) 21:33:00
C#で,複数のアクセスポイントからの無線LANの強度から
位置を測定するプログラムを書いています.

現在接続中の無線の強度を獲得することは出来たのですが,
接続していない他の無線の強度の獲得の仕方がわかりません.
別のところに繋ぎ変えないでやるという制約がありますが,どうでしょうか.

よろしくお願いします.
0412デフォルトの名無しさん2010/12/28(火) 21:39:50
あの〜(´・ω・`)
byte配列に格納したwavデータをPlaySoundで再生してたんですが、
☆PlaySound(wavData.wavVolChange(bytes, vol), 0, SND_MEMORY | SND_SYNC);

PlaySoundだと再生と停止は出来ても、一時停止ができないことがわかりました。
しかし、一時停止可能な再生方法を調べてみても、やり方がさっぱりわかりません。
もしもbyte配列のwavデータを再生、停止、一時停止可能な再生方法をご存知の方がいましたら、
この卑しい豚に助言というエサをお与えください。
0413デフォルトの名無しさん2010/12/28(火) 21:48:04
>>409
できました!!ありがとうございます!!!
0414デフォルトの名無しさん2010/12/28(火) 21:50:27
どういたしまして
0415デフォルトの名無しさん2010/12/28(火) 21:51:39
あの〜(´・ω・`) ←これ失礼
0416デフォルトの名無しさん2010/12/28(火) 21:54:52
失礼といえば失礼だな
0417デフォルトの名無しさん2010/12/28(火) 21:57:16
失礼じゃないといえば失礼じゃないな
つまりどういうことだ?
0418デフォルトの名無しさん2010/12/28(火) 22:12:26
´・ω・`)
0419デフォルトの名無しさん2010/12/28(火) 22:15:03
>>412
DirectAudio
XAudio
ActiveXのWMP
WPFのMediaElement(一番簡単)
0420デフォルトの名無しさん2010/12/28(火) 22:16:50
´・ω・`) …
0421デフォルトの名無しさん2010/12/28(火) 22:28:40
>>419
ありがとうございます
下から試してみます
0422デフォルトの名無しさん2010/12/28(火) 23:38:07
うむ
0423デフォルトの名無しさん2010/12/29(水) 00:11:01
イベントについて教えてください。

イベントハンドラを複数登録した場合の実行順は未定義だと思います。
という事はカスタムコントロールではイベント拾っちゃダメですか?

例えば
TextBoxを継承し、Validatingイベントで大文字小文字、全角文字の有無、
文字数などの情報を自身のPublicプロパティにセットする
(利用者側がValidating時に判断材料として使う。)
という設計もダメですよね

OnValidating使えという話だとは思いますが、
グリッドの列やタブページ等、それが通用しないコントロールもあると思いまして。
0424デフォルトの名無しさん2010/12/29(水) 00:20:15
UserControlに貼り付けて包含して都合の悪いイベントは隠してしまえばおk
0425デフォルトの名無しさん2010/12/29(水) 00:27:04
>>423
別に継承後の設計なんだから自分の好きなように
0426デフォルトの名無しさん2010/12/29(水) 02:28:33
>>424
可能ならばそうしたいところです
>>425
悩みますね、もう少し調べてみます。
0427デフォルトの名無しさん2010/12/29(水) 02:39:45
〜は使うなっていうお約束で十分だろ
そういう約束が通じないような、不特定多数が使うちゃんとしたコントロールなら、
出来合いのコントロールの継承なんてやるべきじゃない
0428デフォルトの名無しさん2010/12/29(水) 03:07:23
実装依存だったんですね
ttp://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/28b87b7c-b408-4b50-8290-d552f39e945f
0429デフォルトの名無しさん2010/12/29(水) 03:16:44
SOAPで処理している2つのサーバがあって、双方にWeb.configが存在している
サーバAのWeb.ConfigにはmaxRequestLengthの記載をしている(2MBの設定)
サーバBのWeb.ConfigにはmaxRequestLengthの記載をしていない(既定値4MBの設定だという認識)
↓
サーバAでの処理でサーバBを通してCSVデータを出力する処理を実装
少量データでは問題ないが、数千件のデータを出力しようとするとエラーになる
試しにサーバBのWeb.ConfigにmaxRequestLengthの記載をすると正常終了する
正常終了した後でCSVデータのファイルサイズを見ると、2MBにも満たない


・何故サーバBにmaxRequestLengthを記載すると正常終了するのかわからない。既定値の4MBでは?
・何故出力したCSVデータサイズがサーバAで設定した2MB以下なのにエラーになるかわからない。ファイルサイズは関係ない?

処理はできたのですが理由がわからず悩んでいます・・・
どなたか馬鹿にでもわかるように教えていただけないでしょうか?



0430デフォルトの名無しさん2010/12/29(水) 03:42:00
「SOAPで処理している2つのサーバがあって」
「サーバAでの処理でサーバBを通してCSVデータを出力」
意味不明なので、日本語を見直してください。

web.configにmaxRequestLengthを設定しないときのMaxRequestLengthの
値を確認しましたか?
あなたの出力したCSVのサイズはどうでもよくて、maxRequestLengthは
Webサーバに対するHTTPリクエストのbodyサイズだと思いますが、
HTTPリクエストはどんな内容ですか?
0431デフォルトの名無しさん2010/12/29(水) 10:30:26
途中で制限越えるのに気がつくからでは?
0432デフォルトの名無しさん2010/12/29(水) 10:48:16
TextBox(MultiLine)を三つ使ってランダム振り分けを作りたいと思っています。
TextBox1に振り分けたいアイテムを改行ごとに入力していき、
ボタンひとつでTextBox2,TextBox3にランダムに振り分けていくのですが、
奇数のときの対処も含め教えてください。
0433デフォルトの名無しさん2010/12/29(水) 10:50:13
>>432
何を言いたいのか・・・
0434デフォルトの名無しさん2010/12/29(水) 10:57:07
>>432
余りを計算する
そういう話じゃないかと
0435デフォルトの名無しさん2010/12/29(水) 11:00:53
>>434
1.TextBox1から、改行で区切ってアイテムを取り出す方法
2.ボタンで、ランダムにアイテムをTextBox1,2へ振り分ける方法
3. 1で取り出したアイテムが奇数の時の対処法
以上の3点を教えて頂きたい。
0436デフォルトの名無しさん2010/12/29(水) 11:12:15
>>435
1 TextBoxは行数情報と各行単位の情報を簡単に取り出せる
行数はこれで取得 TextBox.Lines.Length
でこんな感じでアクセス
http://ideone.com/9JG7W

2 ランダム関連を調べろ

3 自分で設計しろ。ランダム振り分けなんで奇数行だろうが偶数行だろうが問題ないと思うが
コピー後のTextBoxに同じライン数ないといけないとかなると最後の行を処理しないか
偶数行になるように行を捏造するかしないとだめだろけど俺が決める仕様じゃないので知らないというか・・
0437デフォルトの名無しさん2010/12/29(水) 11:35:16
教えてほしいのですが、あるクラスからプロパティをリフレクションで取得し、
その対応するプロパティ名と同じスタティックなクラスを呼び出す場合どのようにしたらよいでしょうか?
実際にしたいことはテーブル情報とDataの入ったエンティティとを比較し、文字列制限チェックやヌルチェックなど
を行いたいです。

Type typeData = tyeof(typeData);
PropertyInfo[] pi = tyepInfo.GetProperties();
foreach(var p in pi)
{
ここにp.Nameで取得した名前とスタティックなクラス
  の名前を対応付けて処理をしたい。
}

//スタティックなクラス
public static class InfoTable
{
public static class Person//このPersonという名前とプロパティ名を緋付けたいです。
{
public static string ColName { get { return "列名"; } }
public static int MaxSize { get { return 100; } }
public static bool NotNull { get { return false; } }
}
}

0438デフォルトの名無しさん2010/12/29(水) 11:38:57
GetNestedTypesとか使えばいいんじゃねーの
0439デフォルトの名無しさん2010/12/29(水) 11:45:29
そういうのはT4Templateとか使って簡易DSLっぽいものから検証コード自動生成したほうが早いよ
04404372010/12/29(水) 14:23:14
>>438
そのメソッドを使って取得できたのですが・・・今度はEntity側の取得方法で詰まってしまいました;w;
どのようにして該当プロパティの値を取得すればよいでしょうか?よろしくおねがいいたします。

public void ToCheck(SomethingEntity typeData)
{
Type typeInfoEnt = typeData.GetType();//エンティティの型情報取得
Type typeInfoTable = typeof(SomethingEntityTable table);//エンティティのテーブル型情報取得
PropertyInfo[] pi = typeInfoEnt.GetProperties();//エンティティのプロパティのArray取得
foreach (var p in pi)
{
var t=typeInfoTable.GetNestedType(p.Name);//エンティティのプロパティの名前と同じ名前のクラスを取得
int? maxSize = t.InvokeMember("MaxSize",BindingFlags.GetProperty,null,0,null) as int?;
bool? notNull = t.InvokeMember("NotNull", BindingFlags.GetProperty, null, 0, null) as bool?;
    //ToDo:ここにテーブルの値(maxSizeとnotNull)を条件としたチェックを行う
//現在選択されているpのプロパティのtypeDataの情報が欲しいです・・・ 
}
}
0441デフォルトの名無しさん2010/12/29(水) 14:40:39
とりあえずPropertyInfoのメンバ一覧見ろ
0442デフォルトの名無しさん2010/12/29(水) 14:52:59
foreach(var p in pi)
{
var testValue = p.GetValue(typeData , null );
 //var testValue = p.GetValue(typeData , null ) as string ; 

で試したけどうまく行かず@w@
0443デフォルトの名無しさん2010/12/29(水) 15:08:39
プロパティの使い方教えろ
0444デフォルトの名無しさん2010/12/29(水) 15:49:26
.
0445デフォルトの名無しさん2010/12/29(水) 15:52:55
演算子のオーバーロードの使い方教えろ
0446デフォルトの名無しさん2010/12/29(水) 16:25:48
断わる
0447デフォルトの名無しさん2010/12/29(水) 16:46:12
上手な断り方教えろ
0448デフォルトの名無しさん2010/12/29(水) 17:30:16
                      クルッ
.                     ハ,,ハ    ミ  _ ドスッ
.                    ( ゚ω゚ )彡―─┴┴─―
    *  *  *  \       /   つ  お断りし /      ハ,,ハ
  *          *   \   〜′ /´ └―─┬/       ( ゚ω゚ ) お断りします       
 *    ハ,,ハ     *   \   ∪ ∪      /        /    \         
 *   ( ゚ω゚ )    *     .\         /       ((⊂  )   ノ\つ))         
 * お断りします  *.     . \∧∧∧∧/             (_⌒ヽ         
  *           *       <         >            ヽ ヘ }         
    *  *  *        < の し お >       ε≡Ξ ノノ `J               
────────────< 予 ま 断 >────────────
.        オコトワリ      < 感 す り >
  ハ,,ハ    ハ,,ハ     .ハ,,ハ  <. !!      >     ハ,,ハ
. .( ゚ω゚ ) . ( ゚ω゚ )  ( ゚ω゚ )  /∨∨∨∨\   ( ゚ω゚ )<お断り    .ハ,,ハ
   │      │      │   /          .\         します>( ゚ω゚ )
,(\│/)(\│/)(\│ /.              \
               /   ♪お断りします♪  \
              / ハ,,ハ   ハ,,ハ   .ハ,,ハ   ハ,,ハ\
.              ( ゚ω゚ ) ( ゚ω゚ ) ( ゚ω゚ ) ( ゚ω゚ )
0449デフォルトの名無しさん2010/12/29(水) 17:59:36
マンガ脳の恐怖、まで読んだ。
04504322010/12/29(水) 20:47:43
>>436
ありがとうございます。
http://ideone.com/o6QU0
@ITや、436さんのコードほぼ丸コピでなんとかここまで出来ましたが、
ATxtBxとBTxtBxのアイテム数を同じにする方法が分かりません。
何度も書きましたが、奇数時の処理(どちらかに+1)も教えて頂きたい!
0451デフォルトの名無しさん2010/12/29(水) 20:51:30
いやだから、それはお前がどうしたいか、だろ。
奇数時に何がどうなれば満足なのよ。
その通りに作れ。
04524322010/12/29(水) 20:53:33
>>451
奇数時にどちらかにアイテム数が一つ増えれば満足です
0453デフォルトの名無しさん2010/12/29(水) 20:57:19
>>452
難しく考えすぎだろw
>>436のコード書いた際にライン数を強調したのは
ライン数の範囲でランダム振り分けを繰り返せば
いいからだと思ったからだよ

奇数ラインの場合振り分け後のアイテム数を同じには
質問されてる方はわからないw

その辺はそういう仕様を自分で決めるかそのプログラムを
出題した?人とかと話して調整するしかないよw
0454デフォルトの名無しさん2010/12/29(水) 23:54:17
トランプのシャッフルをするときの動作を考えてみればいいんじゃないの

ItemTxtBxから取り出した文字列を一旦、配列にしまいこんで、その配列をランダムに並び変えてから、
その配列から一列ずつ取り出してATxtBxとBTxtBxに交互に入れていく。
奇数だったら一列残るから、そのときはATxtBxとBTxtBxのどちらかにランダムで入れるみたいな感じで
0455デフォルトの名無しさん2010/12/30(木) 09:35:49
クラスって何の為にインスタンス化するの?
スタティックメソッドじゃダメなの?
0456デフォルトの名無しさん2010/12/30(木) 09:56:00
いいよ
■ このスレッドは過去ログ倉庫に格納されています