是否有可能以某种方式实现IComparable的HashSet<'a>?原因是我有以下记录声明:
[<StructuralComparison>]
type Category = {
mutable Id: string;
Name: string;
SavePath: string;
Tags: HashSet<Tag> }
and Tag = { Tag:string; }
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,那么Category记录中的标签是类型的HashSet<Tag>- 为了将一系列类别映射到一个Map,我需要以IComparable某种方式实现...否则它只会导致:
struct,record或union类型'Category'具有'StructuralComparison'属性,但组件类型'HashSet'不满足'comparison'
请注意,我不能使用除了之外的其他任何东西,HashSet<'a>因为我正在使用的数据库可以理解任何fsharp-ish列表.
我非常需要整个F#和函数编程..我一直在寻找所有可能的文档而一无所获,所以我请求你帮我解决我的简单问题.我如何声明:
public myClass test;
在F#?
我有一个引用数据和实体层的Web.现在我想用一个控制台应用程序来扩展我的解决方案,该应用程序将执行与数据库相关的一些事情,因此也引用了数据和实体层.在我的数据和实体层中,我正在使用依赖注入,并且正在考虑是否需要再次为这些注入声明所有绑定(例如在我的Web应用程序中) - 或者我可以以某种方式共享它们,以便我的Web和控制台应用程序使用相同的绑定?
我的第一个想法是创建一个包含所有绑定的公共库,然后只调用我需要的那些..但是这会导致对程序集的大量加载的unessecary引用.
简而言之:如何在我的Web应用程序和控制台应用程序中声明我的依赖注入绑定一次并使用它们?
有什么建议?
有可能以某种方式简化界面吗?目标是为将要使用它的用户提供降噪的API.
一个例子可能是界面IFoo定义了25个方法,我只想向用户公开其中的5个,我将如何以巧妙和优雅的方式做到这一点?
正如标题所说,那我想访问x.从一个让而不是一个成员.
以下作品:
type UploadController() =
inherit Controller()
member x.UploadPath
with get() = x.Server.MapPath "~/Uploads"
Run Code Online (Sandbox Code Playgroud)
但是这个:
type UploadController() =
inherit Controller()
let uploadPath = x.Server.MapPath "~/Uploads"
Run Code Online (Sandbox Code Playgroud)
引发编译错误:
命名空间或模块"x"未定义
不可能完成的任务?
我的第一个想法是:
type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
Run Code Online (Sandbox Code Playgroud)
但是它解决了'a并且'bas obj,但它应该是类 - 因此我做了:
type ManyNavigationPropertyInfo<'a when 'a : not struct,'b when 'b : not struct>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
但这只是抛出一个错误说
类型名称中出现意外符号“,”。应为“>”或其他标记。
声明这种类型的正确方法是什么?
更新:
我的完整代码是:
type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
member x.WithMany (expr: Expr<'a -> ICollection<'b>>) =
cfg.WithMany(ToLinq(expr))
Run Code Online (Sandbox Code Playgroud)
并与2个编译器错误说,出现'a和'b应not struct。
Mjello在那里!我正在尝试创建一个F#应用程序,现在我已经打了另一面墙.
问题出现在Microsoft.FSharp.Linq.Query模块中,query如果它们作为参数传递,那里的函数就不会接受我的谓词.看一下这个:
member x.GetUsersWhere (e:User -> bool) =
query <@ ctx.Users |> Seq.filter e @>
Run Code Online (Sandbox Code Playgroud)
然后我称之为:
let service = new UserService()
service.GetUsersWhere (fun z -> z.Name = "James")
Run Code Online (Sandbox Code Playgroud)
那应该没问题呃?好吧,编译器同意:
在查询中使用了以下构造,但F#-to-LINQ查询转换器无法识别:Call(None,System.Collections.Generic.IEnumerable
1[WebFSharp.Entities.User] op_PipeRight[DbSet1,IEnumerable1](System.Data.Entity.DbSet1 [WebFSharp.Entities.User],Microsoft.FSharp.Core. FSharpFunc2[System.Data.Entity.DbSet1 [WebFSharp.Entities.User],System.Collections.Generic.IEnumerable1[WebFSharp.Entities.User]]), [PropertyGet (Some (FieldGet (Some (Value (WebFSharp.Business.UserService)), WebFSharp.Business.MyContext ctx)), System.Data.Entity.DbSet1 [WebFSharp.Entities.User] Users,[]),Let(predicate,Value(),Lambda(source,Call(None,System.Collections) .Generic.IEnumerable1[WebFSharp.Entities.User] Filter[User](Microsoft.FSharp.Core.FSharpFunc2 [WebFSharp.Entities.User,System.Boolean],System.Collections.Generic.IEnumerable1[WebFSharp.Entities.User]), [predicate, Coerce (source, System.Collections.Generic.IEnumerable1 [[WebFSharp.Entities.User,WebFSharp.Entities,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null ]])])))])这不是一个有效的查询表达式.检查允许查询的规范,并考虑将部分查询移出报价
这是怎么回事?是因为在Expr将参数注入到它之前会对它进行评估吗?
无论如何,以下代码有效,但灵活性要低得多: …
正如标题所说,然后我试图将其PropertyInfo转换为"原始"类型,这List<obj>在我的情况下.
我没试过下面的代码:
(List<obj>)pInfo.GetValue(pInfo, null)
(List<obj>)pInfo.GetValue(typeof<obj>, null)
它简单地抛出了一个例外:
TargetException未处理:Object与目标类型不匹配.
我确信我忽略了一些非常简单的东西,但我无法弄清楚是什么.
好吧......我在这里有点困惑.该async单子允许您使用let!该命令将启动给定异步方法的计算,并挂起线程,直到其结果是可利用的.这就是全部罚款,我明白这一点.
现在我不明白为什么他们为这个WebClient类做了一个扩展,那个名字命名AsyncDownloadString- 你不能只将普通内容包裹在DownloadString异步块中吗?我很确定,我在这里错过了一个重要的观点,因为我已经完成了一些测试,显示DownloadString包含在异步块中,仍然阻塞了线程.
我根本不是ac #programmer,但需要从C#app获得某些计算.不,我遇到了一些我不确定输出是什么的东西
我有以下代码行
pageSizeFactor = PrintingRequirements.FormSize == FormSize.A4 ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)
我只需要确认我是否正确,上面的意思是以下,pageSizeFactor = Formsize,所以如果Formsize是A4 pageSizeFactor将是1,否则它将是2?
我有一个方法,例如,必须被调用不超过一次Dispose.现在,我意识到它是下一个:
private bool _isAlive = true;
public void Dispose()
{
if (this._isAlive)
{
this._isAlive = false;
//Do Something
}
}
Run Code Online (Sandbox Code Playgroud)
但它不是线程安全的,因为comprasion和setting flag之间存在间隙_isAlive为false.因此,可能有多个线程执行//Do Something代码.
它有线程安全的变体吗?
使用Windows 8附带的资源监视器,我可以看到我的非常简单的控制台应用程序使用5个线程.我知道其中一个是主线程,另一个可能是GC线程,但我不知道后三个是什么.
码:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("TEST");
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在为F#开发一个实体框架代码第一包装器,我一直在想我是否应该将所有模块合并为一个.
看看这个:
module ManyNavProperty =
let withMany (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithMany()
let withSeq expr (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithSeq expr
let withList expr (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithList expr
let withArray expr (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithArray expr
let withOptional (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithOptional()
let withOptionalProperty expr (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithOptional expr
let withRequired (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithRequired()
let withRequiredProperty expr (cfg:ManyNavPropertyInfo<'a,'b>) = cfg.WithRequiredProperty expr
module DependentNavProperty =
let hasForeignKey expr (cfg:DependentNavPropertyInfo<'a>) = cfg.HasForeignKey expr
module CascadableNavProperty =
let willCascadeOnDelete b (cfg:CascadableNavPropertyInfo) = cfg.WillCascadeOnDelete b
module EF =
let entity<'a …Run Code Online (Sandbox Code Playgroud)