- ふらっと 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 という標準機能があることを発見しまして、それにて解決しました。
|
|