小编the*_*kip的帖子

为什么Haskell中没有内置的Set数据类型?

是否有人可以向我解释为什么SetHaskell中没有定义数据类型?

旁注:我只是学习Haskell作为逻辑课程的一部分,其中集合论非常重要,因此在Haskell中使用集合的概念会非常方便.有一个列表并删除重复项(并可能排序)也会产生一个集合,但我很好奇是否有一个特殊的原因,它不是内置的?

haskell types set

17
推荐指数
3
解决办法
8772
查看次数

使用小数据类型(例如short而不是int)是否会减少内存使用量?

我的问题基本上是关于C#编译器如何处理小数据类型的内存分配.我知道例如像add这样的运算符是在int上定义的而不是在short上定义的,因此计算将被执行,好像short是int成员一样.

假设如下:

  • 没有业务逻辑/验证逻辑与短数据类型的选择相关联
  • 我们没有对不安全的代码做任何事情

是否尽可能使用短数据类型会减少应用程序的内存占用量,是否建议这样做?或者使用short等不值得花费,因为编译器例如分配int32的完整内存ammount并在进行算术时添加额外的强制转换.

任何关于假定的运行时性能影响的链接都将非常感激.

相关问题:

我为什么要在C#中使用int而不是字节或short

整数蓝色,短+ +短问题

c# types memory-management short

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

显式接口实现不能是虚拟的

为了记录,我已经看过这个连接项,但我真的不明白支持这个问题会是什么.

说我有以下代码:

public interface IInterface
{
    void Method();
}

public class Base : IInterface
{
    virtual void IInterface.Method()
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

虚拟标识符有什么问题?使用虚拟修饰符可以override指示基类中有不同的实现.我现在可以通过删除虚方法并像这样创建派生类来使其工作:

public class Derived : IInterface
{
    void IInterface.Method()
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这样我真的没有迹象表明我压倒了什么.

更新:
根据C#(部分:20.4.1显式接口成员实现)规范,有两个原因.

  1. 隐藏某些方法(我正在使用它).
  2. 具有相同签名但返回类型不同的2个函数(例如,对IClonable有用).

它没有说明为什么你不能使这些方法虚拟.

更新2:
鉴于答案,我认为我应该在这里重新提出真正的问题.如果以上两个原因是首先使接口的显式实现成为可能的原因.如果将方法设为虚拟,为什么会出现问题?

c# compiler-construction interface explicit-interface

13
推荐指数
2
解决办法
5273
查看次数

条件语句,泛型委托不必要的演员

在设置Action<T>值时,我遇到了条件语句这个非常奇怪的问题.这不是我不知道如何解决这个问题,因为使用普通法很容易解决if.

这是我的问题:

public class Test
{
    public bool Foo { get; set; }
    public Action<bool> Action { get; set; }

    public void A()
    {
        Action = Foo ? B : C;//Gives compiler error
    }

    public void B(bool value)
    {

    }

    public void C(bool value)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我一条消息的编译器错误

"方法组"和"方法组"之间没有隐式转换.

这很奇怪,因为我无法弄清楚为什么这是非法的.

顺便说一句,下面的语法将使这个有效(从编译器的角度来看):

    public void A()
    {
        Action = Foo ? (Action<bool>) B : C;
    }
Run Code Online (Sandbox Code Playgroud)

所以也许你可以阅读这个问题,为什么演员必要?

c# compiler-construction generics delegates

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

为什么Asp.net web api控制器不是来自IController

在ASP.net MVC4中,有一个用于在数据模型上公开CRUD功能的Web API的"新"概念.这些控制器的基类DataController派生自ApiController.

不幸的是,这ApiController并不是IController因为这些问题无法通过普通的自定义控制器工厂来处理,因为这些请求应该返回实例IController.

有没有人知道这背后的原因,因为我不明白为什么你的MVC项目中的控制器不会派生,IController因为它会破坏你的自定义控制器工厂,因为它无法实例化项目中的每个控制器.

简而言之,由于这种继承,您无法使用DI容器来注入依赖项.

c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

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

查找不适用于因pragma而未构建的代码的用法

如果我正在构建调试解决方案而且我有

#if !DEBUG
public void DoA()
{
    DoB();
}
#endif

public void DoB()
{
}
Run Code Online (Sandbox Code Playgroud)

当我使用Find Usagesresharper在DoB上做任何事情都没有找到.查找用法的目的是找到某个方法的所有用法,而不仅仅是在特定构建配置中使用的方法.

这是我可以禁用的东西,因为它使Resharper的重构不那么具有预测性.

Resharper构建是:5.1.3000.12

.net c# resharper resharper-5.1

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

如何获取可变字符串列表?

我有以下代码

  List<String> l = new List<String>();
  String s = "hello";
  l.Add(s);
  s = "world";
Run Code Online (Sandbox Code Playgroud)

当我设置一些断点并完成程序时,在执行最后一行之后,列表中的值仍然是hello而不是world.

它不应该相等world吗?字符串不是一个对象,我不只是将一个指针插入列表中吗?稍后,如果我将字符串更改为指向不同的值("world"),为什么我的列表仍然引用旧值?

我怎样才能达到理想的效果?非常感谢!

c# string reference

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

在asp.net-mvc中,是否有更优雅的方式使用IOC将多个存储库注入控制器?

我有一个asp.net-mvc网站,我正在使用ninject for IOC和nhibernate用于我的ORM映射

这是我的IOC绑定代码:

internal class ServiceModule : NinjectModule
{
    public override void Load()
    {
        Bind(typeof(IIntKeyedRepository<>)).To(typeof(Repository<>)).InRequestScope();
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我如何将IOC用于控制器代码的示例:

    public FAQController(IIntKeyedRepository<FAQ> faqRepository, IUnitOfWork unitOfWork)
    {
        _faqRepository = faqRepository;
        _unitOfWork = unitOfWork;
    }
Run Code Online (Sandbox Code Playgroud)

问题是到目前为止,每个控制器都有一个它指向的表,所以我只需要传递给它的存储库类...

现在,我有许多表和类都只有2个字段:

  • ID
  • 名称

对于这些类中的每一个,我只是从一个名为的基类继承:

 BaseModel
Run Code Online (Sandbox Code Playgroud)

这只是:

public class BaseModel
{
    public virtual string Name { get; set; }
    public virtual int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个:

 StaticDataController
Run Code Online (Sandbox Code Playgroud)

可以为从BaseModel继承的每个类执行所有CRUD的类(没有额外的字段)

愚蠢的简单方法是这样做:

    private readonly IIntKeyedRepository<Object1> _object1Repository;
    private readonly IIntKeyedRepository<Object2> _object2Repository;
    private readonly IIntKeyedRepository<Object3> _object3Repository;
    private readonly IIntKeyedRepository<Object4> _object4Repository; …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc dependency-injection ninject repository inversion-of-control

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

LINQ选择单行

什么是LINQ方式做一个枢轴,使行被转换为一个字符串?

例如

精选生产:

a
b
c
Run Code Online (Sandbox Code Playgroud)

将显示为:

a,b,c
Run Code Online (Sandbox Code Playgroud)

c# linq string-concatenation

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