我的第一篇(也是非常可怕的帖子)如下。
我尝试做一个完整的例子,我想要得到什么。我希望这能得到更好的解释。
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Boy> boys = new List<Boy>();
boys.Add(new Boy("Jhon", 7));
boys.Add(new Boy("Oscar", 6));
boys.Add(new Boy("Oscar", 7));
boys.Add(new Boy("Peter", 5));
ClassRoom myClass = new ClassRoom(boys);
Console.WriteLine(myClass.ByName("Oscar").Count); // Prints 2
Console.WriteLine(myClass.ByYearsOld(7).Count); // Prints 2
// This has errors...................
// But this is as I would like to call my BySomeConditions method....
Console.WriteLine( // It should print 1
myClass.BySomeConditions([myClass.ByName("Oscar"),
myClass.ByYearsOld(7)]
)
);
Console.ReadKey();
}
class ClassRoom
{
private …Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
void someFunc(void) {
printf("%s\n"), __func__);
}
Run Code Online (Sandbox Code Playgroud)
每次调用该函数时,它将打印:
someFunc
Run Code Online (Sandbox Code Playgroud)
什么是Java等价物?
我已经找到
(new Exception()).getStackTrace()[0].getMethodName()
Run Code Online (Sandbox Code Playgroud)
和
java.lang.Thread.currentThread().getStackTrace()[1].getMethodName()
Run Code Online (Sandbox Code Playgroud)
但这些看似荒谬,是否有更简单的方法?
我想创建一个在后台线程中运行另一个方法的方法.像这样的东西:
void Method1(string param)
{
// Some Code
}
void Method2(string param)
{
// Some Code
}
void RunInThread(AMethod m)
{
//Run the method in a background thread
}
Run Code Online (Sandbox Code Playgroud) 我试过:
from sqlalchemy import VARCHAR
result = session.query(Table).filter(func.convert(VARCHAR(8), Table.datetimefiedld, 8) >= some_date).all()
Run Code Online (Sandbox Code Playgroud)
我收到 AttributeError: 'VARCHAR' 对象没有属性 'self_group'
有人可以解释一下如何在 sqlalchemy 中使用 CONVERT 函数吗?谢谢!
如何使用FakeItEasy框架检查Func是否被调用?
例子:
Func<bool> myFunc = () => true;
// Unfortunately this fails:
A.CallTo(myFunc.Invoke()).MustHaveHappened();
Run Code Online (Sandbox Code Playgroud) 因此,当我返回一个对象时,我认为它将内存地址返回给您可以引用和使用的对象(或包含内存地址的对象).
但是当你返回一个函数时实际发生了什么?
您的应用如何知道该func使用哪个对象实例?
我的直觉告诉我一个对象实例引用与func一起传递但是实际发生了什么?
我似乎无法在这个主题上找到太多.
编辑:澄清一下,我问一个方法何时返回一个函数
在Java(1.7)中,是否可以用相同的名称定义不同类型的参数的多个接口?我正在本质上追求的是精神类似Func<TResult>,Func<T1, TResult>,Func<T1, T2, TResult>,Func<T..., TResult>委托类型的.NET。非常像可选的类型参数。
存在于Java语言这样的功能还是只能用名称,如创建不同的接口Func0<TResult>,Func1<T1, TResult>,Func2<T1, T2, TResult>?
我怎样才能将 lambda 表达式写入optionObject.Forms.First(f => f.FormId == formId).MultipleIterationFunc 所以最后我有类似的东西
Func<FormObject, bool> FormID = f => f.formID == passedVal;
Run Code Online (Sandbox Code Playgroud)
然后在第一个表达式上使用它来得到类似的东西
optionObject.Forms.First(FormID).MultipleIteration
Run Code Online (Sandbox Code Playgroud)
我试过
Func<FormObject, PassedVal, bool> FormID => formID == PassedVal;
Run Code Online (Sandbox Code Playgroud)
但没有用。
请注意, lambda 表达式没有任何问题,它工作得很好。我只是想创建一个函数来用函数名称替换表达式,以使代码看起来更短且可维护。
我提供了以下查询(简化版)以从我的服务返回 IQueryable:
var query =
(from item in _entityRepository.DbSet()
where
MyCondition
orderby Entity.EntityID descending
select new DTOModel
{
Id = Entity.EntityID,
...,
//My problem is here, when I trying to call a function into linq query:
//Size = Entity.IsPersian ? (Entity.EntitySize.ConvertNumbersToPersian()) : (Entity.EntitySize)
//Solution (1):
//Size = ConvertMethod1(Entity)
//Solution (2):
//Size = ConvertMethod2(Entity)
});
Run Code Online (Sandbox Code Playgroud)
而且根据我的查询,我的服务类中有以下代码:
//Corresponding to solution (1):
Func<Entity, string> ConvertMethod1 = p => (p.IsPersian ? p.EntitySize.ConvertNumbersToPersian() : p.EntitySize);
//Corresponding to solution (2):
Expression<Func<Entity, string>> ConvertMethod2 = (p) => …Run Code Online (Sandbox Code Playgroud) 我一直在重构我的项目中的一个常见模式,发现它不像使用 LINQSelect到异步函数那么简单。
对于上下文,这是当前的完成方式。
async Task<ICollection<Group>> ExecuteQueryGroupsForDomain(DomainInfo domain, int batchSize, CancellationToken ct)
{
try
{
return await BlahBlahActuallyGoGetGroupsForDomainHere(domain, batchSize, ct);
}
catch (Exception e)
{
return null;
}
}
var executeQueries = new List<Func<CancellationToken, Task<ICollection<Group>>>>();
domains.ForEach(domain =>
executeQueries.Add(async (ct) =>
await ExecuteQueryGroupsForDomain(domain, 123, ct)));
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试ForEach使用 LINQ替换循环部分:
var executeQueries = domains.Select(domain =>
async (ct) => await ExecuteQueryGroupsForDomain(domain, 123, ct));
Run Code Online (Sandbox Code Playgroud)
它抱怨Type arguments cannot be inferred by the usage让我相信我没有从 返回任何东西Select,但我显然正在返回Func我想要的。
有没有更好的方法来创建Func's列表,最好避免显式强制转换?当Select …
func ×10
c# ×7
.net ×3
linq ×3
generics ×2
java ×2
expression ×1
fakeiteasy ×1
interface ×1
iqueryable ×1
java-7 ×1
lambda ×1
python ×1
reflection ×1
select ×1
sqlalchemy ×1