小编bli*_*sta的帖子

你是否使用花括号进行额外的范围设计?

我的意思是除了在函数,类,if,while,switch,try-catch需要时使用它.

在我看到这个问题之前,我不知道可以这样做.

在上面的链接中,Eli提到"他们使用它来折叠代码的逻辑部分,这些逻辑部分不属于通常折叠起来的函数,类,循环等."

除了提到的那些之外还有什么其他用途?

使用花括号来限制变量的范围并仅在需要时扩展范围(在"需要访问"的基础上工作)是一个好主意吗?或者它真的很傻?

如何使用范围,以便您可以在不同的范围内使用相同的变量名称,但在相同的更大范围内?或者,重用相同的变量(如果你想使用相同的变量名)是更好的做法,并节省解除分配和分配(我想一些编译器可以对此进行优化?)?或者更好地使用不同的变量名称?

c++ java scope curly-braces

38
推荐指数
8
解决办法
9141
查看次数

是否应该为了维护而避免使用某些编程结构(和其他编程结构)?

我正在从事非个人项目,因此可以说维护程序员不会是我,否则我不需要问这个问题.

现在有一些构造(委托,lambda表达式),我想在我的代码中尝试,而不是故意使代码更难阅读,但因为它们适合于这种情况(并且更少的代码也可以输入),以及因为我是这门语言的新手,所以也可以练习使用它们.

但是,我不确定维护程序员是否会知道每个构造,因为我们很多人都不是来自ac #background,而且我不确定他是否像我一样热衷于编程或只是像常规一样对待它一天的工作.所以我的问题是:

    • 是否应避免使用某些编程结构来提高可维护性?

    • 如果上述问题的答案是肯定的,那么应该避免使用的构造子集是什么?

    • 维护程序员有责任完全学习一门语言吗?

c# maintenance language-construct

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

这是否使用静态队列线程安全?

msdn文档声明静态通用队列是线程安全的.这是否意味着以下代码是线程安全的?换句话说,当一个线程将一个int排队并且另一个线程同时使一个int出局时是否存在问题?我是否必须为线程安全锁定Enqueue和Dequeue操作?

class Test {
    public static Queue<int> queue = new Queue<int>(10000);

    Thread putIntThread;
    Thread takeIntThread;

    public Test() {
        for(int i = 0; i < 5000; ++i) {
            queue.Enqueue(0);
        }
        putIntThread = new Thread(this.PutInt);
        takeIntThread = new Thread(this.TakeInt);
        putIntThread.Start();
        takeIntThread.Start();
    }

    void PutInt() {
        while(true)
        {
            if(queue.Count < 10000) {//no need to lock here as only itself can change this condition
                queue.Enqueue(0);
            }
        }
    }

