在方法的输入处,我得到了类型对象,其中有一个数组。问题是如何访问数组元素。Object[0] 不起作用,尽管我看到有一个数组和带有索引的元素。
这是返回对象的方法的代码。
public object GetImportedFromSQLite(string connstring, string idrecord,string tablename,string Idname)
{
object imported = null;
using (SQLiteConnection connect = new SQLiteConnection(connstring))
{
connect.Open();
using (SQLiteCommand fmd = connect.CreateCommand())
{
var sb= new StringBuilder();
var que = sb.Append("SELECT * FROM "+tablename+" where "+Idname+"="+idrecord);
fmd.CommandText = que.ToString();
fmd.CommandType = CommandType.Text;
SQLiteDataReader r = fmd.ExecuteReader();
while (r.Read())
{
object[] values = new object[r.FieldCount];
r.GetValues(values);
imported= values;
}
}
}
return imported;
}
这就是我想从中获取数组的方式,然后是数组的元素。但是发生错误。
var rezultFromSqLite=INSTANCE.GetImportedFromSQLite
string[]parametrsFromSqLite=(string[])rezultFromSqLite;
我收到一个演员错误。
您需要转换为数组:
指定所需的数组类型而不是
int.评论中的补充:
如果没有明确的演员表,我认为没有一种好方法可以做到这一点。如果可以通过类型变量访问数组的元素
object,那么数组类型本身就会失去意义。演员表可以写成一行:
但这并不漂亮。
但是,我看到了减少和改进代码的两种选择。
代替
做:
并自由参考索引。如果一个方法有时需要接受一个数组,有时需要接受其他对象,那么对该方法进行多次重载。
这将为您提供类型检查和安全的数组访问。
如果静态类型很烦人,那么请使用动态类型。将方法参数声明为
dynamic:C# 支持
dynamic可以采用任何类型并且可以访问数组元素的类型。在这种情况下,您将丢失类型检查,但由于 现在你有了它object,反正你没有。更新问题的附录:
rezultFromSqLiteobject包含类型数组的类型变量object[]。对象数组不能直接转换为字符串数组。这是一个可行的演员表,例如:
但是,由于您的方法返回一个数组,因此最好在方法签名中指出这一点:
之后,不需要演员表:
如果您需要一个字符串数组,而不是对象,则将对象数组转换为字符串数组并返回它: