小编ole*_*sii的帖子

为什么数组实现IList?

请参阅System.Array类的定义

public abstract class Array : IList, ...
Run Code Online (Sandbox Code Playgroud)

从理论上讲,我应该能够写下这一点,并感到高兴

int[] list = new int[] {};
IList iList = (IList)list;
Run Code Online (Sandbox Code Playgroud)

我也应该可以从iList中调用任何方法

 ilist.Add(1); //exception here
Run Code Online (Sandbox Code Playgroud)

我的问题不是为什么我得到一个例外,而是为什么Array实现了IList

c# arrays ilist liskov-substitution-principle

137
推荐指数
4
解决办法
2万
查看次数

如何为多个构建配置选择不同的app.config

我有一个包含MSTest集成测试的dll类型项目.在我的机器上测试通过,我希望在CI服务器上发生同样的事情(我使用TeamCity).但是测试失败了,因为我需要在app.config中调整一些设置.这就是为什么我想要一个单独的第二个app.config文件来保存CI服务器的设置.

所以我想拥有

/Sln
 /Proj
  app.config (I think this is required by VS)
  app.Release.config (This is a standalone independent config file)

因此,如果我在CI上的构建配置中选择Release配置,我想使用app.Release.config文件而不是app.config

问题
对于简单的.dll类型项目,这似乎并不简单.对于Web项目,我可以进行Web配置转换.我找到了一个黑客如何为dll类型的项目进行这些转换,但我不是黑客的忠实粉丝.

问题
根据.NET项目的构建配置(例如Debug,Release,...)调整app.config文件的标准方法是什么?

.net configuration continuous-integration release-management visual-studio

114
推荐指数
5
解决办法
11万
查看次数

C++,__ try和try/catch/finally

我想知道一下C++ try/catch/finally块.我已经看到这些命令有两个下划线,如__try.但MVSC 2010项目也没有下划线.所以你什么时候需要这些下划线?

c++ exception-handling finally try-catch

42
推荐指数
3
解决办法
5万
查看次数

代码契约构建参考汇编操作

我正在使用代码合同并试图了解我将使用哪些构建选项以及何时使用.合同装配构建选项在项目属性中定义

代码合同 - >合同参考汇编:

  • 没有
  • 建立
  • DoNotBuild

有什么想法或建议吗?

c# code-contracts

32
推荐指数
2
解决办法
5566
查看次数

反对控制容器反转的论据

似乎每个人都在转向IoC容器.我曾试图"摸清"它一段时间,尽管我不想成为一个在高速公路上走错路的司机,但它仍然没有通过常识测试.让我解释一下,如果我的论点存在缺陷,请纠正/启发我:

我的理解:IoC容器应该在组合不同组件时让您的生活更轻松.这可以通过a)构造函数注入,b)setter注入和c)界面注入来完成.然后以编程方式或在容器读取的文件中"连接"它们.然后按名称召唤组件,然后在需要时手动投射.

我得不到的:

编辑 :( 更好的措辞) 为什么使用一个不是语言惯用的不透明容器,如果组件设计得当(使用IoC模式,松散耦合),你可以用更简洁的方式"连接"应用程序(imho) ?这个"托管代码"如何获得非平凡的功能?(我听过一些关于生命周期管理的提及,但我不一定能理解这比自己动手更好/更快.)

ORIGINAL:为什么要将所有组件存储在一个容器中,以与语言惯用的方式"连接起来",在按名称调用组件时使用相当于"goto labels"的东西,然后通过手动转换失去静态类型语言的许多安全优势,当你通过不执行它获得等效功能时,而是使用现代OO语言给出的所有很酷的抽象功能,例如编程到接口?我的意思是,实际上需要使用组件的部件必须知道它们在任何情况下都在使用它,并且在这里你将使用最自然,惯用的方式进行"连线" - 编程!

ioc-container inversion-of-control

31
推荐指数
2
解决办法
5506
查看次数

Resharper可以跳过异步/等待关键字吗?

我试图看看新的C#5.0异步(CTP)功能将如何工作.我也使用ReSharper.但由于它只是一个CTP,ReSharper 不支持新关键字(async/await)并将其突出显示为错误.

