C#中如何声明(string, IDictionary<string, object>)类型变量
报错原因
你写的var sqlQuery = new (string, IDictionary<string, object>)触发编译错误,是因为C#中new (类型1, 类型2)的写法是用来构造新值元组实例的,必须在后续括号中按顺序传入对应类型的初始值,你只标注了类型没有传入初始化参数,编译器无法完成实例化自然报错。而且你是要接收已有方法的返回值,本身就不需要手动new新元组。
正确声明方式
根据使用场景选择对应写法即可:
- 直接调用目标方法赋值,用
var做隐式类型推断,是最简洁的写法,不需要手动书写完整类型签名:
var sqlQuery = 调用对应遗留系统方法();
- 如果需要提前声明变量(比如要在不同分支逻辑中给变量赋值),可以显式指定元组类型,不需要加
new关键字:
// 可以给元组成员起语义化名称,方便后续调用时识别 (string sqlText, IDictionary<string, object> parameters) sqlQuery = default; // 后续逻辑中赋值 if (满足某条件) { sqlQuery = 调用对应遗留系统方法(); }
如果不需要给元组成员命名,也可以直接简写类型声明:
(string, IDictionary<string, object>) sqlQuery = default;
补充说明:如果确实需要手动构造该类型的元组实例,必须传入两个位置的匹配参数,例如
var temp = new (string, IDictionary<string, object>)("select * from test", new Dictionary<string, object>());,但接收方法返回值的场景下不需要做这个操作,直接赋值即可。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

