小编hat*_*enn的帖子

从非托管代码返回int的外部函数是否安全

[DllImport(MyUnmanagedLibrary, CallingConvention = CallingConvention.Cdecl)]
internal static extern int MyFunction();
Run Code Online (Sandbox Code Playgroud)

假设这是我从非托管C++库导入的函数.在这种情况下,外部函数被声明为返回一个int.int托管C#代码的大小不会改变,但它会根据非托管C++代码中的体系结构而改变.假设它返回一个是安全的int吗?我应该使用IntPtr,作为返回值吗?或者是其他东西?

c# c++ pinvoke

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

获取string []的out参数为IEnumerable <string>

假设我们有一个方法:

public void SomeMethod(out string[] someArray) { // ... }
Run Code Online (Sandbox Code Playgroud)

有没有办法做类似的事情:

IEnumerable<string> result;

SomeMethod(out result);
Run Code Online (Sandbox Code Playgroud)

编辑:重点是,我不想将out值绑定到string[],我希望代码能够工作,即使方法声明被更改为SomeMethod(out List<string> outputValue).

c# ienumerable out

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

删除所有者时从记录中删除引用ID

假设我有一个Post模型:

class Post < ActiveRecord::Base
  belongs_to :category
end
Run Code Online (Sandbox Code Playgroud)

Category模型:

class Category < ActiveRecord::Base
  has_many: :posts
end
Run Code Online (Sandbox Code Playgroud)

我可以使用dependent: :destroy删除特定类别时删除所有帖子,但我不想删除帖子,我只想通过设置category_id这些帖子的列来删除与该特定类别的关联nil.

是否有"Rails方式"开箱即用,或者我是否需要使用一些回调?

activerecord ruby-on-rails associations

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

如何使用Resharper进行XAML编辑更具响应性

我一直在Visual Studio 2010 Ultimate Edition上使用ReSharper(v 7.1.2)的试用版.我使用的是HP Elitebook 8570w,配备了i7-3610QM CPU和4GB内存,因此性能不应成为问题.它运行得很好,但由于某些原因,当我编辑XAML时,它会非常糟糕.每当我输入内容时,每次按键都会滞后.

有没有人有这个问题的解决方案?如果没有,有没有办法只为XAML文件禁用Resharper?

wpf resharper xaml visual-studio-2010

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

Rails自定义配置返回空哈希

我正在使用Rails 4,我想使用自定义配置功能,如下所述:

http://guides.rubyonrails.org/configuring.html#custom-configuration

我创建了以下YAML文件(config\prefs.yml):

development:
  password: test
Run Code Online (Sandbox Code Playgroud)

我把它添加到我的config/application.rb:

module MyApp
  class Application < Rails::Application
    # ...

    config.x.prefs = Rails.application.config_for(:prefs)
  end
end
Run Code Online (Sandbox Code Playgroud)

当我进入rails控制台时,我得到了这个:

> Rails.configuration.x.prefs
=> {}
Run Code Online (Sandbox Code Playgroud)

为什么Rails没有正确加载配置?

configuration ruby-on-rails ruby-on-rails-4

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

将参数传递给Java中的类

假设我有一个类,我希望它的一个方法根据参数表现不同.我想做的是这样的事情(我知道这在Java中不起作用):

class myClass(int a) {
    public void myMethod() {
        if (a == 1)
            // do something
        if (a == 2)
            // do something else
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

java class parameter-passing

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

接受不同类型的集合作为参数

我有一个方法,它将float类型的集合作为参数.大多数情况下,a ReadOnlyCollection<float>传递给方法,但有时也传递不同类型的集合,如List.

什么是参数的最佳类型?我应该使用:public void MyMethod(Collection<float>)?这是好习惯吗?

c# collections parameters

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

将DataGridView列绑定到BindingList <T>后,可以将其编辑为可编辑列

我有一个DataGridView,我将它绑定到一个BindingList<KeyValuePair<string, float>>.这是代码的相关部分:

        dgv.AutoGenerateColumns = false;

        DataGridViewTextBoxColumn firstColumn = new DataGridViewTextBoxColumn();
        firstColumn.DataPropertyName = "Key";
        firstColumn.HeaderText = "First Column";

        DataGridViewTextBoxColumn secondColumn = new DataGridViewTextBoxColumn();
        secondColumn.DataPropertyName = "Value";
        secondColumn.HeaderText = "Second Column";
        secondColumn.ReadOnly = false;
        secondColumn.ValueType = typeof(float);

        dgv.Columns.Add(firstColumn);
        dgv.Columns.Add(secondColumn);
        dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        dgv.MultiSelect = false;
        dgv.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
        dgv.ReadOnly = false;

        _bindingList = new BindingList<KeyValuePair<string, float>>(_someList);
        dgv.DataSource = _bindingList;
Run Code Online (Sandbox Code Playgroud)

但第二列仍然不可编辑.我应该怎么做才能使第二列可编辑而第一列不可编辑?

编辑:我希望更改能够反映在BindingList实例本身上.

编辑2:我在代码的末尾添加了这一行,现在我收到一个错误:

        dgv.Columns[1].ReadOnly = false;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

DataGridView column bound to a read-only field must …

c# binding datagridview bindinglist

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

为提取的方法添加单元测试

假设您正在使用 TDD 开发产品。您逐步添加测试并最终得到一个大方法。现在是重构的时候了,因此您将方法分离为更小的方法。例如;

// Before refactoring.
public void SomeMethod()
{
    // ...
    int sum = numbers.Sum();
    // ...
}

// After refactoring.
public void SomeMethod()
{
    // ...
    int sum = GetSumOfNumbers(numbers);
    // ...
}

private GetSumOfNumbers(int[] numbers)
{
    return numbers.Sum();
}
Run Code Online (Sandbox Code Playgroud)

在这一步之后,您是否应该为该GetSumOfNumbers方法编写测试?我想当我们测试时SomeMethod,我们已经测试了GetSumOfNumbers。但与此同时,可能还有其他方法在使用GetSumOfNumbers,即使它适用于SomeMethod,也可能不适用于另一种方法。这将帮助我们更快地找到问题(因为测试会给出更具体的错误)。但同时,也许这没有用,并且增加了冗长。

你怎么看待这件事?在这个例子中,GetSumOfNumbers方法是私有的,所以如果你认为它不应该仅仅因为它是私有的而被测试,那么如果它是公共的,它应该被测试吗?

c# tdd unit-testing

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

设计应用程序范围的日志系统有哪些指导原则?

我正在学习分层架构,我想知道如何在这样的设计中添加日志系统.

现在让我们说我们有三层:

  1. 表达层
  2. 业务层
  3. 数据访问层

并假设只有更高级别的层知道下面一层的层.例如,表示层知道业务层,但不是相反.

你应该在哪里实现一般记录器类?

  1. 如果我在不同的项目中实现它,则意味着所有层都依赖于公共程序集,这可能是也可能不是.虽然这可以通过依赖注入来克服.
  2. 如果我在最高级别(在我们的例子中是表示层)中实现它,它将违反单一责任原则.

实施日志记录机制的好地方是什么?

在实施之后,使用这样一个系统的方法是什么?

  1. 理想情况下,它应该能够捕获未捕获的异常并在某处保存异常描述.
  2. 你应该在哪里捕获例外?它们应该被捕获在最高层(表示层)吗?或者他们应该被别人抓到?
  3. 用于将记录器传递给类的方法是什么?将方法/构造函数重载添加到接受类似接口的项目中的所有内容是否有意义ILogger

正如您所看到的,我对这个主题非常困惑,在我目前的工作中,没有人对企业应用程序设计/分层设计有任何了解,即使他们正在设计企业应用程序.所以任何帮助向我展示正确的方向将不胜感激.

c# logging enterprise design-patterns

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