给出数组时:
int[] a={1,3,4,5,67,8,899,56,12,33}
Run Code Online (Sandbox Code Playgroud)
如果我希望使用LINQ返回偶数
var q=a.where(p=>p%2==0)
Run Code Online (Sandbox Code Playgroud)
如果我使用C#2.0并严格执行func <>委托解决它的方法是什么?
我试过了 :
Func<int, bool> func = delegate(int val) { return val % 2 == 0; };
Run Code Online (Sandbox Code Playgroud)
但我很困惑如何在这里链接数组"a".
很多时候在我的程序中创建其他类可以订阅而不是创建委托并从委托创建事件的简单事件时,我只需使用Action或Func创建事件,以避免必须创建委托.
这样做有什么缺点吗?
我有...
Func<string> del2 = new Func<string>(MyMethod);
Run Code Online (Sandbox Code Playgroud)
我真的很想..
Func<> del2 = new Func<>(MyMethod);
Run Code Online (Sandbox Code Playgroud)
所以回调方法的返回类型是void.这可能使用泛型类型func吗?
我正在用C++实现一个日志处理程序,它运行良好,但是有一件事我觉得可以使用,这就是记录器得到输出的地方.
我想这不是一个大问题,但我偶然发现了__func__标识符,它基本上会保留当前函数的函数名称.
所以我在我的Log类中有一个静态函数Write,它需要一个日志级别和一个变化列表.所以我会这样称呼它:
Log::Write(LOG_DEBUG, "this is an integer: %d", 10);
Run Code Online (Sandbox Code Playgroud)
它会打印:
2013-01-02 => 10:12:01.366 [DEBUG]: this is an integer: 10
Run Code Online (Sandbox Code Playgroud)
但是我认为在消息中也有调用者可能有用这样的东西:
2013... => 10:12:... (functionName) [DEBUG]: blah
Run Code Online (Sandbox Code Playgroud)
所以我可以做的(当然)是添加__func__作为参数Log::Write,但这意味着任何时候我打电话Log::Write我也需要发送__func__总是相同的,我觉得应该可以做到没有明确地这样说.
所以我想要的是提供的功能:
Log::Write(LOG_DEBUG, __func__, "message");
Run Code Online (Sandbox Code Playgroud)
无需每次都明确输入func.
我不知道这是否真的可行,我得到的最好的选择是有一些方法可以取消引用函数内部的调用者Write,我似乎不太可能只是"推断"这样的参数.但至少值得一提,也许我可以看看有哪些选择.
谢谢.
假设我有课程A和B。
在课堂上A,我发生了以下事件:
public event Func<bool> MyEvent;
Run Code Online (Sandbox Code Playgroud)
以及以下方法:
public bool GetResult()
{
return MyEvent();
}
Run Code Online (Sandbox Code Playgroud)
在类中B,我有以下构造函数:
public B()
{
A a = new A();
a.MyEvent += a_MyEvent_one;
a.MyEvent += a_MyEvent_two;
bool result = a.GetResult();
}
private bool a_MyEvent_one()
{
return true;
}
private bool a_MyEvent_two()
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
那么, class 的构造函数末尾会出现什么结果B,为什么?
我在 c# 中有一些参数的方法:
public static void DeleteSingleItemInDataGrid
(DataGrid dataGrid, String IDcolumnName, Func<int> afterCompletionMethod_ToRun)
Run Code Online (Sandbox Code Playgroud)
我想将第三个参数类型更改为Func< void >但我不能。我该怎么做?
换句话说,我的问题是如何将方法(或具有 void 结果的函数)作为方法参数传递?
我有一个Func<ProductItemVendor, bool>存储CompareProductItemVendorIds.我想在LINQ查询中使用该表达式.
看来以下是合法的:
var results =
Repository.Query<ProductItemVendor>().Where(CompareProductItemVendorIds);
Run Code Online (Sandbox Code Playgroud)
但是,以下内容不合法:
var results = from v in Repository.Query<ProductItemVendor>()
where CompareProductItemVendorIds(v)
select v;
Run Code Online (Sandbox Code Playgroud)
此代码产生错误:
LINQ to Entities不支持LINQ表达式节点类型"Invoke".
问题:
为什么这些陈述如此不同以至于我Func<>的合法而不是另一个?我认为他们基本上都做了同样的事情.
我怎样才能做到这一点?我是否必须明确地创建我的Func<>作为Expression<Func<>>代替?
请在LINQ查询中的Using Expression <Func <>>中查看我的相关问题.
我想在运行时检查Func <...>类型的变量是否是特定的类方法.例如
class Foo
{
public static int MyMethod(int a, int b)
{
//...
}
}
Func<int, int, int> myFunc;
myFunc = Foo.MyMethod;
if(myFunc is Foo.MyMethod)
{
//do something
}
Run Code Online (Sandbox Code Playgroud) 我正在iOS Swift逐步重构一个大型项目。有些功能必须重命名,我不能直接重命名,因为许多其他模块直接调用它。相反,对于第一阶段发布,我想让函数的调用者知道请使用此函数而不是此函数。我举一个例子
fun length() - > Int {
//..... some logic
}
Run Code Online (Sandbox Code Playgroud)
期望在下一版本中将其重构为
fun count() - > Int {
//..... same logic
}
Run Code Online (Sandbox Code Playgroud)
对于第一阶段,我想保留两者length(),count()但是要警告其他开发人员不要使用现有的,即length()。所以我尝试了
fun length() - > Int {
#warning("Please use count() instead")
//..... some logic
}
Run Code Online (Sandbox Code Playgroud)
但是警告会直接发出,但不会发给呼叫者。因此,最好的方法是使呼叫者收到有关错误呼叫的通知?
注意:此处的示例只是理解问题的最简单形式。实际实现的范围和模块大小要宽得多。
func OpenFile(name string, flag int, perm FileMode) (*File, error)
f, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE|O_TRUNC, 0755)
Run Code Online (Sandbox Code Playgroud)
“O_TRUNC”是否在写入前清空整个文件?“截断”是什么意思?
另外,该函数ioutil.WriteFile()在写入之前是否清空了整个文件?