トップページ > プログラム > 2016年04月15日 > OljrwCpk

書き込み順位&時間帯一覧

7 位/209 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000400000000000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©2ch.net

書き込みレス一覧

ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©2ch.net
110 :デフォルトの名無しさん[sage]:2016/04/15(金) 10:31:19.24 ID:OljrwCpk
フォーム(コンテナ)にある、特定のコントロールだけを収集する関数を型変数を使って作ろうとしてます。

public static T[] GetControls<T>(this System.Windows.Forms.ContainerControl parent)
{
 System.Collections.ObjectModel.Collection<T> result=new System.Collections.ObjectModel.Collection<T>();

 foreach(System.Windows.Forms.Control c in parent.Controls)
 {
  T tryc = c as T;
  if(c != null) result.Add(c);
 }
 return result.ToArray();
}

しかし、「T c = ctr as T;」のところがコンパイルエラーになってしまいます。
「型パラメータは as演算子で使えません」とかで

やりたいことは、キャストを試みて成功したら云々という風にしたいのですが・・・
try catch するしかないですか?
ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©2ch.net
111 :デフォルトの名無しさん[sage]:2016/04/15(金) 10:32:30.37 ID:OljrwCpk
失礼しました


 if(c != null) result.Add(c);


 if(tryc != null) result.Add(tryc);
ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©2ch.net
112 :デフォルトの名無しさん[sage]:2016/04/15(金) 10:44:38.51 ID:OljrwCpk
as じゃなくて

if (typeof(T) == c.GetType())
{
 result.Add(c);
}

を試みたら、Add のところで T に型変換できない、と叱られてしまいました
ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©2ch.net
113 :デフォルトの名無しさん[sage]:2016/04/15(金) 10:56:45.41 ID:OljrwCpk
大変失礼しました。

OfType という標準機能があることを発見しまして、それにて解決しました。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。