小编JDB*_*JDB的帖子

如何确定托管我的dll的位置

我需要知道托管程序集的上下文(ASP.NET,Windows服务,Windows应用程序等).

我的程序集应根据上下文调用不同的函数.例如,如果需要创建相对于其位置的文件夹,我想知道使用哪种方法:Path.GetFullPath(dirName)Server.MapPath(dirName).

.net c# asp.net wcf

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

在序列表达式中使用"use"时的资源管理

我有一个简单的序列表达式,它使用了一个我想在我完成时清理的资源:

type MyObject() =
    member this.Items =
        seq {
            use resource = ResourcePool.Get()
            let c = resource.ValueCount
            if c > 0 then
                for i in 0 .. c - 1 do
                    yield resource.GetValue i
        }
Run Code Online (Sandbox Code Playgroud)

如果我然后使用序列迭代,例如,在项目的中途进行迭代,那么资源何时会被处置?

例如:

// ...

let foo = MyObject
let item = foo.Items |> Seq.find ( fun i -> i.Name = "name" )

// ...
Run Code Online (Sandbox Code Playgroud)

resource在Seq.find完成后处理?或者我是否需要重新考虑我的资源管理策略?

f# sequence resource-management

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

避免“模式不匹配”​​警告的替代方法

我编写了一个函数,该函数将一个数组作为输入并返回一个大小相等的数组作为输出。例如:

myFunc [| "apple"; "orange"; "banana" |]
Run Code Online (Sandbox Code Playgroud)
> val it : (string * string) [] =
    [|("red", "sphere"); ("orange", "sphere"); ("yellow", "oblong")|]
Run Code Online (Sandbox Code Playgroud)

现在,我想通过let绑定分配结果。例如:

let [|
        ( appleColor, appleShape );
        ( orangeColor, orangeShape );
        ( bananaColor, bananaShape )
    |] = 
    myFunc [| "apple"; "orange"; "banana" |]
Run Code Online (Sandbox Code Playgroud)

哪个很棒...

> val orangeShape : string = "sphere"
> val orangeColor : string = "orange"
> val bananaShape : string = "oblong"
> val bananaColor : string = "yellow"
> val appleShape : string = …
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching let-binding

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

分解嵌套对象,但保留对嵌套对象的引用

我有一个简单的用例,但我认为使用ES6语法是不可能的。我想使用对象分解来从嵌套对象中检索某些已知属性,但我也想引用该嵌套对象,以便将其传递给可能关心其他属性的其他函数。

这是一个示例对象:

var record = {
    name: "foo",
    metadata: {
        createdDate: "2017-02-19",
        lastModifiedDate: "2018-07-24",
        type: "bar"
    }
};
Run Code Online (Sandbox Code Playgroud)

在我的代码中的某个时候,我想从元数据中提取一些值。同时,我还要提取整个元数据对象:

let {
    metadata: {
        createdDate
    }
} = record;

