public object MethodName(ref float y)
{
//method
}
Run Code Online (Sandbox Code Playgroud)
如何为此方法定义Func委托?
我是Go语言的新手.我发现自己array
与slice
数据类型混淆了.
从Go docs,数组描述如下:
数组在Go和C中的工作方式有很大差异.在Go中,
- 数组是值.将一个数组分配给另一个数组会复制所有元素.
- 特别是,如果将数组传递给函数,它将接收数组的副本,而不是指向它的指针.
- 数组的大小是其类型的一部分.类型[10] int和[20] int是不同的.
功能:
与C系列中的所有语言一样,Go中的所有内容都按值传递.也就是说,函数总是获取正在传递的东西的副本,就好像有一个赋值语句将值赋给参数.例如,将int值传递给函数会生成int的副本,并且传递指针值会生成指针的副本,但不会生成它指向的数据.
sort.Ints(arrayValue)
当我将其声明为数组而不是切片时,为什么要修改传递的变量?
码
var av = []int{1,5,2,3,7}
fmt.Println(av)
sort.Ints(av)
fmt.Println(av)
return
Run Code Online (Sandbox Code Playgroud)
产量
[1 5 2 3 7]
[1 2 3 5 7]
Run Code Online (Sandbox Code Playgroud) 我有一个定义了函数的Go程序.我还有一张应该有每个功能键的地图.我怎样才能做到这一点?
我试过这个,但这不起作用.
func a(param string) { } m := map[string] func { 'a_func': a, } for key, value := range m { if key == 'a_func' { value(param) } }
我正在阅读Pro MVC 2书,并且有一个为HtmlHelper类创建扩展方法的示例.
这里是代码示例:
public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int,string> pageUrl)
{
//Magic here.
}
Run Code Online (Sandbox Code Playgroud)
以下是一个示例用法:
[Test]
public void Can_Generate_Links_To_Other_Pages()
{
//Arrange: We're going to extend the Html helper class.
//It doesn't matter if the variable we use is null
HtmlHelper html = null;
PagingInfo pagingInfo = PagingInfo(){
CurrentPage = 2,
TotalItems = 28,
ItemsPerPage = 10
};
Func<int, String> pageUrl = i => "Page" + i;
//Act: Here's how it should format the links.
MvcHtmlString result …
Run Code Online (Sandbox Code Playgroud) 我知道如何使用Action
和Func
在.NET中,但每次我开始,使用我调用的常规旧方法可以实现完全相同的解决方案.
这排除了当一个Action
或者Func
被用作我无法控制的东西的参数时,比如LINQ .Where
.
基本上我的问题是......为什么这些存在?他们给了我什么额外的和新的一个简单的方法不?
有一些类似的问题,但不完全像我的.
对于没有返回值(即无效)且没有参数的函数,是否存在Func等价物?
相关的问题是Func没有返回任何东西? 但这并不适用于无效类型.
(我需要它来从我的视图模型请求操作到我的视图).
我喜欢将泛型类型转换器函数发送到方法,但我无法弄清楚如何做到这一点.
这是解释我想要实现的内容的无效语法,问题是我不知道如何与我的func一起指定泛型类型:
public void SomeUtility(Func<T><object,T> converter)
{
var myType = converter<MyType>("foo");
}
Run Code Online (Sandbox Code Playgroud)
编辑(参见我在Lawrence评论中的讨论):通过"泛型转换器"我的意思是我想传入一个可以转换为任何强类型<T>(不是对象)的转换器,所以我的下一行方法可能是:
var myOtherType = converter<MyOtherType>("foo");
Run Code Online (Sandbox Code Playgroud)
我想作为参数传递的委托看起来像这样:
private delegate TOutput myConverterDelegate<TOutput>(object objectToConvert);
Run Code Online (Sandbox Code Playgroud)
这更像是一种语法/ C#探索,为了完成工作,我可能会使用一个接口,但我希望这可以用func/delegate来实现.
对不起,如果这是基本的,但我试图接受.Net 3.5.
问题:Func <>有什么好处,它有5个重载吗?从它的外观来看,我仍然可以自己创建一个类似的delgate,MyFunc <>具有5个重载甚至更多.
例如:public delegate TResult MyFunc<TResult>()
和各种超载的组合......
当我试图理解Func <>委托并且遇到以下情况时,想到了这个想法:
Func<int,int> myDelegate = (y) => IsComposite(10);
Run Code Online (Sandbox Code Playgroud)
这意味着一个委托有一个int类型的参数和一个int类型的返回类型.有五种变体(如果你通过intellisense查看重载).所以我猜我们可以有一个没有返回类型的委托?
所以我有理由说Func <>不是很好,只是我们可以使用的.Net框架中的一个例子,如果需要,创建自定义"func <>"代表以满足我们自己的需求?
谢谢,
Func<a, out b, bool>
,只是不编译,如何声明我想要第二个参数是out
一个?
我想这样使用它:
public class Foo()
{
public Func<a, out b, bool> DetectMethod;
}
Run Code Online (Sandbox Code Playgroud) 我读到C#lambdas可以被非法转换为Action或Func,但是lambda不能直接执行定义lambda函数并立即执行它 例如:
int n = (()=>5)(); //doesn't work
int n = ((Func<int>)(()=>5))(); //works
Run Code Online (Sandbox Code Playgroud)
那么lambda的实际类型是什么?为什么不能直接调用它?是因为C#类型系统比Haskell或Scala系统"弱"吗?