以下代码工作正常:
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语句很烦人.
我有一个用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文件夹的忠实粉丝.
在开始使用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,永远不会是负数,但它是有符号整数.
我正在尝试解析发送给我的一些JSON,它的格式都是
[{key:value},{key2:value2}, ... ]
Run Code Online (Sandbox Code Playgroud)
获得此价值的最佳方法是key2什么?有没有办法在不进行for循环的情况下完成它?
我正在尝试在Delphi 7中创建一个半复杂的掩码文本框.我遇到了一些问题,因为我找不到掩码中每个字符含义的任何参考.我能找到的只是例子.
某处有参考吗?
我正在编写脚本语言,我想复制(非常标准化的)C操作顺序.
有一件事,我从来没有牢牢把握作为一个正式的概念,虽然是相关性.为什么一些操作员组从左到右,其他从右到左?
有人可以给我一些例子,说明如果规则是从左到右或与它们相反的话,一行代码看起来会有什么不同?或者为什么关联性是它的方式,因为在我看来它只是一个随意的选择,但我认为他们有理由.
另外,请注意,我确实知道关联性意味着什么,我只是想不出任何从左到右(或反之亦然)优于其他选择的例子
我最近遇到了一个以自动方式生成自签名证书的问题.无论何时我运行makecert.exe,我都会看到一个弹出窗口,显示证书的密码.但是,这些证书永远不会分发,所以我不需要密码或任何东西.
如何在不需要GUI的情况下使makecert.exe正常工作?
如果它有帮助,我的命令行采用这种形式:
makecert.exe mycert.cer -r -n"CN = random-hex-number" - $ individual -sv private.pkv -pe -cy end
所以,我真的很喜欢使用扩展方法..也许有点太多了.所以,我会问我最近的享受,以确保我不会走得太远.
场景是我们有一个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)
作为我第一次潜入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) .net ×3
c# ×3
c ×2
arrays ×1
asp.net ×1
automation ×1
casting ×1
certificate ×1
compilation ×1
delphi ×1
delphi-7 ×1
file-io ×1
gac ×1
guid ×1
javascript ×1
json ×1
makecert ×1
null ×1
operators ×1
polymorphism ×1
realloc ×1
rust ×1
syntax ×1
unsigned ×1
windows ×1