1

pcl Xamarin では、クエリを実行するために使用される型を関数に渡す必要があります。私が使用しようとしたコードは次のとおりです。

public object sqlLeggi(string sql, Type myType){
 SQLiteCommand cmd = DB.CreateCommand(sql);
 var results = cmd.ExecuteQuery< myType > ();
[..]
}

しかし、うまくいきません。次のエラーが表示されます。

The type or namespace 'myType' could not be found.

そのようなことが可能かどうか誰にもわかりませんか?

どうもありがとうございました

4

1 に答える 1

1

2 つのステートメントのmyTypeは、非常に異なる役割を果たします。

public object sqlLeggi(string sql, Type myType){

ここでmyTypeは、 Type クラスTypeのインスタンスを参照するオブジェクトです。

var results = cmd.ExecuteQuery< myType > ();

これは、特定の型を参照する構文構造であり、この場合は実際にmyType名前が付けられます。 myType

現在、通常、この特定の問題を処理するには 2 つの方法があります。

  1. のオブジェクト型を見て、代わりにオブジェクト パラメーターを取るcmdオーバーロードまたは代替メソッドがあるかどうかを確認します。ExecuteQueryType
  2. Typeそもそもオブジェクトがないように、メソッドをジェネリックにします。

最初のケースは、おそらく次のように記述されます。

var results = cmd.ExecuteQuery(myType);

2 番目は次のようになります。

public myType sqlLeggi<myType>(string sql{
    SQLiteCommand cmd = DB.CreateCommand(sql);
    var results = cmd.ExecuteQuery< myType > ();
    [..]
}

ご了承ください:

  1. myType代わりにメソッドを返すようにしましたobject
  2. myTypeメソッドのジェネリック パラメータとして指定されるようになりました。sqlLeggi<myType>

この場合の命名規則では、ジェネリック型パラメーターに名前を付けるTか、何かで始まるTようにする必要があるため、私のアドバイスは次のとおりです。

public T sqlLeggi<T>(string sql{
    SQLiteCommand cmd = DB.CreateCommand(sql);
    var results = cmd.ExecuteQuery<T>();
    [..]
}
于 2014-03-24T13:45:59.750 に答える