小编Dyl*_*lan的帖子

是否可以将F#与新的Windows Universal应用程序一起使用?

现在我们可以为Xamarin的人们编写适用于iPhone和Android的F#应用程序,我真的很惊讶F#使用Windows Phone会让人感到非常痛苦.我只是尝试将一个F#项目添加到WinPhone 8.1(基于RT)的项目中,并从Visual Studio 2013中获得一个相当无益的"无法添加对项目的引用...".我添加了对FSharp.Core的引用便携式libs文件夹(版本2.3.5.1).我相信它仍然可以通过8.1 Silverlight应用程序来完成,但是那种环绕整个通用应用程序的想法.

有谁知道是否有可能与一些csproj黑客或任何东西?在便携式库及其工作原理方面,我非常天真.

全新的Win 10应用程序似乎不支持F#,因为.NET Native计划.您可以在这里投票支持F#支持https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/9110134-f-support-in-net-native-for-uwp

[更新]

我相信现在可以使用Centennial桥了https://developer.microsoft.com/en-us/windows/bridges/desktop

f# win-universal-app

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

F#WinRT的好处

没有想要创建一个开放式问题...... F#目前在Windows 8开发预览中不存在.WinRT中有一个映射层,它将核心对象包装到C#/ VB的CLR对象中,或者通过其他语言的映射包装.

鉴于此模型不会通过CLR强制语言,我作为函数式编程新手的问题是:这对F#有什么好处(没有CLR层直接映射到WinRT可能会进一步降低可变性,更多本机列表类型)或者有一种更纯粹的功能性语言加入生态系统并将F#留在原处是有意义的(请记住,互操作性不再局限于CLR语言)

f# functional-programming windows-8 windows-runtime

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

Azure移动服务C#不会返回子实体

我真的用新的基于C#的Azure移动服务打砖墙了,它也非常简单:(我不能为我的生活得到查询操作来返回子属性值.我有todo项目的默认项目修改如下:

