小编sim*_*sjo的帖子

将二进制分发添加到github的下载链接

Github在存储库上有这个下载链接.如何将二进制分发添加到此列表中?

我在help.github上找不到任何信息,所以链接到一些文档会有所帮助.

binaryfiles distribution github download

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

nginx,fastcgi和开放套接字

我正在尝试在nginx上使用fastcgi,但我遇到了一些问题.Nginx不重用连接,它在BeginRequest标志中给出0,因此应用程序应在请求完成后关闭连接.

我有以下代码用于结束:

socket.shutdown(SocketShutdown.BOTH);
socket.close();
Run Code Online (Sandbox Code Playgroud)

问题是连接实际上没有关闭..它们在TIME_WAIT上停留,而nginx(或其他东西)不会继续打开新连接.我的猜测是我在关闭套接字时做错了什么,但我不知道是什么..在相关的说明 - 我如何让nginx保持连接打开?

这是使用nginx 1.0.6和D 2.055

编辑:没有更近,但我也检查了逗留选项,它是关闭的:

linger l;
socket.getOption(SocketOptionLevel.SOCKET, SocketOption.LINGER, l);
assert(l.on == 0); // off
Run Code Online (Sandbox Code Playgroud)

getOption虽然返回4 ..不知道这意味着什么.返回值未记录.

编辑:我也尝试在发送的最后一条消息上使用TCP_NODELAY,但这也没有任何影响:

socket.setOption(SocketOptionLevel.SOCKET, SocketOption.TCP_NODELAY, 1);
Run Code Online (Sandbox Code Playgroud)

编辑:nginx 1.1.4支持保持活跃的连接.虽然这没有按预期工作.正确报告服务器负责连接生命周期管理,但它仍然为每个请求创建一个新套接字.

sockets d nginx

28
推荐指数
2
解决办法
8559
查看次数

为什么不将null评估为false?

在条件null句中没有评估的原因是什么false

我首先考虑的是分配以避免使用=而不是使用的错误==,但编译器很容易不允许这样做.

if (someClass = someValue) // cannot convert someClass to bool. Ok, nice

if (someClass) // Cannot convert someClass to bool. Why?

if (someClass != null) // More readable?
Run Code Online (Sandbox Code Playgroud)

我认为这null意味着相当合理false.还有其他语言也使用它,因为它没有我的错误.

编辑:我当然是指参考类型.

Daniel Earwicker关于赋值错误的一个很好的评论...这个编译没有警告,因为它评估为bool:

bool bool1 = false, bool2 = true;
if (bool1 = bool2)
{
    // oops... false == true, and bool1 became true...
}
Run Code Online (Sandbox Code Playgroud)

c# null conditional type-conversion

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

由类重写的扩展方法不会发出警告

我在另一个线程中进行了讨论,发现类方法优先于具有相同名称和参数的扩展方法.这很好,因为扩展方法不会劫持方法,但假设您已向第三方库添加了一些扩展方法:

public class ThirdParty
{
}

public static class ThirdPartyExtensions
{
    public static void MyMethod(this ThirdParty test)
    {
        Console.WriteLine("My extension method");
    }
}
Run Code Online (Sandbox Code Playgroud)

按预期工作:ThirdParty.MyMethod - >"我的扩展方法"

但是然后ThirdParty更新它的库并添加一个与扩展方法完全相同的方法:

public class ThirdParty
{
    public void MyMethod()
    {
        Console.WriteLine("Third party method");
    }
}

public static class ThirdPartyExtensions
{
    public static void MyMethod(this ThirdParty test)
    {
        Console.WriteLine("My extension method");
    }
}
Run Code Online (Sandbox Code Playgroud)

ThirdPart.MyMethod - >"第三方方法"

现在突然代码在运行时会表现不同,因为第三方方法"劫持"了你的扩展方法!编译器不会发出任何警告.

有没有办法启用此类警告或以其他方式避免这种情况?

c# extension-methods

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

程序员词典/词典非母语人士

我不是说英语的人,而且我不是很擅长英语.我是自我思考的.我没有和其他人一起使用共同的代码库.我没有任何编程的朋友.我不与其他程序员合作(至少没有人关心这些事情).

我想这可能解释了我在找到好的明确的类名时遇到的一些问题.我试图找到某种"程序员字典",其中包含经常使用的单词及其含义.在阅读其他代码时,我必须经常查找单词,并且尽管许多人使用缩写,这也会带来额外的挑战.

我非常有限的词汇"迫使"我使用像xxManager,xxProvider,xxWhatever这样的坏类名.选择变量和方法名称通常不会有问题.

其他非英国人在这里:你是如何成功应对的?你学好英语这不是问题吗?或者你读过如此多的代码命名是否自然?还是和说英语的人讨论过很多?找到任何好的网站,文章或其他出版物?因为我从来没有读过任何关于使用我自己的语言进行编程的内容,所以我经常在尝试用我的语言找到单词时遇到更多问题......

PS:我发现的所有其他帖子都是关于混合母语和英语......我理解这可能有点偏离主题,可能会被关闭.

编辑:答案和我使用的其他东西的一些资源:

language-agnostic naming coding-style naming-conventions

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

