- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面是一些示例代码。我收到错误消息“无法将类型‘string’隐式转换为‘T’”
public ValueTuple<string, T> TestMethod<T>()
{
return ("test", "");
}
我该怎么做呢?这是否超出了 ValueTuple 的限制?
我正在使用的真实代码示例
public ValueTuple<bool, T> RunSelectAllCommand<T>(MySqlCommand command,
List<MySqlParameter> parameterCollection) where T : class
{
using (MySqlConnection conn = new MySqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = command.CommandText;
// if parameters for query are specified, add them here.
if (parameterCollection != null)
{
cmd.Parameters.AddRange(parameterCollection.ToArray());
}
using (var reader = cmd.ExecuteReader())
{
// We're selecting all keys from registration database
// this is probably a horrible design. oh, well...
if (typeof(T) == typeof(KeyRow))
{
List<KeyRow> data = new List<KeyRow>();
while (reader.Read())
{
data.Add(new KeyRow(reader["keycode"].ToString(),
reader["apikey"].ToString(),
reader["ipaddress"].ToString(),
DateTime.Parse(reader["date"].ToString()),
reader["hwid"].ToString() ?? ""));
}
return (true, data as T);
}
}
}
return (false, null);
}
最佳答案
使用您的示例,我提出了以下内容作为如何执行您正在尝试执行的操作的示例。这使用一个通用实现方法来重用您可能返回的各种类型,一个非通用方法来公开返回这些类型。
public ValueTuple<bool, List<KeyRow>> RunSelectAllKeyRowCommand(IDbCommand command, List<IDataParameter> parameterCollection) =>
RunSelectAllCommandImpl<KeyRow>(command,
parameterCollection,
reader => new KeyRow(reader["keycode"].ToString(), reader["apikey"].ToString(), reader["ipaddress"].ToString(), DateTime.Parse(reader["date"].ToString()), reader["hwid"].ToString() ?? ""));
private ValueTuple<bool, List<T>> RunSelectAllCommandImpl<T>(IDbCommand command, List<IDataParameter> parameterCollection, Func<IDataReader, T> mapper) where T : class
{
using (IDbConnection conn = GetDataConnection())
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = command.CommandText;
foreach(var parameter in parameterCollection) // if parameters for query are specified, add them here.
cmd.Parameters.Add(parameter);
using (var reader = cmd.ExecuteReader())
{
List<T> data = new List<T>();
while (reader.Read())
data.Add(mapper(reader));
return (true, data);
}
}
return (false, null);
}
关于c# - 我可以在 ValueTuple 中返回泛型类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49949534/
考虑以下类型: (int, int) → 管理。 struct MyStruct { public (int,int) Value; } → 不受管理! 问题: 非泛型结构 MyStruct ,它有一
我如何检查 ValueTuple 列表的类型是否为 List , 不考虑参数的类型。 可能是: new List() new List() new List() 我尝试过的 public stati
B"H 我正在尝试使用 C# 7 的新元组功能,但遇到了一些问题。实际上,它们工作正常,我不确定是什么改变导致它们损坏。 我正在使用 ASP.Net 4、MVC 5,目标是 .net framewor
命名 ValueTuple 元素时,是否应该大写? (string Name, int Index) rec; 或 (string name, int index) rec; 编辑: 似乎约定是 Pa
我正在尝试使用反射在运行时设置 ValueTuple 的字段,但遇到了问题。我怀疑我不了解 FieldInfo.SetValue 的工作原理。 var a = (5, 5); a.Item1 = 6;
是否可以编写一个 C# 方法来接受具有任意数量的相同类型的值元组并将它们转换为列表? 编辑 2/6/2019我接受了提供的答案作为正确答案。我还想提供一个使用不是接口(interface)的基类的解决
我将返回大型 List 对象作为我的 ValueTuple 中的参数之一。像这样的东西: (bool success, List data string error)> Get(string temp
我有一个用例,我需要检查某个值是否为 C# 7 ValueTuple,如果是,则循环遍历每个项目。我尝试检查 obj is ValueTuple 和 obj is (object, object) 但
我尝试使用 ValueTuple 结构并尝试实现一个不可变的复合键。键由值类型组成。 我试图通过一些单元测试来破坏以下实现,但到目前为止没有成功。我错过了什么吗? 此外,这只是出于好奇,我想了解 Va
当我检查我的缓存以查看我的 ValueTuple 是否在缓存中时,我使用下面的代码。在这种情况下,返回的值为空(也就是缓存中不存在)。当代码运行时,我在第一行收到 object not set to
我在 C# 中尝试 ValueTuple 类,我对属性命名有疑问,让我们看看: 如果实例化一个 ValueTuple 声明这样的对象:var tuple1 = (Name: "Name1", Age:
假设我有一个方法 foo,它返回一个 ValueTuple,其中一个成员是一次性的,例如 (IDisposable, int) . 确保调用方正确处理返回的一次性对象的最佳方法是什么? 我尝试了以下方
我想这可能是一本方便的字典: var myDict = new Dictionary(); 散列会是什么样子? 等效的键类型(结构)是什么样的? 最佳答案 是的,没关系。 ValueTuple fam
有一个方法接收一个ValueTuple,修改后返回。在这种情况下,我可以在方法参数中指定 ValueTuple 的字段名吗? private static void Operation() {
如何像这样创建超过八个值的 ValueTuple 列表: (int Id, string FirstName, string LastName, int Vek, int City, int Zip,
这可以在 C# 7.3(框架 4.8)中正确编译: (string, string) s = ("a", "b"); (object, string) o = s; 我知道这是以下内容的语法糖,它也可
这个问题已经有答案了: Why can't class fields be var? [duplicate] (4 个回答) 已关闭 4 年前。 我想初始化 ValueTuples 的静态只读数组,我
我刚刚将一个 DLL 文件包含到我的项目中,并且正在使用一种返回 List 的方法。 .我最近才意识到 ValueTuple C# 7 中的数据类型,并希望使用它而不是返回的普通元组。我知道我可以循环
这个问题已经有答案了: Why can't class fields be var? [duplicate] (4 个回答) 已关闭 4 年前。 我想初始化 ValueTuples 的静态只读数组,我
我刚刚将一个 DLL 文件包含到我的项目中,并且正在使用一种返回 List 的方法。 .我最近才意识到 ValueTuple C# 7 中的数据类型,并希望使用它而不是返回的普通元组。我知道我可以循环
我是一名优秀的程序员,十分优秀!