小编hat*_*enn的帖子

使用foldr定义长度

我正在努力理解我正在上课的讲义中的一部分.它将长度函数定义为:

length = foldr (\_ n -> 1 + n) 0
Run Code Online (Sandbox Code Playgroud)

谁能解释一下这是如何工作的?我无法绕过它.

haskell

7
推荐指数
3
解决办法
6364
查看次数

使用OAuth密码凭据授予令牌访问身份验证的优点

我正在使用Rails 5为移动应用程序创建API.目前,我不需要三脚授权,因为API只会由我们自己的移动应用程序使用.

我正在考虑选择以下两个选项之一:

  1. 门卫+设计:我可以使用门卫实现OAuth 2.0,但至少目前我只会使用密码凭据授权.
  2. Rails自己的ActionController::HttpAuthentication::Token模块+设计:这似乎是更简单的方法.

老实说,我看不到令牌访问身份验证方法和OAuth 2.0的密码凭据授权之间的区别.

如何选择一个而不是另一个?还有其他需要考虑的选择吗?

authentication ruby-on-rails oauth oauth-2.0 rails-api

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

为什么使用私有属性setter,因为成员变量可以直接访问?

在C#中,我们可以做类似的事情:

private string _myField;

public string MyProperty
{
    get { return _myField; }
    private set { _myField = value; }
}
Run Code Online (Sandbox Code Playgroud)

在我们可以根据需要_myField在类中设置私有setter的优势是什么?我们为什么要使用setter MyProperty

c# field properties

6
推荐指数
2
解决办法
642
查看次数

编写报告进度的方法

我正在编写一个在库中执行某个操作的类.但是操作很繁琐,我希望能够找到该类中方法的进度,以便我可以在WinForms应用程序中使用它来报告进度.

我打算在我的WinForms应用程序中的另一个线程上运行我的类,我希望该类与WinForms应用程序的关注点分开,我不想将它绑定到除了它之外的任何特定内容.

在库类中实现进度报告机制的最佳方法是什么?

以某种方式在类中有一个进度变量,并在我的WinForms应用程序中添加一个事件监听器是不是一个好主意?如果是的话,我该怎么办呢?

编辑:我之前使用过BackgroundWorker该类,但我的问题是我不希望我的库类与任何多线程操作有关.所以我不想ReportProgress在库类中调用,我想(可能)在包含当前进度的类中有一个变量,我希望UI线程以某种方式"订阅"它.我不知道这是否是设计它的好方法.

c# multithreading progress progress-bar

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

C# 中的 NativeMethods 类有什么作用?

可能的重复:
NativeMethods 类是否在 .NET 中进行了特殊处理?

我正在开发一个 C# 项目,该项目为某些功能调用一些非托管 C++ 代码。我发现了 fxCop,它抱怨我包含非托管库中的函数的方式。

它建议使用 NativeMethods 类之一,解释如下:

http://msdn.microsoft.com/en-us/library/ms182161%28v=vs.80%29.aspx

我读过它,但我不能说我理解它的确切作用以及使用它的好处是什么。如果有人能向我解释“此类不会抑制非托管代码权限的堆栈遍历”的含义,我会非常高兴。和“此类抑制非托管代码权限的堆栈遍历。”

编辑:我真正想知道的是它如何影响我的代码。我在 MSDN 上读过它的内容,显然这对某些人来说已经足够了,但对我来说太高了,无法理解。这就是为什么我要求进行一些详细说明。

c# pinvoke native-methods

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

Xml反序列化附加到列表

我正在尝试从xml文件反序列化一些设置.有问题的属性/底层字段是一个被调用的字段AlertColors.我将基础字段初始化为白色,黄色和红色,以确保此类的新实例具有有效的颜色设置.但是当我反序列化时,_colorArgb最后得到六个值,前三个是初始化值,后三个是从xml文件中读取的值.但该财产AlertColors不会附加到该领域,而是改变其元素.为什么我最终得到六种颜色的场?

