小编Kal*_*son的帖子

在Resharper 5中为C#分配建议之前的冗余条件检查

以下示例中的条件检查是否真的多余?:

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#中有类似的事情吗?

c# resharper getter setter properties

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

非弃用的StringBufferInputStream等价物

我正在使用LogManager.readConfiguration()它需要一个InputStream,其内容我想来自一个字符串.是否存在相应StringBufferInputStream的不被弃用的内容,例如ReaderToInputStreamAdaptor

java string inputstream deprecated

13
推荐指数
3
解决办法
8530
查看次数

为什么使用ETW而不是EventLog,反之亦然?

为什么我应该使用事件跟踪Windows(ETW)而不是标准的.NET EventLog类,反之亦然?知道我们将使用相当多的性能计数器会影响决策吗?

到目前为止我所知道的:

  1. ETW应该表现得更好.
  2. ETW要集成更多的工作(例如Windows的.NET事件跟踪)
  3. 通过选择ETW中的一个标准通道(例如,应用程序,系统),事件日志中提供了相同的信息.

.net etw event-log

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

字典是否被破坏或GetHashCode()仅基于不可变成员?

将对象添加到.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)

.net c# dictionary hashcode immutability

12
推荐指数
2
解决办法
1782
查看次数

ASP.NET MVC 3:在需要模型外部信息时验证模型

当需要模型外部的信息以进行验证时,验证模型的好方法是什么?例如,请考虑以下模型:

public class Rating {
    public string Comment { get; set; }
    public int RatingLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,系统管理员可以设置RatingLevels需要注释的对象.这些设置可通过设置服务获得.

因此,为了完全验证模型,我需要外部信息,在这种情况下是设置服务.

到目前为止我考虑过以下几点:

  1. 将服务注入模型.DefaultModelBinder使用System.Activator创建对象,因此它不经过正常的依赖解析器,并不会产生一个新的模型绑定(我不能注入服务到模型中,除了这,不觉得自己是正确的如何去做).
  2. 将服务注入注释.我还不确定这是可能的,但很快就会进行调查.它仍然感觉笨拙.
  3. 使用自定义模型绑定器.显然我可以实现OnPropertyValidating来进行自定义属性验证.到目前为止,这似乎是最优选的,但我还不确定如何做到这一点.

哪种方法,无论上述与否,最适合此类验证问题?

validation asp.net-mvc-3

11
推荐指数
2
解决办法
4182
查看次数

JAXB XJC编译器忽略XML Schema文档中的mixed = true

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)

xml mixed jaxb xjc

10
推荐指数
2
解决办法
4103
查看次数

vstest.console.exe执行模型和隔离行为

我正在尝试确定在编写将要运行的测试时应该考虑的因素vstest.console.exe.

示例1:假设我有两个测试,它们都依赖于MyClass.Singleton.Counter零值.现在让我们说我们雇用一个新的实习生,在他写的测试中无意中增加了这个值.如果这个新测试在旧的两个单元测试之前运行.如果测试在同一个过程中运行(并且没有重置计数器值),那么这两个单元测试将失败.

示例2:假设我有两个集成测试,它们使用同一个DB.这两个测试都记录了DB中存在的计数器的值,递增计数器,然后从DB读取计数器,断言它的值比最初读取的值高1.如果这两个测试并行运行,我们就会遇到竞争条件.

最终目标是尝试理解开发人员在编写将在vstest.console.exe特定情况下运行的测试时应该记住的注意事项,它的执行模型是什么?

注意:我对最佳实践不感兴趣,只是了解vstest.console.exe影响测试结果的方式的执行模型.

相关注意事项:

  1. 如果project1.dll并且project2.dll传递给控制台,并且每个都依赖于依赖程序集的冲突版本,那么项目测试文件将如何成功执行?
  2. 每个测试文件(即dll)都有自己的进程吗?
  3. 每个测试文件(即dll)是否在单个进程中给出了自己的AppDomain?
  4. 每个测试文件执行的当前工作目录是什么?
  5. 测试是连续执行还是并行执行?
  6. 测试执行顺序是否确定?
  7. 不同的测试适配器对相关行为有多少控制?
  8. 没有.runsettings指定文件或测试适配器时的默认行为是什么?

相关背景资料:

(1)vstest.console.exe文档,/InIsolation指出它"在一个独立的进程中运行测试".

我将从上面推断出创建一个进程,其中传递给测试运行器的所有测试文件都将执行,但这可能不准确.

(2)vstest.console.exe可以在命令行上使用多个测试"文件",这些DLL可以引用不同目录中的不同项目.

(3)通过提供*.runsettings文件,可以使用测试适配器来执行测试.

.net execution isolation vstest vstest.console.exe

10
推荐指数
0
解决办法
927
查看次数

DI容器,工厂或新的短暂物体?

处理需要在运行时只知道数据的对象时,例如用户名和密码,应该在哪里进行对象实例化:使用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容器用于如此简单的事情似乎都是错误的,但如果不充分利用它也似乎是错误的.

factory dependency-injection new-operator

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

与linewrap = true一起使用时,MigLayout JTextArea不会缩小

如果我像这样使用带有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不会缩小.我非常感谢任何帮助.谢谢

马塞尔

java swing jtextarea miglayout

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

JavaScript DI/IoC与静态类型语言的标准DI模式等效

.NET和Java都有大量可用的DI/IoC容器,每个容器都有许多模式,我发现这些模式在处理它们的各个方面非常有用.我现在正想在JavaScript中做同等的事情.由于JavaScript是一种动态语言,我不希望DI/IoC容器直接等同于静态类型语言中的容器提供的所有功能,因此欢迎使用这些模式的替代方案.我还希望JavaScript中提供的DI/IoC容器的功能会有所不同,因此对不同容器的引用非常受欢迎.

以下模式是Autofac 3支持的模式,我认为这些模式适用于动态语言.有关这些模式和关系的一般信息,请参阅 http://autofac.readthedocs.org/en/latest/resolve/relationships.htmlhttp://nblumhardt.com/2010/01/the-relationship-zoo/.以下概念中的大多数(如果不是全部)也可以使用其他语言和DI/IoC容器,例如Google GuiceSpring.

与JavaScript中下面描述的概念和模式最接近的等价物是什么?

一般概念

概念1:向IoC容器注册

在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会成功.

概念2:容器创建和组合根

完成所有注册后,需要创建容器:

public class Program {
    public …
Run Code Online (Sandbox Code Playgroud)

javascript c# dependency-injection inversion-of-control autofac

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