if ( date( createdDate ).before( NEW_FEATURE_DATE ) ){
    oldFeature( metadata );
} else {
    newFeature( metadata );
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我对metadata属性的引用纯粹是用于结构分解...它的值是undefined(从技术上讲,是未定义的,它没有值)。

我知道我可以用类似的方法解决这个问题

let {
        metadata: {
            createdDate
        }
    } = record,
    metadata = record.metadata;
Run Code Online (Sandbox Code Playgroud)

要么

let {
        metadata
    } = record,
    {
        createdDate
    } = metadata;
Run Code Online (Sandbox Code Playgroud)

...但是看起来有点笨拙,不是吗?是否有我缺少的东西,或者这仅仅是语法上的“空白”?

javascript destructuring

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

Azure上的WCF REST/HTML服务的联合身份验证(单点登录)

我已经制作了一个简单的WCF-REST服务,将其发布到Azure并使用X.509证书激活了SSL.

我也想为这项服务设置一些身份验证.我可以通过以明文形式发送凭证标题来轻松解决这个问题,因为所有流量现在都已加密,但我计划使用某种联合身份验证,以便用户可以利用单点登录.

这个领域相对较新,但似乎已经充斥着过时的技术,使得经验不足的人很难找到当前的最佳实践和可靠的工具集.我希望有经验丰富的人可以提供一些见解,并为我们提供最新的快速启动.

什么是现代的,最先进的联邦身份验证选项?

OpenId是唯一的技术吗?

实施SSO难吗?

一个相对缺乏经验但相当聪明的开发人员可以基于一些教程实现这一点吗?或者基础技术是否太复杂,使第三方API /框架更加可取?(如DotNetOpenAuth)

对于Azure和WCF,具体来说,"Windows Azure Active Directory访问控制"是否真的有必要,或者就像用大锤拍打苍蝇一样?

wcf azure federated-identity

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

用数组键入测试模式

我有一种情况,我交给一个对象,需要产生一个字符串.在大多数情况下,我可以调用它.ToString()并完成它(适用于字符串,数字,日期等)

这不起作用的一种情况是表示GUID的字节数组.在这种情况下,ToString()只需报告"System.Byte []".我正在尝试使用模式匹配来捕获字节数组,以便我可以自定义字符串化.但我无法弄清楚如何匹配字节数组(或实际上,任何数组),除了通过数组模式.GUID是16个字节长,我真的不希望有一个16个命名数组元素的模式.此外,使用数组模式会导致F#想要一个数组作为输入,而不是一个对象:

match value (* <-- obj *) with
| [|
    b1;  b2;  b3;  b4;
    b5;  b6;  b7;  b8;
    b9;  b10; b11; b12;
    b13; b14; b15; b16
  |] -> (* do some magic here later... *) b1.ToString()
| x -> x.ToString()
Run Code Online (Sandbox Code Playgroud)
> This expression was expected to have type obj but here has type 'a []
Run Code Online (Sandbox Code Playgroud)

我试图使用Type测试模式,但它会导致编译器错误(似乎有一个打开方括号的问题):

match value (* <-- obj *) with
| :? byte[] as guid -> (* do some magic here …
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching

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

如何执行列表的成对交换?

我想用 python 编写一段小代码,交换列表中的元素,该程序将接受一个列表,并将返回一个交换每对相邻元素位置的列表:位置 0 和 1,位置 2 和 3,等等在。如果列表有奇数个元素,则最后位置的元素保留在 \xe2\x80\x9cin 位置\xe2\x80\x9d。

\n\n
Before: [1,2,3,4,5]\nAfter: [2,1,4,3,5]\n
Run Code Online (Sandbox Code Playgroud)\n\n

这看起来很不Python。Python 的方法是什么?

\n

python

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

仅播放一次声音

我正在制作一个小行星躲避游戏,当我的生命结束时,我正在执行以下代码:

gameover.play();
Run Code Online (Sandbox Code Playgroud)

而gameover是这样定义的:

var gameover = new Audio('gameover.wav');
Run Code Online (Sandbox Code Playgroud)

当我执行代码时,它会循环播放声音,我只想播放一次,我该怎么做?谢谢。

html javascript

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

在单个窗口内切换到表单

我想将表单1更改为表单2.我不希望它打开一个新窗口但是将它保存在同一个窗口中,然后当我按下Next键或后退键时能够来回移动.是通过单独隐藏每个按钮和图片来实现此目的的唯一方法吗?

c# winforms

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

RegExp:在另一个模式之前发生的模式的最后一次出现

我想采用在另一个文本模式之前发生的文本模式.

例如,我有这样的文字:

code 4ab6-7b5
Another lorem ipsum
Random commentary.

code f6ee-304
Lorem ipsum text 
Dummy text

code: ebf6-649
Other random text
id-x: 7662dd41-29b5-9646-a4bc-1f6e16e8095e

code: abcd-ebf
Random text
id-x: 7662dd41-29b5-9646-a4bc-1f6e16e8095e
Run Code Online (Sandbox Code Playgroud)

我想采取在第一次code出现之前发生的最后一次id-x(这意味着我想获取代码ebf6-649)

我怎么能用regexp做到这一点?

regex git-bash

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