    void TakeInt() {
        while(true) {
            if(queue.Count > 0) {//no need to lock here as only itself …
Run Code Online (Sandbox Code Playgroud)

.net c# thread-safety

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

双精度值在[0.0,1.0]范围内的唯一值总数是多少?

Random.NextDouble()(一个从双[0.0,1.0的范围内))有时具有大的Int64相乘(让大的Int64 = 9000000000L),并且将结果地板以获得随机的Int64值比可以从随机获得较大.Next()(范围为[0,Int32.MaxValue)的Int32).

Random r = new Random();
long big = 9000000000L;
long answer = (long) (r.NextDouble() * big);
Run Code Online (Sandbox Code Playgroud)

在我看来,在[0.0,1.0]范围内Double的唯一值的总数提供了它可能生成的唯一Int64的数量的上限.事实上,一个松散的上限,因为许多不同的双打将映射到相同的Int64.

因此,我想知道:在[0.0,1.0]范围内,double的唯一值总数是多少?

如果你可以告诉我"大"可以采取的最大值是什么,以便"回答"可以是范围[0,大]的值,以及"回答"的值的分布是否均匀,假设Random.NextDouble()是统一的.

编辑:Double(double)在这里指的是IEEE 754浮点双精度,而Int64(long)和Int32(int)分别指64位和32位有符号2的补码.


灵感来自这个问题:在java中生成10位唯一随机数

虽然我使用C#,这个问题是语言无关,更多的是离散数学不是编程,但它困扰我不主要是从数学的好奇感,但是从想使用一个公式,只有当它做什么它一个程序员应该从安全角度来做.

language-agnostic random floating-point discrete-mathematics

8
推荐指数
2
解决办法
714
查看次数

函数返回另一个函数的返回

如果我想调用Bar()而不是Foo(),是否会Bar()返回Foo()返回的副本(额外开销),或者返回Foo()放置在临时堆栈上的同一对象?

vector<int> Foo(){  
    vector<int> result;  
    result.push_back(1);  
    return result;  
}  
vector<int> Bar(){  
    return Foo();  
}
Run Code Online (Sandbox Code Playgroud)

c++ function vector return-value

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

什么是"从任何类型S到任何接口类型T,只要S没有密封并且S没有实现T." 实际上意味着

什么是"从任何类型S到任何接口类型T,只要S没有密封并且S没有实现T".实际上意味着

我在C#语言规范中遇到过这个问题:

6.2.4显式引用转换

显式引用转换是:

  • ...
  • 从任何类型S到任何接口类型T,如果S未密封且提供S未实现T.

我能理解"提供S未密封"的含义,但我不确定我是否理解"提供S不实施T"的意思.

例如:

class S {}//not sealed, nor does it implement T
interface T {}
...
T t = (T)new S();//will throw InvalidCastException.
Run Code Online (Sandbox Code Playgroud)

难道它只是在规范中枚举表达显式引用转换的所有语法正确的方式,无论它是否会抛出异常?或者它是否意味着其他一些我不知道的事情(截至目前)?

提前致谢.

c# specifications

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

是否有键盘快捷键来查看Visual Studio中波浪线的含义?

如果我可以在不进行鼠标悬停的情况下查看波浪线的含义,那将是很好的.

keyboard-shortcuts visual-studio

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

你如何存储你所学到的所有东西以及你想要保留的信息?

在实践中最好保留授权知识,但作为程序员,我确信信息太多了.除了为您的书籍添加注释外,您还有哪些其他方法可用于您自己的个人知识库,以便您可以轻松获取参考资料?

您是否创建自己的wiki或使用wikidpad等软件,或将其保存为纯文本,书签,pdf,网页等.?或者您只是将google/SO视为您的知识库并仅在需要时进行搜索?

你可能会发现这个类似的 /sf/ask/767301/,当然这个问题很容易与非程序员有关.

knowledge-management

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

如何匹配字符串,忽略结束换行符?

我希望能够将整个字符串(因此单词边界)与模式"ABC"匹配("ABC"仅用于方便,我不想检查与固定字符串的相等性),因此换行符是对我很重要.但是,当放在字符串末尾时,似乎会忽略单个"\n".我的模式有问题吗?

Regex r = new Regex(@"^ABC$");
string[] strings =
{
    "ABC",//True
    "ABC\n",//True: But, I want it to say false.
    "ABC\n\n",//False
    "\nABC",//False
    "ABC\r",//False
    "ABC\r\n",//False
    "ABC\n\r"//False
};
foreach(string s in strings)
{
    Console.WriteLine(r.IsMatch(s));
}
Run Code Online (Sandbox Code Playgroud)

.net c# regex

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

为什么这个Linq表达式比另一个慢得多?

执行时间:foo(1)>>> foo(2)>> foo(3)

大致:1427349 >>> 14757 >> 1362

foo(3)是三者中最优化的算法,所以我并不惊讶它是最快的.让我感到惊讶的是,foo(2)比foo(1)快得多.我的印象是foo(2)排序,而foo(1)的操作类似于foo(3).我可以知道foo(1)减速的原因是什么?告诉我什么是引擎盖下的.谢谢!

void Main()
{   
    Random r = new Random();
    for(int i = 0; i < array.Length; i++)
    {
        array[i] = new A(r.Next(int.MaxValue));
    }   

    foo(1); 
    foo(2);
    foo(3); 
}

A[] array = new A[10000];
static Stopwatch sw = new Stopwatch();

public void foo(int s)
{
    sw.Reset();
    sw.Start();

    switch(s)
    {
        case 1:
            array.First(x => (x.value == array.Max(y => y.value))).Dump();
            break;
        case 2:
            array.OrderBy(x => x.value)
            .Last()
            .Dump();    
            break;
        case 3:
            {           
                int max = array[0].value; …
Run Code Online (Sandbox Code Playgroud)

c# linq performance

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