public class TodoItem : EntityData
{
    public TodoItem()
    {
        this.Numbers = new Collection<TodoItemNumbers>(new List<TodoItemNumbers>
        {
            new TodoItemNumbers{Value = 1},
            new TodoItemNumbers{Value = 2},
            new TodoItemNumbers{Value = 3},
            new TodoItemNumbers{Value = 4},
            new TodoItemNumbers{Value = 5},
        });
    }
    public virtual ICollection<TodoItemNumbers> Numbers { get; set; }
    public string Text { get; set; }
    public bool Complete { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我将TodoItemNumbers类定义如下:

public class TodoItemNumbers : EntityData
{
    private int _value;

    public int Value
    {
        get { return _value; } …
Run Code Online (Sandbox Code Playgroud)

c# azure odata azure-mobile-services

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

从命名空间调用时,模块中的F#函数显示"Method Not Found"

我有一个在名为DataAccess的模块中定义的函数,就像这样

module DataAccess
let getData() = 
    ["abc";"def"]
Run Code Online (Sandbox Code Playgroud)

然后我使用F#MVC控制器将数据拉出来

[<HandleError>]
type FitnessController() = 
    inherit Controller()

    member x.Index() =
        let data = DataAccess.getData() |> List.map(fun p -> p) |> List.toArray
        x.View(data) :> ActionResult
Run Code Online (Sandbox Code Playgroud)

我得到intellisense并且所有构建都很好,但是当网页弹出时它表示该方法不存在

Method not found: 'Microsoft.FSharp.Collections.FSharpList`1<Models.Entity> DataAccess.getData()'.
Run Code Online (Sandbox Code Playgroud)

当我看一下dotPeek中的程序集时,它确实显示为一个返回FSharp列表的静态方法.我错过了一些明显的东西吗?

(忽略getData和map函数什么都不做的事实我为了简洁省略了代码,getData只包含被标记为可序列化的记录类型,但是即使在代码示例中使用字符串时我仍然会收到错误)I还应该说这是带有Razor C#页面的MVC 3.

f# asp.net-mvc-3

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

Ninject Rebind在运行时,是否可以用作功能切换?

首先,我的问题仅适用于网络应用程序,我倾向于使用InRequestScope分辨率设置我的大部分Ninject绑定.

我正在考虑如何进行功能切换,并且我认为我要调用:

kernel.Rebind<IInterface>().To<RealImplementation>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)

当网站仍在运行时,交换机已被轻弹.如果我然后决定关闭该功能,我可以打电话

kernel.Rebind<IInterface>().To<EmptyImplementation>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)

我的想法是InRequestScope会保护任何"进行中"代码请求,但会允许新请求获得新切换的功能.

有没有人从经验(或对Ninject更深入的了解)知道这是否可行,或者是否会给我带来更多麻烦.我很好地看了MEF,如果在这种情况下Ninject不是最好的工具,那么它将成为我的下一个停靠点.

c# asp.net ninject

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

F#应用程序结构日志/存储库等

我在很多家庭项目中逐渐转向F#,但我对于如何将完整的应用程序连接在一起更加困难,尤其是跨领域的问题.

在C#中,如果我想记录内容,我会使用依赖注入将ILogger传递到每个类中,然后可以从代码中轻松地调用它.我可以在我的测试中验证给定特定情况的日志是通过传入模拟并验证它来编写的.

public class MyClass
{
    readonly ILogger _logger;
    public MyClass(ILogger logger)
    {
        _logger = logger;
    }

    public int Divide(int x, int y)
    {
        if(y == 0)
        {
            _logger.Warn("y was 0");
            return 0;
        }
        return x / y;
    }
}
Run Code Online (Sandbox Code Playgroud)

在F#我使用的模块更多,所以上面会变成

module Stuff

let divde x y =
    match y with 
    | 0 -> 0
    | _ -> x / y
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个名为Logging的模块,我可以打开它并在y为0的情况下使用日志函数,但是如何将其注入单元测试?

我可以让每个函数都使用一个日志函数(字符串 - >单位),然后使用部分应用程序连接它们,但这似乎是一项非常多的工作,就像创建一个新的函数来包装日志调用中的实际调用一样.是否有特定的模式或一点F#我缺少可以做到的?(我已经看过kprintf函数,但我仍然不知道你如何为各种测试场景指定函数,同时使用完整应用程序的具体实现)

同样,您如何存根获取数据的存储库?你需要实例化一些类并在其上设置CRUD函数,还是有一种方法可以注入你打开的模块(除了#define)

architecture f# functional-dependencies

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

MVC3 Json模型绑定在发送到服务器时不起作用

我对MVC3和模型绑定有一个奇怪的问题.当我将JSON对象发布到我的控制器时,模型绑定器根本无法创建一个类型化的对象.所有属性都是默认属性(即空字符串)

但是,如果我在服务器上创建实例,并将其作为JSON操作结果发送,则线上的数据看起来相同.

我试过了

$.ajaxSettings.traditional = true;
Run Code Online (Sandbox Code Playgroud)

它没有任何区别

作为一个例子,如果我发布

{"RoutineName":"My new routine","Routines":[{"DayName":"Monday","Items":[21,31]}]}
Run Code Online (Sandbox Code Playgroud)

模型绑定器失败,但来自服务器的数据看起来像

{"RoutineName":"Routine From Code","Routines":[{"DayName":"Monday","Items":[1,2]},{"DayName":"Tuesday","Items":[]}]}
Run Code Online (Sandbox Code Playgroud)

用于生成此内容的html看起来像

$('#submitRoutine').click(function () {
            var routines = [];
            $('.DayName').each(function (index, item) {
                var $item = $(item);
                var name = $item.html();
                var routineItems = [];
                $($item.attr('href')).find('.itemId').each(function () {
                    routineItems.push(parseInt($(this).val(), 10));
                });
                routines.push({
                    DayName: name,
                    Items: routineItems
                });
            });
            var routine = {
                RoutineName: $('#routineName').val(),
                Routines: routines
            };

            $.ajaxSettings.traditional = true;
            $.post('/Machine/CreateRoutine', JSON.stringify(routine),function (data) {},'json');
        });
Run Code Online (Sandbox Code Playgroud)

所以看起来从类型化对象到JSON的模型绑定是可以的,但是以另一种方式返回则不行.有没有我错过的东西?

模型在F#中

type RoutineDayViewModel() =
    let mutable _name = String.Empty
    let …
Run Code Online (Sandbox Code Playgroud)

jquery json asp.net-mvc-3

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

使用 SCardGetStatusChange 无需轮询即可收到卡插入/移除的通知

我试图检测何时将卡插入读卡器。如果我做这样一个讨厌的轮询循环:

      public struct SCARD_READERSTATE
        {
            [MarshalAs(UnmanagedType.LPWStr)]
            public string szReader;
            public byte[] pvUserData;
            public byte[] rgbAtr;
            public uint dwCurrentState;
            public uint dwEventState;
            public uint cbAtr;
        }

   byte[] atr = null;
   SCARD_READERSTATE[] rs = new SCARD_READERSTATE[1];
   rs[0].szReader = readersList[0];
   rs[0].dwCurrentState = SCARD_STATE_UNAWARE;
   rs[0].dwEventState = SCARD_STATE_PRESENT;
   int hctx = hContext.ToInt32();
   var cardResult = SCardGetStatusChange(hctx, 100, rs, 1);
   if (cardResult == 0 && rs[0].cbAtr > 0 && rs[0].rgbAtr != null)
   {
       atr = new byte[rs[0].cbAtr];
       Array.Copy(rs[0].rgbAtr, atr, rs[0].cbAtr);
   }

  while ( (rs[0].dwCurrentState & SCARD_STATE_PRESENT) …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke smartcard

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

带有命名正则表达式的F#Bug?

我试图在F#中使用一个名为正则表达式而没有太多运气.移植到C#,它的工作原理.我在这里缺少F#的特殊性还是一个bug?

F#

open System.Text.RegularExpressions;;
let regex = new Regex("(?<liveId>WindowsLiveID)|(?<facebook>Facebook)", RegexOptions.Compiled ||| RegexOptions.IgnoreCase);;
let m = regex.Matches("ImWindowsLiveIDOK");;
m.[0].Groups.["liveID"].Success;;
Run Code Online (Sandbox Code Playgroud)

C#

var regex = new Regex("(?<liveId>WindowsLiveID)|(?<facebook>Facebook)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var match = regex.Matches("ImWindowsLiveIDOK");
Console.WriteLine(match[0].Groups["liveId"].Success);
Run Code Online (Sandbox Code Playgroud)

regex f#

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