小编Isa*_*ham的帖子

如何通过反射判断C#方法是否异步/等待?

例如

class Foo { public async Task Bar() { await Task.Delay(500); } }
Run Code Online (Sandbox Code Playgroud)

如果我们反思这个类和方法,我如何确定这是否是一个真正的async/await方法,而不仅仅是一个碰巧返回任务的方法?

class Foo { public Task Bar() { return Task.Delay(500); } }
Run Code Online (Sandbox Code Playgroud)

c# reflection asynchronous

34
推荐指数
3
解决办法
8181
查看次数

非泛型类的C#泛型方法归结为什么?

如果我有这样的课: -

static class Foo {
   public static void Bar<T>(T item) { Console.WriteLine(item.ToString(); }
}
Run Code Online (Sandbox Code Playgroud)

我知道在这个例子中没有必要使用T,因为所有的类型都有ToString()等等 - 这只是一个人为的例子.我更感兴趣的是在发动机罩下发生的事情如下: -

Foo.Bar("Hello");
Foo.Bar(123);
Foo.Bar(new Employee("Isaac"));
Run Code Online (Sandbox Code Playgroud)

我广泛地(想想!)我理解具体化,即如果你制作不同类型的泛型类,例如

List<Int32>
List<String>
List<Employee>
Run Code Online (Sandbox Code Playgroud)

然后在编译时(或运行时?)我们最终会得到三个实际的具体类型,每个类型对应一个指定的泛型参数.在我的第一个例子中是否同样适用于方法调用,即我们是否仍然有一个类Foo但是有三个Reified Bar方法,一个用于String,Int32和Employee?

c# generics reification

11
推荐指数
1
解决办法
261
查看次数

实体框架 - 使用.Include进行继承?

我认为这里有类似的帖子,但不完全一样......

我的EF模型中有两个实体 - 让我们称之为Person和Developer,后者继承自前者.

我还有一个名为Qualifications的开发者协会.这在Person实体上不可见.

如果我正在针对上下文编写查询,我该如何自动.Include()开发人员的资格,例如

来自员工的context.Employee .Include("Qualifications")选择员工

不起作用...... EF抱怨这种关系不存在(我假设因为它在Employee上不存在 - 但是在上下文中没有Developer实体,只有Employee).

entity-framework

9
推荐指数
2
解决办法
8341
查看次数

Async.Await没有捕获任务异常

我有一个不返回任何东西的任务.你不能在这样的Task上做Async.AwaitTask,所以你需要做一个Async.AwaitIAsyncTask.不幸的是,这似乎只是吞下了底层任务抛出的任何异常: -

TaskFactory().StartNew(Action(fun _ -> failwith "oops"))
|> Async.AwaitIAsyncResult
|> Async.Ignore
|> Async.RunSynchronously

// val it : unit = ()
Run Code Online (Sandbox Code Playgroud)

另一方面,AwaitTask正确级联异常: -

TaskFactory().StartNew(fun _ -> failwith "oops"                               
                                5)
|> Async.AwaitTask
|> Async.Ignore
|> Async.RunSynchronously

// POP!
Run Code Online (Sandbox Code Playgroud)

将常规(非泛型)任务视为异步但仍然可以传播异常的最佳方法是什么?

f# exception-handling task-parallel-library f#-async

9
推荐指数
2
解决办法
615
查看次数

Silverlight 4 Out of Browser:"无法确定来自Web的Xap文件的URL"

出于某种原因,每当我现在尝试在浏览器外运行我的SL4应用程序时,当我运行它时,我收到以下消息:

"无法从网络确定Xap文件的URL"

是指我的Web项目的旧名称,现在已重命名.我已经浏览了所有项目名称的参考资料,找不到了; 很明显,它从某个地方获得它!

谷歌搜索但没有找到任何东西(除了现在删除的SO问题的链接!).

任何帮助都感激不尽......

silverlight silverlight-oob

7
推荐指数
1
解决办法
2376
查看次数

TFS 2010团队构建 - 重命名文件

作为我的TFS 2010团队构建的一部分,我正在尝试将配置文件从网络位置复制到构建所在的输出文件夹.

使用xcopy作为调用进程任务,我已经成功地完成了所有工作,除了我想将文件重命名为副本的一部分.问题是,如果您提供不同的目标文件名,XCOPY会询问目标是文件还是目录,例如

XCOPY \\networkshare\configs\live.config \\networkshare\release\server.exe.config /R /Y
Run Code Online (Sandbox Code Playgroud)

如果server.exe.config是文件,则XCOPY要求我按F,如果是目录,则按D.XCOPY似乎没有办法抑制这种行为.我尝试过使用基本的COPY命令,但Team Build只是说它无法识别COPY命令.

有没有办法轻松地重命名文件作为Team Build的一部分或使用另一个命令行工具来实现这一目标?

干杯

tfs xcopy

6
推荐指数
1
解决办法
3667
查看次数

懒惰地在F#中对平坦序列进行分组

给定一系列项目如下:

[ ("a", 1); ("a", 2); ("a", 3); ("b", 1); ("c", 2); ("c", 3) ]
Run Code Online (Sandbox Code Playgroud)

我怎样才能懒惰地转换成:

{ ("a", { 1; 2; 3}); ("b", { 1 }); ("c", { 2; 3}) }
Run Code Online (Sandbox Code Playgroud)

您可以假设输入数据源已经在分组键元素上排序,例如"a""b"和"c".

我在那里使用{}表示它是一个懒惰评估的项目序列.

我已经得到它必须在源序列的IEnumerator上运行两个while循环,但这涉及创建引用变量和变异等等.我确信有更好的方法来做到这一点,可能使用递归或使用Seq库中的一些操作,例如扫描或展开?

recursion f# immutability

4
推荐指数
1
解决办法
347
查看次数

如何通过#load引用程序集时获取F#Type Provider的正确解析文件夹?

我正在编写一个类型提供程序,允许用户向其提供配置文件.我使用TP的内部配置对象来识别ResolutionFolder,我用它来获取配置文件的完全限定路径.大.

但是,在使用脚本时,我使用Paket的自动生成的加载脚本来加载我的依赖项.文件路径如下所示: -

.paket
   |--.load
   |     |-- net452
   |           |-- main.group.fsx
   |--src
       |-- myscript.fsx
       |-- config.json
Run Code Online (Sandbox Code Playgroud)

myscript.fsx包含我的脚本代码.config.json包含我将在脚本中创建的类型提供程序实例的配置.

在内部myscript.fsx我调用#load "..\.paket\.load\net452\main.group.fsx" 加载所有依赖项(包括我的TP本身),它工作正常.

然而

然后,当我尝试在脚本中进一步初始化类型提供程序时: -

type MyTPInstance = MyTp<myConfig = "config.json">
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,我的TP捕获并显示: -

The type provider reported an error: Unable to locate config file
"C:\Users\Isaac\Source\Repos\myRepo\.paket\load\net452\config.json"
Run Code Online (Sandbox Code Playgroud)

换句话说 - 看起来因为我从生活在另一个文件夹中的脚本引用了我的TP程序集,这是 FSI用作解析文件夹的文件夹 - 而不是正在运行的脚本的文件夹.我可以证明,这是问题,因为如果我的内容复制main.group.fsxmyscript.fsx直接(固定的路径,我当然包),这一切工作正常.

我怎样才能解决这个问题?其他人如何解决这个问题?

f# type-providers f#-scripting paket

3
推荐指数
1
解决办法
242
查看次数

反映F#Disriminated Union时的奇怪行为

以下代码编译并正确运行:

type FooUnion = MyCase of int * string

FSharp.Reflection.FSharpType.GetUnionCases(typeof<FooUnion>)
|> Array.tryFind(fun a -> a.Name = "MyCase")
|> Option.map(fun d -> FSharp.Reflection.FSharpValue.MakeUnion(d, [| 1; "test" |]))
|> Option.bind(function | :? FooUnion as s -> Some s | _ -> None)
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除完全限定的FSharp.Reflection并将其移动到open语句,则代码不再编译: -

open FSharp.Reflection

type FooUnion = MyCase of int * string

FSharpType.GetUnionCases(typeof<FooUnion>)
|> Array.tryFind(fun a -> a.Name = "MyCase")
|> Option.map(fun d -> FSharpValue.MakeUnion(d, [| 1; "test" |]))
|> Option.bind(function | :? FooUnion as s -> Some s | …
Run Code Online (Sandbox Code Playgroud)

reflection f# discriminated-union

1
推荐指数
1
解决办法
116
查看次数