小编Ear*_*rlz的帖子

为什么C#编译器不能通过switch语句跟踪所有代码路径

以下代码工作正常:

ListControl lstMyControl;

if (SomeVariable == SomeEnum.Value1)
{
   lstMyControl = new DropDownList();
}
else
{
   lstMyControl = new RadioButtonList();
}

lstMyControl.CssClass = "SomeClass";
Run Code Online (Sandbox Code Playgroud)

以下代码无法编译:

ListControl lstMyControl;

    switch (SomeVariable)
    {
       case SomeEnum.Value1:
       lstMyControl = new DropDownList();
       break;
       case default:
       lstMyControl = new RadioButtonList();
       break;
    }

lstMyControl.CssClass = "SomeClass";
Run Code Online (Sandbox Code Playgroud)

在第二个例子中,编译器说我正在尝试在尚未实例化的变量上设置属性.在任何一种情况下,必须实例化lstMyControl,但compilr似乎无法通过switch语句遵循该代码路径来查看.在上面的简单示例中,我将使用if/else.但是有几次我想用10个不同的类做这样的事情,这些类都继承自同一个基类,并且当一个switch语句是我应该使用的时候,有10个if/elseif语句很烦人.

c# polymorphism compilation

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

GAC,还是GAC?

我有一个用ASP.NET 3.5编写的数据访问层(DAL),它使用Microsoft模式和实践库(以下简称P&P)来完成数据访问.我安装了P&P并且它驻留在我的GAC中,因此,从逻辑上讲,我的DAL在GAC中引用了它.因此,P&P库永远不会被下拉到我的DAL的bin文件夹中.

我使用这个DAL项目至少有五个(甚至超过它,但我懒得试图统计它们)不同的网站.这一切对我来说都很好,因为我是唯一在这些网站上工作的开发人员.

但是,现在我有其他开发人员将在这些网站上工作.

问题是:如果开发人员从我们的代码存储库中删除DAL项目,如果他们没有安装P&P库,则不会为他们构建.

我的问题:我应该期望开发人员安装P&P库,还是应该将它们转储到bin文件夹中并完成它?

我意识到将它们转储到bin文件夹可能是处理问题的最简单方法,但如果我可以在GAC中引用它们,我从来不是bin文件夹的忠实粉丝.

.net asp.net gac

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

为什么无符号CLR类型在C#中如此难以使用?

在开始使用C#之前,我来自大多数C/C++背景.我在C#中第一个项目所做的一件事就是创建一个这样的类

class Element{
  public uint Size;
  public ulong BigThing;
}
Run Code Online (Sandbox Code Playgroud)

然后我被这个需要铸造的事实所羞辱:

int x=MyElement.Size;
Run Code Online (Sandbox Code Playgroud)

同样如此

int x=5;
uint total=MyElement.Size+x;
Run Code Online (Sandbox Code Playgroud)

为什么语言设计者决定使有符号和无符号整数类型不能隐式转换?为什么整个.Net库中未使用的无符号类型更多?例如String.Length,永远不会是负数,但它是有符号整数.

.net c# unsigned casting language-design

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

realloc失败的几率是多少?

当它的可用内存耗尽时是否会失败malloc?或者是否有其他原因?

c memory-management realloc

9
推荐指数
3
解决办法
5248
查看次数

基本上在Javascript中执行`where`子句的最佳方法是什么?

我正在尝试解析发送给我的一些JSON,它的格式都是

[{key:value},{key2:value2}, ... ]
Run Code Online (Sandbox Code Playgroud)

获得此价值的最佳方法是key2什么?有没有办法在不进行for循环的情况下完成它?

javascript arrays json

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

是否有MaskEdit面具的参考?

我正在尝试在Delphi 7中创建一个半复杂的掩码文本框.我遇到了一些问题,因为我找不到掩码中每个字符含义的任何参考.我能找到的只是例子.

某处有参考吗?

delphi delphi-7 maskedtextbox

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

在基于C的语言中,从右到左和从左到右的关联性会产生什么影响?

我正在编写脚本语言,我想复制(非常标准化的)C操作顺序.

有一件事,我从来没有牢牢把握作为一个正式的概念,虽然是相关性.为什么一些操作员组从左到右,其他从右到左?

有人可以给我一些例子,说明如果规则是从左到右或与它们相反的话,一行代码看起来会有什么不同?或者为什么关联性是它的方式,因为在我看来它只是一个随意的选择,但我认为他们有理由.

另外,请注意,我确实知道关联性意味着什么,我只是想不出任何从左到右(或反之亦然)优于其他选择的例子

c syntax language-design operators operator-precedence

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

如何在没有GUI的情况下运行makecert.exe?

我最近遇到了一个以自动方式生成自签名证书的问题.无论何时我运行makecert.exe,我都会看到一个弹出窗口,显示证书的密码.但是,这些证书永远不会分发,所以我不需要密码或任何东西.

如何在不需要GUI的情况下使makecert.exe正常工作?

如果它有帮助,我的命令行采用这种形式:

makecert.exe mycert.cer -r -n"CN = random-hex-number" - $ individual -sv private.pkv -pe -cy end

windows user-interface automation certificate makecert

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

"null this"是否可以使用扩展方法?

所以,我真的很喜欢使用扩展方法..也许有点太多了.所以,我会问我最近的享受,以确保我不会走得太远.

场景是我们有一个Guid?传入的变量.如果变量为null或者Guid.Empty,那么我们想要使用不同的Guid.所以,我写了一个扩展方法,让它读成英文:

    internal static Guid OrIfEmpty(this Guid? guid, Guid other)
    {
        if (!guid.HasValue || guid.Value == Guid.Empty)
        {
            return other;
        }
        return guid.Value;
    }
Run Code Online (Sandbox Code Playgroud)

这自动意味着"null this"不会抛出异常.例如,这将工作:

((Guid?)null).OrIfEmpty(other);
Run Code Online (Sandbox Code Playgroud)

如果不使用扩展方法,这是不可能的,在我看来可能会产生误导.但是,它只是如此简洁和干净!所以你怎么看?这是可接受的事情,还是让其他程序员感到困惑?

此外,我确信会有其他情况我会做这样的事情并检查thisnull,但这是我现在最好的例子.

注意:我并不是Guid?特别询问这项业务.我要求更多关于实现的整体模式(有一个扩展方法this可以null)

.net c# null extension-methods guid

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

更清楚的方法将文件的内容作为字符串在Rust中?

作为我第一次潜入Rust的一段时间,我开始编写代码将文件的内容转储到字符串中,以便以后处理(现在我只是打印出来)

有没有比我现在更清洁的方法呢?看起来我不得不对它过于冗长,但我没有看到任何好的方法来清理它

use std::io;
use std::io::File;
use std::os;
use std::str;

fn main() {
    println!("meh");
    let filename = &os::args()[1];
    let contents = match File::open(&Path::new(filename)).read_to_end() {
        Ok(s) => str::from_utf8(s.as_slice()).expect("this shouldn't happen").to_string(),
        Err(e) => "".to_string(),
    };
    println!("ugh {}", contents.to_string());
}
Run Code Online (Sandbox Code Playgroud)

file-io rust

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