有人可以花点时间向我解释语言基础:
int foo = myObject.SomeList.Count;
for (int i = 0 ; i < foo ; i++)
{
myObject.SomeList.Add(bar);
}
Run Code Online (Sandbox Code Playgroud)
进入无限循环,因为foo引用了一个不断增加的值.将第一行修改为:
int foo = (int)myObject.SomeList.Count;
Run Code Online (Sandbox Code Playgroud)
让它消失,不知何故foo一劳永逸地从参考变为价值.这可能是教科书但是,为什么会这样呢?
非常感谢
编辑:好的,正如帕特里克提到的那样,无限循环只发生在没有先前存储到foo时,演员阵容毫无意义,这是有道理的.这确实是我在调试时最初的想法.因此,当演员修理它时我很惊讶.实际发生的事情是,当被编辑的代码与执行的代码之间存在同步问题时,Visual Studio误以为我已经修复了它,这导致了错误的结论.
如果您有这样的对象:
public class Foo
{
private int _id;
public int id
{
get { return _id; }
set { _id = value; }
}
private string _name;
public string name
{
get { return _name; }
set { _name = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
并且您希望将id初始化为-1并将其命名为String.Empty,最佳做法是什么?(以及为什么)
这样做:
private int _id = -1
Run Code Online (Sandbox Code Playgroud)
要么
在构造函数中设置_id = -1和name = String.Empty?
我有一个字符串,其值为:
<ROOT>
qwerty
<SampleElement>adsf</SampleElement>
<SampleElement2>The text of the sample element2</SampleElement2>
</ROOT>
Run Code Online (Sandbox Code Playgroud)
如何使用C#3.0将此字符串写入文件?
提前致谢.
我最近(今天)开始在Delphi中使用我的注册表进行meddeling.:)所有工作正常,我的自定义文件类型现在打开我的程序,但有2个问题,我无法解决.
1)我想要从所有文件类型"打开"的选项,所以我添加
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
reg.LazyWrite := false;
reg.OpenKey('*\OpenWithList\EncryptionSystem', true);
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
reg.CloseKey;
reg.free;
Run Code Online (Sandbox Code Playgroud)
如果我使用regedit查看注册表,它肯定会出现,但是当我右键单击一个文件并选择打开它时它不存在...
所以我加了这个
reg.OpenKey('*\shell\Encrypt\command', true);
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
reg.CloseKey;
Run Code Online (Sandbox Code Playgroud)
这适用于每个文件,但选项位于顶部,带有"打开"和"编辑".我有点希望它像大多数程序一样出现在菜单子部分中...我意识到我需要使用shellext但我不理解这些如何与上下文菜单处理程序一起工作的结构...我已经学会了所有无论如何我从阅读注册表...我知道shellext的名称出现在".*"后面,但至于大胡言乱语的含义我不知道.
我在一个新的Web应用程序上使用NInject,有两件事我不清楚:
我是否需要保持对内核(Session/App变量)的引用以确保GC不收集我的所有实例?例如,如果我指定.Using()然后收集Kernel对象,那么我的所有"单身人士"都不是被收集的吗?
如果我确实需要保持对Kernel对象的引用,我如何允许传入WithArguments()的参数改变或者这是不可能的.
c# dependency-injection ninject ioc-container inversion-of-control
我正在bash中为Linux上的应用程序编写安装脚本.
此脚本将一些文件复制到/ usr/bin和/ usr/share中,因此需要由root用户执行,此外它还会在$ HOME目录中为配置文件创建一个隐藏目录.
问题是:如果普通用户想要安装程序,他需要是root用户.但如果他是root用户,$ HOME目录将是/ root /而不是/ home/username.
我为我的应用程序库声明了以下类路径引用:
<path id="libraries">
<fileset dir="${lib.dir}" includes="**/*.jar" />
</path >
Run Code Online (Sandbox Code Playgroud)
我可以使用librairies的类路径编译代码:
<javac srcdir="${src}" destdir="${build.classes}" classpathref="libraries"/>
Run Code Online (Sandbox Code Playgroud)
但我找不到在我的WAR文件中包含librairies文件集的方法:
<war destfile="${release.dir}/rel.war" webxml="${webinf}">
<classes dir="${build.classes}"/>
<!-- I need to copy paste the same directory declaration! -->
<lib dir="${lib.dir}" includes="**/*.jar"/>
</war>
Run Code Online (Sandbox Code Playgroud)
如何将"lib"声明替换为重用与javac任务相同的路径?
我正在尝试创建一个类,我可以序列化以生成以下XML:
<chart palette='1'>
<categories>
<category label='2001' />
<category label='2002' />
Run Code Online (Sandbox Code Playgroud)
..等等
我有一个类看起来像这样的类:
[XmlRoot("chart")]
public class Chart
{
[XmlAttributeAttribute("palette")]
public string Palette;
[XmlElement("categories")]
public List<Category> Categories = new List<Category>();
}
[XmlRoot("category")]
public class Category
{
[XmlAttributeAttribute("label")]
public string Label;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不会产生所需的chart-> categories-> category @ label结构.似乎没有使用Category类上的XmlRoot.这是我从该代码得到的输出:
<chart palette="2">
<categories label="2002" />
</chart>
Run Code Online (Sandbox Code Playgroud)
如何获得我想要的XML结构?
在设计具有虚拟字段的模型时,我想问一下最优雅的方法,如下面的Django ......
假设我们正在建立一个在线商店,系统中的所有产品都是由" 产品 " 模型定义的.
class Product(models.Model):
# common fields that all products share
name = ...
brand = ...
price = ...
Run Code Online (Sandbox Code Playgroud)
但是商店会有很多与彼此完全无关的产品类型,所以我需要一些方法来存储不同产品类型的虚拟领域(即MP3播放器的容量,书籍的页数,......).
到目前为止,我可以提出我的原始Django技能的解决方案远非完美:
拥有我手动管理的"custom_fields"属性和中间表.(在我脸上尖叫丑陋:))
或者使用Python的危险exec-eval语句动态继承" Product "中的类(这对于维护和实现来说太多巫术魔法需要Django内部知识).
你对此有何看法?
TIA.
如何获取刚刚插入的新记录的自动生成ID?(使用ASP classic和MSSQL 2005)