以下示例中的条件检查是否真的多余?:
public class MyClass {
public bool MyProperty { get; set; }
public void DoSomething(bool newValue) {
// R# says: redundant condition check before assignment
// on the following line:
if (MyProperty != newValue) { // <======
MyProperty = newValue;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道任何一种方式MyProperty都会设置newValue,但检查是多余的?
在Adobe Flex中,即使没有进行显式检查,只要调用setter ,VM就会隐式调用getter.最终结果是在分配之前进行检查会导致两个检查,一个显式检查和一个隐式检查,从而导致冗余检查.在C#中有类似的事情吗?
我正在使用LogManager.readConfiguration()它需要一个InputStream,其内容我想来自一个字符串.是否存在相应StringBufferInputStream的不被弃用的内容,例如ReaderToInputStreamAdaptor?
为什么我应该使用事件跟踪Windows(ETW)而不是标准的.NET EventLog类,反之亦然?知道我们将使用相当多的性能计数器会影响决策吗?
到目前为止我所知道的:
将对象添加到.NET System.Collections.Generic.Dictionary类时,密钥的哈希码将在内部存储并用于以后的比较.当哈希码在其初始插入字典后发生变化时,它经常变得"不可访问",并且当存在检查(即使使用相同的引用)返回false时,它可能会使其用户感到惊讶(下面的示例代码).
该GetHashCode的文件说:
为对象GetHashCode方法必须一致,只要没有修改确定的该对象的Equals方法返回值的对象的状态返回相同的散列码.
因此,根据GetHashCode文档,只要更改了相等的确定状态,哈希码就会改变,但Dictionary实现不支持这一点.
当前的.NET字典实现是否被打破,因为它错误地忽略了哈希码限额?应该GetHashCode()只基于不可变成员?或者,还有什么可以打破可能的错误二分法吗?
class Hashable
{
public int PK { get; set; }
public override int GetHashCode()
{
if (PK != 0) return PK.GetHashCode();
return base.GetHashCode();
}
public override bool Equals(object obj)
{
return Equals(obj as Hashable);
}
public virtual bool Equals(Hashable other)
{
if (other == null) return false;
else if (ReferenceEquals(this, other)) return true;
else if (PK != 0 && other.PK != 0) return …Run Code Online (Sandbox Code Playgroud) 当需要模型外部的信息以进行验证时,验证模型的好方法是什么?例如,请考虑以下模型:
public class Rating {
public string Comment { get; set; }
public int RatingLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,系统管理员可以设置RatingLevels需要注释的对象.这些设置可通过设置服务获得.
因此,为了完全验证模型,我需要外部信息,在这种情况下是设置服务.
到目前为止我考虑过以下几点:
哪种方法,无论上述与否,最适合此类验证问题?
XJC似乎完全忽略mixed="true"了我的XML Schema元素,因此不允许我提取文本内容.从下面的示例XML中,我需要能够提取"标题文本".如果没有mixed="true"被识别,就不会创建访问器,也不会从XML中解组:
<?xml version="1.0" encoding="UTF-8"?>
<title xmlns="urn:hl7-org:v3" integrityCheck="true">Title Text</title>
Run Code Online (Sandbox Code Playgroud)
这是一个完整但最小化的模式,用于演示此问题:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema targetNamespace="urn:hl7-org:v3"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:hl7-org:v3"
xmlns:mif="urn:hl7-org:v3/mif"
elementFormDefault="qualified">
<xs:complexType name="ST" mixed="true">
<xs:complexContent>
<xs:restriction base="ED">
<xs:sequence>
<xs:element name="reference" type="xs:string" minOccurs="0" maxOccurs="0"/>
<xs:element name="thumbnail" type="xs:string" minOccurs="0" maxOccurs="0"/>
</xs:sequence>
<xs:attribute name="compression" type="xs:string" use="prohibited"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ED" mixed="true">
<xs:complexContent>
<xs:extension base="BIN">
<xs:sequence>
<xs:element name="reference" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="thumbnail" minOccurs="0" maxOccurs="1" type="xs:string" />
</xs:sequence>
<xs:attribute name="compression" type="xs:string" use="optional" />
<xs:attribute name="integrityCheck" type="xs:string" use="optional" />
<xs:attribute …Run Code Online (Sandbox Code Playgroud) 我正在尝试确定在编写将要运行的测试时应该考虑的因素vstest.console.exe.
示例1:假设我有两个测试,它们都依赖于MyClass.Singleton.Counter零值.现在让我们说我们雇用一个新的实习生,在他写的测试中无意中增加了这个值.如果这个新测试在旧的两个单元测试之前运行.如果测试在同一个过程中运行(并且没有重置计数器值),那么这两个单元测试将失败.
示例2:假设我有两个集成测试,它们使用同一个DB.这两个测试都记录了DB中存在的计数器的值,递增计数器,然后从DB读取计数器,断言它的值比最初读取的值高1.如果这两个测试并行运行,我们就会遇到竞争条件.
最终目标是尝试理解开发人员在编写将在vstest.console.exe特定情况下运行的测试时应该记住的注意事项,它的执行模型是什么?
注意:我对最佳实践不感兴趣,只是了解vstest.console.exe影响测试结果的方式的执行模型.
project1.dll并且project2.dll传递给控制台,并且每个都依赖于依赖程序集的冲突版本,那么项目测试文件将如何成功执行?.runsettings指定文件或测试适配器时的默认行为是什么?(1)vstest.console.exe文档,/InIsolation指出它"在一个独立的进程中运行测试".
我将从上面推断出创建一个进程,其中传递给测试运行器的所有测试文件都将执行,但这可能不准确.
(2)vstest.console.exe可以在命令行上使用多个测试"文件",这些DLL可以引用不同目录中的不同项目.
(3)通过提供*.runsettings文件,可以使用测试适配器来执行测试.
处理需要在运行时只知道数据的对象时,例如用户名和密码,应该在哪里进行对象实例化:使用new,在工厂或在DI容器中?
例如,new一旦有了数据,我就可以只是一个对象:
UserCredentials creds =
new UserCredentials(dialog.getUsername(), dialog.getPassword());
Run Code Online (Sandbox Code Playgroud)
或者,我可以使用工厂:
UserCredentials creds =
CredentialsFactory.create(dialog.getUsername(), dialog.getPassword());
Run Code Online (Sandbox Code Playgroud)
或者,我可以在DI容器中使用提供程序(在这种情况下,它基本上是一个参数驱动的工厂).[省略示例代码.]
将DI容器用于如此简单的事情似乎都是错误的,但如果不充分利用它也似乎是错误的.
如果我像这样使用带有MigLayout的JTextArea:
MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]");
this.setLayout(thisLayout);
{
jLabel1 = new JLabel();
this.add(jLabel1, "cell 0 0");
jLabel1.setText("jLabel1");
}
{
jTextArea1 = new JTextArea();
this.add(jTextArea1, "cell 0 1 2 1,growx");
jTextArea1.setText("jTextArea1");
jTextArea1.setLineWrap(false);
}
Run Code Online (Sandbox Code Playgroud)
然后,当调整窗口大小时,JTextArea会完美地缩小和缩小.当我将linewrap设置为true时,当我再次缩小窗口时,JTextArea不会缩小.我非常感谢任何帮助.谢谢
马塞尔
.NET和Java都有大量可用的DI/IoC容器,每个容器都有许多模式,我发现这些模式在处理它们的各个方面非常有用.我现在正想在JavaScript中做同等的事情.由于JavaScript是一种动态语言,我不希望DI/IoC容器直接等同于静态类型语言中的容器提供的所有功能,因此欢迎使用这些模式的替代方案.我还希望JavaScript中提供的DI/IoC容器的功能会有所不同,因此对不同容器的引用非常受欢迎.
以下模式是Autofac 3支持的模式,我认为这些模式适用于动态语言.有关这些模式和关系的一般信息,请参阅 http://autofac.readthedocs.org/en/latest/resolve/relationships.html和 http://nblumhardt.com/2010/01/the-relationship-zoo/.以下概念中的大多数(如果不是全部)也可以使用其他语言和DI/IoC容器,例如Google Guice和Spring.
与JavaScript中下面描述的概念和模式最接近的等价物是什么?
在IoC容器可以创建类型的实例之前,它需要知道类型.这是通过注册完成的.注册通常以声明方式完成:
class A {}
var builder = new ContainerBuilder();
builder.RegisterType<A>();
Run Code Online (Sandbox Code Playgroud)
上面使IoC容器知道类型A.它通过反射发现A的依赖性.注册也可以通过充当工厂的功能进行.这些函数通常是lambdas,可以内联编写:
class B {}
class A {
A(string name, B b) { }
}
builder.RegisterType<B>();
builder.Register(c => // c is a reference to the created container
new A("-name-", c.Resolve<B>()));
Run Code Online (Sandbox Code Playgroud)
当您的类型需要使用不是服务的依赖项(例如上面示例中的名称)进行参数化时,能够提供工厂函数特别有用.
由于C#支持接口和抽象类,因此它通常不是重要的具体数据类型,而是它实现的抽象类型.在这些情况下,您将该类型注册为应该可用的接口或抽象类:
interface IPlugin {}
class P : IPlugin
builder.RegisterType<P>().As<IPlugin>();
Run Code Online (Sandbox Code Playgroud)
通过上面的注册,任何请求a的尝试P都会失败,但是对a的请求IPlugin会成功.
完成所有注册后,需要创建容器:
public class Program {
public …Run Code Online (Sandbox Code Playgroud) javascript c# dependency-injection inversion-of-control autofac
.net ×3
c# ×3
java ×2
autofac ×1
deprecated ×1
dictionary ×1
etw ×1
event-log ×1
execution ×1
factory ×1
getter ×1
hashcode ×1
immutability ×1
inputstream ×1
isolation ×1
javascript ×1
jaxb ×1
jtextarea ×1
miglayout ×1
mixed ×1
new-operator ×1
properties ×1
resharper ×1
setter ×1
string ×1
swing ×1
validation ×1
vstest ×1
xjc ×1
xml ×1