这是代码:

    private List<int> _colorArgb = new List<int>(new int[] { Color.White.ToArgb(), Color.Yellow.ToArgb(), Color.Red.ToArgb() });   

    public List<int> AlertColors
    {
        get
        {
            return _colorArgb;
        }

        set
        {
            for (int i = 0; i < Math.Min(_colorArgb.Count, value.Count); i++)
            {
                if (_colorArgb[i] != value[i])
                {
                    HasChanged = true;
                }
            }

            _colorArgb = value;
        }
    }

    public bool Deserialize(string filePath)
    {
        if (!File.Exists(filePath))
        {
            Logger.Log("Error while loading the settings. File does not exist.");

            return false;
        }

        FileStream fileStream = …
Run Code Online (Sandbox Code Playgroud)

c# properties xml-serialization xmlserializer

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

如何使用LINQ使用不同的分隔符将字符串拆分两次?

我有类似的字符串"1\t2\r\n3\t4",我想将它们拆分为:

new string[][] { { 1, 2 }, { 3, 4 } }

基本上,它应该分成行,每行应分成标签.我尝试使用以下,但它不起作用:

string toParse = "1\t2\r\n3\t4";

string[][] parsed = toParse
    .Split(new string[] {@"\r\n"}, StringSplitOptions.None)
    .Select(s => s.Split('\t'))
    .ToArray();
Run Code Online (Sandbox Code Playgroud)
  1. 我的方法有什么问题?为什么我没有得到理想的结果?
  2. 你会如何使用LINQ解决这个问题?

c# linq split

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

调用接受指针的非托管库函数

假设我们有一个带有以下原型的C ++函数:

int myFunction(int someNumber, int &arraySize, signed char *&array)
// Extra function to free allocated memory:
int freePointer(void* myPointer)
Run Code Online (Sandbox Code Playgroud)

该函数需要一个数字,并根据该数字创建一个数组。因此,我们传递一个数字并得到一个数组。用C#调用它的最佳方法是什么?

我的第一种方法:

[DllImport(...)]
internal static int myFunction(int someNumber, out int arraySize, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] out byte[] array)

// ...

byte[] myArray;
int discard;
int myNumber = 100;

myFunction(myNumber, discard, myArray);
Run Code Online (Sandbox Code Playgroud)

但是问题是,我需要释放非托管库分配的内存,而且我不知道如何将地址传递myArrayfreePointer()。而且,我也不知道的地址myArray是否等于非托管库创建的数组的地址。

然后我的第二种方法是:

[DllImport(...)]
internal static int myFunction(int someNumber, out int arraySize, out IntPtr array)

// ...

byte[] myArray;
int myArraySize
IntPtr …
Run Code Online (Sandbox Code Playgroud)

c# c++ pinvoke marshalling dllimport

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

通过 ComboBox 更改 RichTextBox 选择的字体大小无法正常工作

RichTextBox我创建了一个非常简单的 WPF 窗口,由包含 1和 1的 Grid 组成ComboBox。我使用ComboBox来更改和查找RichTextBox所选内容的字体大小。

这是我的 XAML 的代码隐藏文件:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        // Add the font sizes.
        for (var i = 1; i < 72; i++)
        {
            FontSize.Items.Add((double) i);
        }
    }

    private void MyTextBox_SelectionChanged(object sender, RoutedEventArgs e)
    {
        // If the selection changes, update the font size in the ComboBox.
        FontSize.SelectedValue = (double) MyTextBox.Selection.GetPropertyValue(TextBlock.FontSizeProperty);
    }

    private void FontSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // If …
Run Code Online (Sandbox Code Playgroud)

c# wpf events xaml

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

使用DataGrid在一列中显示多个标题

我想在列中有多个属性,如下所示:

DataGrid在列中有多个标题.

现在,创建一个单元格模板以显示多个属性很容易,但是如何创建一个显示多个属性的标题模板仍然允许您通过单击它们进行排序?因此,您应该能够通过单击标题按名字排序First Name,所有其他属性也是如此.

c# wpf xaml datagrid

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