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

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

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

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0002デフォルトの名無しさん2007/11/18(日) 16:10:06
乙
0003デフォルトの名無しさん2007/11/18(日) 16:12:34
C#, C♯, C#相談室 Part44
http://pc11.2ch.net/test/read.cgi/tech/1194956418/

C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/

【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
http://pc11.2ch.net/test/read.cgi/tech/1162950198/

Windows Live プログラミング
http://pc11.2ch.net/test/read.cgi/tech/1188112572/

初心者のためのプログラミング言語ガイド Part6
http://pc11.2ch.net/test/read.cgi/tech/1193132235/
0004デフォルトの名無しさん2007/11/18(日) 16:18:35
>>1は紙!!
0005デフォルトの名無しさん2007/11/18(日) 17:15:45
??演算子って、参照型の代入に使っても問題ありませんか?
NULL許容型への代入専用だったりします?
一応コンパイルが通ってうごくみたいですが
0006デフォルトの名無しさん2007/11/18(日) 17:17:03
問題ない
000752007/11/18(日) 17:26:13
>>6
了解です。
ありがとうございました。
0008デフォルトの名無しさん2007/11/18(日) 18:21:42
前スレ>>1000は元気かのう

0009デフォルトの名無しさん2007/11/19(月) 00:15:21
XMLのDOM読み込みってのは文書構造(属性の名前とか)が事前に分かってないとダメなの?
0010デフォルトの名無しさん2007/11/19(月) 00:16:25
意味が分からんが、文書構造が分からんXMLに何か意味があるのか?
0011デフォルトの名無しさん2007/11/19(月) 00:18:32
>>9
わかって無くても問題ないけど、使い道がわからんな・・・
0012デフォルトの名無しさん2007/11/19(月) 00:34:50
いえ、こんな風に"data"って直書きしてたので気になっただけです・・
string data = rootElement.GetAttribute("data");
0013デフォルトの名無しさん2007/11/19(月) 00:39:25
やっぱり意味が分からん
何が気になったの? どうならいいの?
0014デフォルトの名無しさん2007/11/19(月) 00:47:05
そもそも、文書構造がいらないならXml使わないでCSV使えばいいだろう。
0015デフォルトの名無しさん2007/11/19(月) 00:48:24
文書構造が分かってないとDOMは使えないのか?ってことが気になっただけです。
0016デフォルトの名無しさん2007/11/19(月) 00:54:46
質問です。
数百、数千のファイルの情報をDBに登録したいのですが、
ExecuteNonQuery()でINSERT文を発行する以外でいい方法ありますでしょうか?
0017デフォルトの名無しさん2007/11/19(月) 01:05:47
また意味の分からんのが来たなw
0018デフォルトの名無しさん2007/11/19(月) 01:14:51
DOMは文書構造わからなくても使えるが、シリアライズとデシリアライズで調べてみたら?
001992007/11/19(月) 01:24:14
すみません。XMLについて勉強してまして気軽に質問してしまいました。
XmlReaderが上からベタ読みで、DOMはそうじゃない との記述があったのに
サンプルコードが何かベタ書きだったのであれ?と思いました。
DOM含めXML勉強して出直してきますm(_ _)m
0020デフォルトの名無しさん2007/11/19(月) 01:55:46
べたってなんだよ
0021デフォルトの名無しさん2007/11/19(月) 23:16:07
>>19
どこにそんなことかいてある?
0022デフォルトの名無しさん2007/11/20(火) 09:25:02
DOMのパーサがそうなだけで
それを使うアプリなんか作り方によるだけ。
0023デフォルトの名無しさん2007/11/20(火) 10:59:00
クラスのインスタンスをフィールドに含める時に、newって何時します?

private ClassA a = new ClassA();
というように、宣言する時に同時にnewすることも、
コンストラクタの中でnewしてもどちらでも良いクラスがありますよね?
皆さん、どうしてます?
0024デフォルトの名無しさん2007/11/20(火) 11:33:05
おれの場合はインスタンスを再利用する場合はコンストラクタ
使い捨ての場合はフィールドで行っているよ
0025デフォルトの名無しさん2007/11/20(火) 12:12:15
宣言時にnewするってのはコンストラクタでnewするってことだよ
つまり違いはない
ただ前者の場合、引数に他のフィールドが使えないってだけ
0026デフォルトの名無しさん2007/11/20(火) 12:45:44
long配列をdouble配列に変換したいのですが、一発でやる方法はないのでしょうか?
下記だとエラーが出てコンパイル出来ないのですが、一個一個ループで変換するしか無いのでしょうか?
long[] x = new long[10];
double[] y = new double[10];
y = (double[])x;
0027デフォルトの名無しさん2007/11/20(火) 13:10:44
long[] l = { 10, 10 };
double[] d = { 20, 20 };

