質問: こんにちは。 LINQでXMLからデータを取得し、そのデータをそれぞれの型に格納し、それを返すメソッドを作りたいと思います。 しかし、「Null許容型はダメ」とか「型を明示しろ」とか言われて全然できません。 自分で作った方を使ったジェネリック関数は作れないのでしょうか? ※型それぞれのインスタンスの中身を作る処理については、 PropertiesInfo で対応できているので、こちらは大丈夫です。 ■テーブルの型 ``` class Offices { int No; String Data; } class Workers { int No; String FullName; } ``` ■コード ``` /** コード1 **/ public T Func(T Table) where T : struct { // ここに、LINQからとったデータをそれぞれの型(T)に格納する処理が入ります。 return (T)Table; } ``` ⇒エラー: CS0453 型 'T' は、ジェネリック型のパラメーター 'T'、 またはメソッド 'Nullable' として使用するために Null 非許容の値型でなければなりません ``` /** コード2 **/ public Nullable Func(T? Table) where T : struct { // ここに、LINQからとったデータをそれぞれの型(T)に格納する処理が入ります。 return (T)Table; } ``` ⇒エラー: CS0411 メソッド 'Func(T?)' の型引数を使い方から推論することはできません。 型引数を明示的に指定してください
回答: `Func(... )` と書かないといくら T を書いてもジェネリックにはなりませんよ! Linq のメソッドも同じように書いてあるはずですので確認してみてください。 あと、 `where T : struct` ではクラスを受け入れられないので、削除して大丈夫です。