几个无交易外部系统的原子操作

假设您有连接3个不同外部系统的应用程序.您需要更新所有内容3.如果发生故障,您需要回滚操作.这不是一件难以实现的事情,但是说操作3失败了,当回滚时,操作1的回滚失败了!现在第一个外部系统处于无效状态......

我认为一个可能的解决方案是关闭应用程序并强制手动修复外部系统,但是又一次......它可能已经使用过这些信息(也许这就是它失败的原因),或者我们可能没有足够的访问.或者甚至可能不是回滚动作的好方法!

是否有一些处理此类案件的好方法?

编辑:一些申请细节..

这是一个多用户Web应用程序.大部分工作都是通过预定的工作完成的(通过Quartz.Net),因此大多数操作都是在自己的线程中运行.某些用户操作应该触发更新多个系统的作业.外部系统有些不稳定.

我正在考虑更改应用程序以使用命令和工作单元模式

transactions atomic

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

无符号与带符号数作为索引

在.Net中使用带符号数作为索引的理由是什么?

在Python中,您可以通过发送负数来从数组的末尾开始索引,但在.Net中不是这种情况.对.Net来说,以后添加这样的功能并不容易,因为它可能会在索引时使用特殊规则(是的,一个坏主意,但我猜它会发生)破坏其他代码.

并不是说我曾经需要索引大小超过2,147,483,647的数组,但我真的不明白为什么他们选择签名数字.

是不是因为在代码中使用带符号的数字更为正常?

编辑:我刚刚找到这些链接:

C/C++中无符号迭代的危险

签名字长和索引

编辑2:好的,Matthew Flaschen发布的帖子还有其他几个很好的理由:

  • 历史原因,因为它是一种类似c语言
  • 与c互操作

.net indexing unsigned signed

9
推荐指数
2
解决办法
430
查看次数

我真的不明白这个共同/逆转的事情......我不能同时拥有通用的get和set方法?

我想我会用一些例子解释我的问题..

interface IModel {}

class MyModel : IModel {}

interface IRepo<T> where T: IModel {
}

class Repo : IRepo<MyModel> {
}

// Cannot implicitly convert.. An explicit convertion exists. Missing cast?
IRepo<IModel> repo = new Repo();
Run Code Online (Sandbox Code Playgroud)

所以我需要协方差..

interface IRepo<out T> where T: IModel {
}
Run Code Online (Sandbox Code Playgroud)

很好,它的工作原理.然后我想用它:

interface IRepo<out T> where T: IModel {
    T ReturnSomething();
}

class Repo : IRepo<MyModel> {
    public MyModel ReturnSomething() { return default(MyModel); }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,但回购也需要插入对象.使用out参数,我们不能这样做:

// Invalid variance: The type parameter 'T' must be …
Run Code Online (Sandbox Code Playgroud)

inheritance interface covariance contravariance c#-4.0

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

为什么[Flag]'枚举从0开始并递增1?

编辑:似乎大多数人误解了我的问题.

我知道枚举是如何运作的,我知道二进制.我想知道为什么带有[Flags]属性的枚举是按原样设计的.

原帖:

这可能是重复的,但我没有找到任何其他帖子,所以这里.

我打赌它背后有一些很好的理由,我发现它有点容易出错.

[Flag]
public enum Flagged
{
  One, // 0
  Two, // 1
  Three, // 2
  Four, // 3
}

Flagged f; // Defaults to Flagged.One = 0
f = Flagged.Four;
(f & Flagged.One) != 0; // Sure.. One defaults to 0
(f & Flagged.Two) != 0; // 3 & 1 == 1
(f & Flagged.Three) != 0; // 3 & 2 == 2
Run Code Online (Sandbox Code Playgroud)

如果做到这样的话会不会更有意义?

[Flag]
public enum Flagged
{
  One = 1 << 0, …
Run Code Online (Sandbox Code Playgroud)

c# enums bitflags

8
推荐指数
3
解决办法
2738
查看次数

改变引用它们的动态数组是不好的做法吗?

我在D2中看了一下动态数组,发现它们很难理解.我似乎错误地解释了规范.在更改数组时,处理动态数组的引用或切片似乎非常容易出错...或者我只是不了解基础知识?

引用相同的数组只共享实际的项目:

auto a = [1];
auto b = a;
assert(&a != &b); // different instance; Doesn't share length
assert(a.ptr == b.ptr); // same items
assert(a == [1]);
assert(a == b);
Run Code Online (Sandbox Code Playgroud)

当它们引用相同的数组时,更改另一个会改变另一个:

auto a = [1,2];
auto b = a;
a[1] = 20;
assert(a == [1,20]);
assert(a == b);
Run Code Online (Sandbox Code Playgroud)

从数组上的规范

为了最大限度地提高效率,运行时总是尝试调整阵列的大小以避免额外的复制.如果新的大小较大并且未通过new运算符或先前的resize操作分配数组,它将始终执行复制.

所以改变长度并不一定会打破参考:

auto a = [1];
auto b = a;
b.length = 2;
assert(b == [1,0]);
assert(a == [1]); // a unchanged even if it refers to the same instance …
Run Code Online (Sandbox Code Playgroud)

arrays d slice

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