小编Tho*_*mas的帖子

使用MongoDB C#查找和修改

我想替换以下代码:

var R = Challenges.FindAll().SetSortOrder("UseCount").First();
var Q = Query.EQ("_id", R._id);
var U = Update.Inc("UseCount", 1);
Challenges.Update(Q, U);
return R;
Run Code Online (Sandbox Code Playgroud)

这是意图:
我在一个名为'UseCount'的数据库中有一个字段,我想找到值较低的记录.如果许多记录具有相同的值,我只想要第一个(它并不重要).
同时,我希望将"UseCount"字段增加一个.

我已经看过FindAndModify的例子,但它似乎与字段比较(即:"field"= value),而不是像我正在做的搜索.

处理这个问题的最佳/最有效方法是什么?

c# sorting mongodb

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

C#中将json文件反序列化为静态类

我有一个带有静态字段和 json 的静态类。

我可以将 json 反序列化为动态对象,因此我拥有所有字段,并且它们与类中的静态字段完全匹配。

如何使用反射来枚举字段并将值从动态类复制到静态类字段中?

我无法改变架构,使其成为单例等等;它是共享代码,并且该类将保持静态,因为它是共享库使用的全局共享设置对象。

该解决方案需要使用反射,因为类会随着时间的推移而随着新成员的出现而演变。否则我可以编写一个自定义反序列化器。


添加更多细节,但确实不多:

我有这个静态类:

static class A
{
    static int I;
    static string S;
}
Run Code Online (Sandbox Code Playgroud)

和一个与字段完全匹配的 json:

{
    "I" : 3,
    "S" : "hello"
}

var Data = JsonConvert.Deserialize<dynamic>(...);
Run Code Online (Sandbox Code Playgroud)

我想用我从 json 反序列化到动态对象中的值来初始化 A 类的静态字段。


另一个编辑:

我想出了与大卫写的类似的东西,但是由于我使用反序列化器来转换类型,所以效率较低,所以大卫的解决方案更好。

这是我想出的:

foreach (var Destination in typeof(Settings).GetProperties())
{
    var Name = Destination.Name;
    var T = Destination.PropertyType;
    var Value = JsonConvert.DeserializeObject("\"" + JT[Name] + "\"", T);
    Destination.SetValue(null, Value);
}
Run Code Online (Sandbox Code Playgroud)

c# reflection

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

为什么我们不能通过.net中的对象访问静态方法

使用以下代码:

public class test
{
    public static void DoSomething()
    {
        Console.WriteLine("test");
    }
}

public class test2
{
    public test2()
    {
        var a = new test();
        a.DoSomething(); // invalid
        test.DoSomething(); // is valid
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要通过基类访问静态方法,而不是通过实例.

但是,让用户通过实例访问它会有什么不利之处呢?在我看来,它有助于提高可读性.

c#

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

如何命名F#中的返回类型?

具有以下功能:

let Calc =
    // do something
    if something
        (false, 0)
    else
        (true, some value)
Run Code Online (Sandbox Code Playgroud)

如何定义输出字段的名称?

在C#中,我可以这样做:

(bool Success, int Value) Calc()....
Run Code Online (Sandbox Code Playgroud)

这样,当我得到结果时,就可以按名称访问“成功”和“值”字段;我该如何在F#中执行相同的操作?

f#

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

返回名称为F#的元组

在C#中,我可以这样做:

public (bool result, string message) Hello()
{
    ...
    return (true, "ok")
}
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚如何在F#中做到这一点。

我可以:

let Hello () =
    (true, "ok")
Run Code Online (Sandbox Code Playgroud)

但是,当我从C#调用Hello时,必须将元素获取为“ Item1”和“ Item2”。

有没有办法在返回的元组中命名字段?

我试过了:

let hello () : (result, message ): bool * string =
Run Code Online (Sandbox Code Playgroud)

以及其他一些变体,但我无法做到这一点。

在C#中,返回的类型被视为元组对象,而上面显示的纯C#示例似乎并未使用元组类型。

我猜你不能在元组对象中命名项目,但是有没有办法像C#中那样返回参数?

c# f#

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

如何在 F# 中使用 sprintf 构建格式字符串?

我正在尝试从:

sprintf "%3.1f" myNumber
Run Code Online (Sandbox Code Playgroud)

到:

sprintf myFormatter myNumber
Run Code Online (Sandbox Code Playgroud)

这是不可能的

我遇到的情况是数字精度取决于某些设置,因此我希望能够创建自己的格式化程序字符串。

我知道可以使用 String.Format 来完成,但我很好奇是否有使用 sprintf 或 ksprinf 的 F# 方式;可以吗?

f# string-formatting

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

Clean way to extract results, or aggregate errors using Result, in f#

I have a system where I collect data from a grid. It is organized in rows. Each row processed returns a Result<data, string list> object. The list in the error case is a list of errors encountered during the parsing. Each row can have multiple errors, but only one valid result.

I would like to aggregate the data to a list data list if there are no errors, or make a complete list of errors, in the string list form …

f#

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

“let {record} = object”语法在 F# 中有什么作用?

使用以下示例:

type Person = {First:string; Last:string}
let alice = {First="Alice"; Last="Doe"}
let {First=first} = alice
Run Code Online (Sandbox Code Playgroud)

最后一个let到底做了什么?

f#

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

AWS 上的 API 网关和 lambda 出现“内部服务器错误”

这个网站和网络上都有大量类似的问题,这让我相信 AWS 的文档确实存在问题,因为这给很多人带来了悲伤。

所以,我决定一步步发布最基本的示例。

首先,我们创建一个新函数:

在此输入图像描述

它有默认的“一切”,我没有碰任何一行代码。

在此输入图像描述

(红色错误消息是 AWS 与 Firefox 配合不佳)

默认代码通过测试:

在此输入图像描述

现在我添加一个触发器:

在此输入图像描述

这给了我触发器的链接:

在此输入图像描述

我可以转到 API 端点:https://spy3z1jvu8.execute-api.ap-northeast-1.amazonaws.com/default/test

它有效:

在此输入图像描述

现在,问题就要开始了。我打开创建的 API 网关:

在此输入图像描述

并尝试默认链接:https://spy3z1jvu8.execute-api.ap-northeast-1.amazonaws.com

和...

在此输入图像描述

大多数有类似问题的人似乎都遇到了网关问题,需要一些 json 内容等,但这里是一个未修改的 AWS 示例,并且网关链接不起作用。

故障排除步骤要求添加日志记录并以这种方式进行故障排除,但日志中没有任何有趣的内容。

这个问题的根源可能是什么?

amazon-web-services aws-lambda aws-api-gateway

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

如何优化此代码以提高速度,在 F# 中以及为什么部分执行两次?

代码用于将历史财务数据打包成16个字节:

type PackedCandle =
    struct
        val H: single
        val L: single
        val C: single
        val V: int
    end
    new(h: single, l: single, c: single, v: int) = { H = h; L = l; C = c; V = v }
    member this.ToByteArray =
        let a = Array.create 16 (byte 0)
        let h = BitConverter.GetBytes(this.H)
        let l = BitConverter.GetBytes(this.L)
        let c = BitConverter.GetBytes(this.C)
        let v = BitConverter.GetBytes(this.V)
        a.[00] <- h.[0]; a.[01] <- h.[1]; a.[02] <- h.[2]; a.[03] <- h.[3]
        a.[04] …
Run Code Online (Sandbox Code Playgroud)

optimization f#

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