小编JSB*_*ոգչ的帖子

使用IDisposable检查约束 - 疯狂还是天才?

我在今天工作的代码库中遇到了一个模式,最初看起来非常聪明,后来让我疯了,现在我想知道是否有办法拯救聪明的部分,同时尽量减少疯狂.

我们有一堆实现的对象IContractObject,以及一个如下所示的类InvariantChecker:

internal class InvariantChecker : IDisposable
{
    private IContractObject obj;

    public InvariantChecker(IContractObject obj)
    {
        this.obj = obj;
    }

    public void Dispose()
    {
        if (!obj.CheckInvariants())
        {
            throw new ContractViolatedException();
        }
    }
}

internal class Foo : IContractObject
{
    private int DoWork()
    {
        using (new InvariantChecker(this))
        {
            // do some stuff
        }
        // when the Dispose() method is called here, we'll throw if the work we
        // did invalidated our state somehow
    }
}
Run Code Online (Sandbox Code Playgroud)

这用于提供状态一致性的相对无痛的运行时验证.我没有写这个,但它最初似乎是一个非常酷的主意.

但是,如果Foo.DoWork …

c# idisposable exception

6
推荐指数
3
解决办法
299
查看次数

Date对象与DateTime对象

我目前正在查看日期和日期时间对象的msdn页面.我也打开了反射器,看起来日期和日期时间对象只是引用了日期结构.为什么我们有两个引用相同结构的对象?它们之间有什么区别?

.net c# datetime

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

指向多个表之一的外键约束

我有一个表,其中一列source_id的值应为另一张表的主键,尽管它在哪张表中因记录而异。每个记录必须具有一个用于source_table指定源记录表的值,以及一个用于source_id指定源表中的行的值。

有什么方法可以利用数据库的外键约束和验证来完成此任务?还是我必须将验证逻辑移到应用程序层?或者,是否有另一种设计可以让我避免这个问题?

sql sqlite foreign-keys polymorphic-associations

5
推荐指数
1
解决办法
876
查看次数

WinDbg .for循环

我无法让WinDbg .for命令工作.

我想转储一系列c ++结构.

?? gpTranData->mpApplCodes[0] 适用于单个条目,但我想循环使用其中的一个.

.for ($t0=0;$t0<(gpTranData->miApplCodeCount);$t0++){ ?? &gpTranData->mpApplCodes[$t0] }
Run Code Online (Sandbox Code Playgroud)

对我来说合乎逻辑但是我明白了

Numeric expression missing from '>miApplCodeCount);$t0++){ ?? &gpTranData->m_pApplCodes[$t0] }'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

斯科特

windbg

4
推荐指数
1
解决办法
5014
查看次数

基于段落的差异计划?

有没有人知道差异查看器或比较程序可以做基于段落的差异?我的repos有大量的LaTeX文件格式化为80个字符宽的段落(便于用vim编辑).目前很难解释各种版本之间的差异,因为导致换行位置的任何编辑都会导致差异中出现很多虚假差异.

diff latex paragraph

4
推荐指数
1
解决办法
864
查看次数

使用类成员静态初始化结构

我有一个用大量香草char*指针定义的结构,但也是一个对象成员.当我尝试静态初始化这样的结构时,我得到编译器错误.

typedef struct 
{
    const char* pszA;
    // ... snip ...
    const char* pszZ;

    SomeObject obj;
} example_struct;

// I only want to assign the first few members, the rest should be default
example_struct ex = { "a", "b" };
Run Code Online (Sandbox Code Playgroud)

SomeObject有一个没有参数的公共默认构造函数,所以我不认为这会是一个问题.但是当我尝试编译它(使用VS)时,我收到以下错误:

error C2248: 'SomeObject::SomeObject' : cannot access private member declared in class 'SomeObject'
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

更新:这是SomeObject的定义

class SomeObject
{
    void operator=(const SomeObject&);
    SomeObject(const SomeObject&);
public:
    SomeObject()
        {
            // etc
        }

    // members snipped
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor struct static-initializer

4
推荐指数
1
解决办法
999
查看次数

Firefox 3.5的CSS渐变

我想要完成的是仅使用css创建一个渐变...我正在做的所有浏览器除了firefox 3.5之外...这里是代码:

 #gradient {
      color: #fff;
      height:50px;
      padding:0;
      width:940px;
      margin:0 auto;            
      background: -moz-linear-gradient(top, #CFE782 0%, #9BCB2A 2%,#5DA331 97%, #659635 100%);/* For Mozilla/Gecko (Firefox etc) */
 }
Run Code Online (Sandbox Code Playgroud)

我省略了其他浏览器的背景......所以这是我的问题......

有谁知道为什么这不适用于Firefox 3.5和什么工作???

firefox gradient css3

4
推荐指数
1
解决办法
906
查看次数

在对象之间共享引用

我想让多个对象通过私有字段共享一个引用,这样任何对象都可以分配给该字段,并且更新的字段将被共享该引用的其他对象看到。我最初希望做的是:

class SomeObject
{
    private ref DataObject _data;
    public SomeObject(ref DataObject data)
    {
         _data = ref data; // or something similar
    }

    public ChangeData(DataObject newData)
    {
         _data = data;
         // at this point, *other* SomeObject instances that were
         // created with the same reference should also have _data == newData
    }
}
Run Code Online (Sandbox Code Playgroud)

但当然你不能这样使用refref仅用于方法参数。静态字段不起作用,因为并非所有 SomeObject实例都应该引用同一个对象——而是应该在构造函数中设置有问题的对象。

显然我可以通过添加一个简单的包装类来解决这个问题。但是有更好的方法吗?SharedReference<T>我可以使用某种课程吗?

更新,因为大多数答案都误解了我的要求。我知道_data字段包含一个参考原来的DataObject。我想要的是另一个层次的间接性。我希望能够在一个实例中更改我指向的对象,并让使用相同引用创建的其他实例获取新值。正如更新后的代码示例所示,我想分配给_data,并_data在其他实例中有效地更改 的值。

c# reference

4
推荐指数
1
解决办法
1852
查看次数

Vim正确显示wchar文本

我正在尝试将没有BOM的文件保存为wchar文本.在我的gVim窗口中,我看到:

T^@E^@X^@T^@H^@E^@R^@
Run Code Online (Sandbox Code Playgroud)

......这真烦人.我想将此文件编辑为常规文本文档,我希望vim以相同的格式保存它.我试着做:set encoding=utf-16(和如其他变化utf-16le,ucs-2以及ucs-2le,但文档视图不会改变.我怎样才能做到这一点?

vim encoding

4
推荐指数
1
解决办法
384
查看次数

比较C中的文字空字符串

在C中,以下指定的内容是做什么的?

if ("" == "")
{
    printf("Empty strings are equal\n");
}
Run Code Online (Sandbox Code Playgroud)

我手头有一个编译器告诉我""确实等于"".但这种平等是否得到保障?

编辑:我完全理解指针比较和字符串比较在C中是如何工作的.我要问的是在C标准中为编译时常量空字符串指定了什么行为(如果有的话).我的信念是,字符串不能保证相等,但实际上通常是相同的,因为所有const空字符串都将被固定到同一地址.但我想知道是否有人可以提供明确的参考

c string-comparison

4
推荐指数
2
解决办法
150
查看次数