这是它的外观(来自CTP样本的代码)

ReSharper无法理解异步等待关键字

现在可以让ReSharper跳过这些词吗?

UPDATE

我试过早期访问计划ReSharper build 6.0.2151.53(2011年5月10日)但没有运气.问题仍然存在,所以如果你想解决它,请在这里投票(遵循彼得的回答).

c# resharper async-ctp

15
推荐指数
2
解决办法
988
查看次数

通过ByteBuffer和CQL 3将Java对象序列化为Cassandra 1.2

我拼凑了下面没有做任何复杂事情的代码 - 只创建一个byte []变量,将其写入Cassandra(v1.2,通过新的Datastax CQL库)的blob字段中,然后将其读回再来一次.

当我把它放在它的3个元素长,当我读回它时,它是84个元素长...!这意味着我实际上尝试做的事情(序列化Java对象)org.apache.commons.lang.SerializationException: java.io.StreamCorruptedException: invalid stream header: 81000008在尝试再次反序列化时失败并出现错误.

这是一些演示我的问题的示例代码:

import java.nio.ByteBuffer;

import org.apache.commons.lang.SerializationUtils;

import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;

public class TestCassandraSerialization {


    private Cluster cluster;
    private Session session;

    public TestCassandraSerialization(String node) {
        connect(node);
    }

    private void connect(String node) {
        cluster = Cluster.builder().addContactPoint(node).build();
        Metadata metadata = cluster.getMetadata();
        System.out.printf("Connected to %s\n", metadata.getClusterName());
        for (Host host: metadata.getAllHosts()) {
              System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n",
                         host.getDatacenter(), host.getAddress(), host.getRack()); …
Run Code Online (Sandbox Code Playgroud)

java serialization cassandra

15
推荐指数
2
解决办法
8219
查看次数

当我从.NET生成一个新线程时到底发生了什么?

我想了解当我在.NET中生成一个新线程时,场景背后究竟发生了什么,如下所示:

Thread t = new Thread(DoWork); //I am not interested in DoWork per se
t.Start();
Run Code Online (Sandbox Code Playgroud)

1.在CLR和Windows内核中创建了哪些与线程相关的对象?
2.为什么需要这些物品?
3.在x86,x64 Windows上分配了多少托管/非托管内存(堆和堆栈)?

更新
我正在寻找托管线程对象这样的对象,我假设它是t,但也许是其他一些额外的托管对象; 内核线程对象,用户线程环境块等.

非常感谢!

.net memory windows multithreading kernel

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

为什么返回异步类型必须为void,Task或Task <T>

我正在尝试用异步CTP弄脏手,我注意到编译器抱怨异步返回类型.其他类型有什么问题?

一个简单的演示

static void Main(string[] args)
{
    DoWork();
    Console.WriteLine("Returned to main");
    Console.Read();
}

// why do I need to return void, Task or Task<T> here?
// I know I can use something like Task<IEnumerable<string>>
private static async string[] DoWork()
{
    Console.WriteLine("DoWork started");
    return await Task.Factory.StartNew(
        delegate
        {
            Thread.Sleep(2000);                
            Console.WriteLine("DoWork done");
            return new List<string>();
        });        
}
Run Code Online (Sandbox Code Playgroud)

.net async-await c#-5.0

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

在Paypal中进行货币转换舍入的正确方法是什么?

我正在构建一个与paypal集成的电子商务网站.

我们采取多种货币,所以我想确保(出于会计原因)我正确地执行货币转换的任何数学.

在将货币转换*乘以原始货币之后,我总是在小数点后面有大量的尾随数字.

有没有标准的方法来做到这一点?我应该截断还是圆?如果舍入1/1000小数将影响舍入1/100十进制,我是否需要多次舍入?

我应该做的事情如下:

Math.Round(Math.Round(x, 3), 2)
Run Code Online (Sandbox Code Playgroud)

我一直无法找到关于如何做到的好信息(希望美国和欧洲是一样的).

c# currency paypal decimal rounding

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