object l2 = (object)l;
d = (double[])l2;
0028デフォルトの名無しさん2007/11/20(火) 13:19:18
>>27
指定されたキャストは有効ではありません
というエラーが出るのですが・・・
0029272007/11/20(火) 13:26:36
間違えた。
キャストが有効なのはジェネリクスだけだった。
配列は構造体だからループが一番早いと思う。
0030デフォルトの名無しさん2007/11/20(火) 14:26:48
アルファベットを順番に配列に格納したいのですがどうしたらよいでしょうか?

string[] strWord = new String[26];
strWord[0] = "A";
strWord[1] = "B";
...

こんなやり方しか知らなくて・・・よろしくお願いします。
0031デフォルトの名無しさん2007/11/20(火) 15:34:52
((char)('A' + i)).ToString()
0032302007/11/20(火) 15:44:04
>>31
ありがとうございました
0033デフォルトの名無しさん2007/11/20(火) 16:16:05
ConvertAllでいいだろ多分。
0034デフォルトの名無しさん2007/11/20(火) 16:18:57
byte[] bytesData = System.Text.Encoding.UTF8.GetBytes("A");
string[] str = new string[26];

for (int i = 0; i < 26; i++)
{
bytesData[0] + i;
str[i] = System.Text.Encoding.UTF8.GetString(bytesData);
}
0035デフォルトの名無しさん2007/11/20(火) 17:07:52
なんつーことを…
0036デフォルトの名無しさん2007/11/20(火) 18:52:16
まさに外道
0037デフォルトの名無しさん2007/11/20(火) 19:14:11
byte[] bytesData = System.Text.Encoding.UTF8.GetBytes("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
string[] str = new string[26];

for (int i = 0; i < 26; i++)
{
str[i] = System.Text.Encoding.UTF8.GetString(bytesData[i]);
}
0038デフォルトの名無しさん2007/11/20(火) 19:16:46
冗談はこの辺にして。
string[] strWord = { "A","B","C"};
0039デフォルトの名無しさん2007/11/20(火) 22:08:50
>>26
それがなぜエラーになるか、わかれば少しレベルアップできますよ。
0040デフォルトの名無しさん2007/11/21(水) 10:53:34
ACB→YAZのようにずらして表示させたいんですけど
どうやったらできますかね?
0041デフォルトの名無しさん2007/11/21(水) 11:08:21
どうずらすの?
0042デフォルトの名無しさん2007/11/21(水) 11:09:27
GetByte か アルファベット全体の配列を持つ
0043デフォルトの名無しさん2007/11/21(水) 11:21:28
string ShiftLeft2( string str )
{
    const char DEF = (char)( 'Z' - 'A' + 1 );
    const char def = (char)( 'z' - 'a' + 1 );

    StringBuilder sb = new StringBuilder( str.Length );
    for( int i = 0; i < str.Length; i++ )
    {
        char ch = str[i];
        if( 'A' <= ch && ch <= 'Z' )
        {
            ch = (char)( ch - 2 );
            if( ch < 'A' )
                ch = (char)( ch + DEF );

        }
        else if( 'a' <= ch && ch <= 'z' )
        {
            ch = (char)( ch - 2 );
            if( ch < 'a' )
                ch = (char)( ch + def );
        }
        sb.Append( ch );
    }
    return sb.ToString();
}
0044402007/11/21(水) 11:25:23
ありがとうございます
やってみます
0045デフォルトの名無しさん2007/11/21(水) 18:01:46
enumをintにするには、ただ単にintでキャストして、(int)Enum.Instanceとするだけで、
0から順番にintに出来ると思うのですが、逆は簡単に出来るのでしょうか?
swich(num)で場合分けしてintからenumの文字列を得るしかないのでしょうか?
0046デフォルトの名無しさん2007/11/21(水) 18:58:25
>>45
Enum.GetName()
0047デフォルトの名無しさん2007/11/21(水) 19:02:15
>>46
どうも有り難うございます〜。お手数お掛けしてすみませんでした。
Enum.GetName(typeof(enum), int);
0048デフォルトの名無しさん2007/11/21(水) 19:43:13
(num as enum).ToString()
0049デフォルトの名無しさん2007/11/21(水) 19:50:36
逆も普通に列挙体の型にキャストするだけだけど
なんで文字列とかそういう話になるの?
0050デフォルトの名無しさん2007/11/21(水) 19:51:55
あひょっとして((enum)num).ToString()じゃないと駄目だったかな?
0051デフォルトの名無しさん2007/11/21(水) 19:53:34
>>48はコンパイル通らないけど
参照型でも普通>>48みたいなasの使い方はしないよ
asはnullチェックとセットじゃないと意味がない
失敗したときわかりにくいし
0052デフォルトの名無しさん2007/11/21(水) 19:56:56
>>48
それは、最初、直感的にやってみてエラーになったんですが、できるんでしょうか?
asオペレータは参照型で使用してくださいとなります。
enumは値型ですから駄目?
0053デフォルトの名無しさん2007/11/21(水) 21:08:11
短く書きたかっただけ、ちょっと勘違い(値型でもいけたかなと思ったけど、やっぱりで>>50)。
0054デフォルトの名無しさん2007/11/21(水) 22:28:51
フォーム上に配置されたコンポーネント(Component派生クラス)の内部から、
自分が配置されているフォームを取得することはできないでしょうか。

どうしても無理なら、カスタムデザイナを使って、フォームに配置されたときに
自動的にプロパティを設定するようなやり方にしようかと思っているのですが。
0055デフォルトの名無しさん2007/11/21(水) 22:39:11
FindForm
こんなVBっぽい機能使うなよw
0056デフォルトの名無しさん2007/11/21(水) 22:50:59
ComponentにFindFormなんてないだろ
0057デフォルトの名無しさん2007/11/22(木) 02:16:54
こっちじゃないだろうか?
ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.parent(VS.80).aspx
0058デフォルトの名無しさん2007/11/22(木) 09:59:40
それは違う。
全然違うw
0059デフォルトの名無しさん2007/11/22(木) 11:17:27
string[] str = new string[50];
文字列配列が50個あって、これをカンマで全部つなげて文字列にしたいんだが、

string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・

これしか思いつかないんだorz
もうちょっとスッキリした書き方って何かありますか?
0060デフォルトの名無しさん2007/11/22(木) 11:20:37
string value = string.Join(",", str);
0061592007/11/22(木) 11:27:11
>>60
ありがとう、おかげさまでスッキリ書けました。大感謝です!!
0062デフォルトの名無しさん2007/11/22(木) 11:27:12
Join知らなくても、せめてforループくらい思いつかないと、配列の意味無いじゃん。
0063デフォルトの名無しさん2007/11/22(木) 13:06:58
FizzBuzzやらせたら面白いことになりそうだな。
0064デフォルトの名無しさん2007/11/22(木) 13:12:30
foreach(string st in str)
{
0065デフォルトの名無しさん2007/11/22(木) 13:22:35
+= じゃなくて StringBuilder を使ってくれるといいんだが。
0066デフォルトの名無しさん2007/11/22(木) 14:16:26
文字列だけの連結なら、StringBuilderより+演算子を使う方が速い。
必要なだけの文字列の長さを計算して、1回のピープ確保で済む。
0067デフォルトの名無しさん2007/11/22(木) 14:53:58
>>66
string value = "";
foreach (string s in str) {
  value += s;
}
は、まずいだろ。
0068デフォルトの名無しさん2007/11/22(木) 14:59:25
>>67
たぶん>>66は
string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・
これが高速だと言いたかったんだろ。

forループ回して+=で結合するのや
StringBuilder インスタンスのロスなどを考えても
今回の配列50個程度の文字列結合だと、
速度の点で言えばどの方法でも大差なさそうだけどね。

>>59の
string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・
見た目はカコワルイが、これが一番高速ってことかなwww
0069デフォルトの名無しさん2007/11/22(木) 15:10:11
joinでも変わらんだろ大して。
0070デフォルトの名無しさん2007/11/22(木) 15:14:33
総合的に一番ベストな回答はjoinだろ。
将来配列の個数が増えたときも対応が利くし
+=よりは速い。
そして何よりもスマートに記述できる。
0071デフォルトの名無しさん2007/11/22(木) 15:36:23
>これしか思いつかないんだ
すまんすまん、60=62だが、ここに突っ込んだんだよw
0072デフォルトの名無しさん2007/11/22(木) 15:45:35
一時StringBuilderより+利用時の暗黙の配列の方が重かったりしてw
0073デフォルトの名無しさん2007/11/22(木) 16:03:11
タブコントロール内にタブページが3ページあります。
3ページ目の中にはDataGridViewがあります。

タブページ外のボタン(タブコントロールと同じフォーム内)を
クリックしたときに、3ページ目のコピーを4ページ目として、
新たにタブページを作成するメソッドって何かありませんか?

0074732007/11/22(木) 16:11:41
ちょっと聞き方に問題ありました、すみません。
>新たにタブページを作成するメソッドって何かありませんか?
新たにタブページを作成するスマートな方法をご存知ないですか?
に訂正します。
0075デフォルトの名無しさん2007/11/22(木) 17:13:26
DataGridView にどんなデータが入ってるか知らんから
データ舐めて新規につくれとしか


>>66
                    ,ィ⊃  , -- 、
          ,r─-、      ,. ' /   ,/     }     ち
          {     ヽ  / ∠ 、___/    |
   署     ヽ.      V-─- 、  , ',_ヽ /  ,'      ょ
           ヽ  ヾ、  ',ニ、 ヽ_/ rュ、 ゙、 /
   ま        \  l  トこ,!   {`-'}  Y        っ
             ヽj   'ー'' ⊆) '⌒`  !
   で    , 、      l     ヘ‐--‐ケ   }        と
        ヽ ヽ.  _ .ヽ.     ゙<‐y′   /
   来     }  >'´.-!、 ゝ、_  ~  ___,ノ
         |    −!   \` ー一'´丿 \
   い    ノ    ,二!\   \___/   /`丶、
        /\  /    \   /~ト、   /    l \
■ このスレッドは過去ログ倉庫に格納されています