首页 / C# / c#-隐式键入的参数
c#-隐式键入的参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-隐式键入的参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1619字,纯文字阅读大概需要3分钟。
内容图文
与this question类似,我决定看看是否有可能在不必定义类型的情况下将方法中的参数提取为隐式类型的变量.我理想的解决方案如下所示:
var result = LiftOutParam((out p1, out p2, out p3) => {
return CallMyMethod(i1, i2, out p1, out p2, out p3);
});
var o1 = result.Item1;
var o2 = result.Item2;
var o3 = result.Item3;
var returnValue = result.Item4;
在这种情况下,CallMyMethod具有2个常规输入变量,3个out参数和一个返回值.我希望编译器根据传递给LiftOutParam的委托的语义自动确定o1,o2,o3和returnValue的类型.因此,我为out参数的每种组合创建了一些帮助程序委托和方法.这是3个out参数的示例:
public delegate TReturn Lift<T1, T2, T3, TReturn>(
out T1 o1, out T2 o2, out T3 o3);
public static Tuple<T1, T2, T3, TReturn> LiftOutParam<T1, T2, T3, TReturn>(
Lift<T1, T2, T3, TReturn> Lift) {
T1 o1;
T2 o2;
T3 o3;
TReturn ret = Lift(out o1, out o2, out o3);
return new Tuple<T1, T2, T3, TReturn>(o1, o2, o3, ret);
}
从理论上讲,编译器应该能够基于委托人的语义来确定类型T1,T2,T3和TReturn(输出p1,输出p2,输出p3). {return CallMyMethod(i1,i2,out p1,out p2,out p3); }.但是,除非我在委托中指定每个out参数的类型,否则以上代码不会编译.
有没有办法做我想完成的事情?要编写一个通用的辅助方法,可以将out参数的值提取到隐式类型的局部变量中,而不必在任何地方显式定义类型?
解决方法:
这里有两个问题:
>当lambda表达式的一个或多个参数需要ref或out修饰符时,语法要求您必须为lambda表达式的所有参数指定类型.这是语法问题,无论编译器是否能够推断类型都适用.
>必须有一个类型可以推断.如果有办法
void MyMethod<T>(Action<T> action)
{
}
那么您将无法像这样调用此方法:MyMethod(t => {});因为在这种情况下,无法推断T是什么.必须将T推断为一种特定类型.这可能是一种类型,它依赖于调用MyMethod时作用域内的另一个通用参数.
内容总结
以上是互联网集市为您收集整理的c#-隐式键入的参数全部内容,希望文章能够帮你解决c#-隐式键入的参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。