小编Ric*_*chK的帖子

没有'使用someNamespace'的var关键字

var即使您没有using在顶部包含必要的声明,Visual Studio/intellisense如何知道如何处理声明为的变量?

例如,我MyDomainObject在不同的命名空间中定义了类如果我没有using TheOtherNameSpace;在文件中声明,则以下代码将无法编译:

private void Foo()
{
   MyDomainObject myObj = new MyDomainObject(); 
   // Doesn't know what this class is
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用 var

var myObj = new MyDomainObject();
Run Code Online (Sandbox Code Playgroud)

这将编译,intellisense确切地知道我能用它做什么.

那么如何知道它的类型是什么using

(顺便说一句,如果它知道没有using,为什么我们需要usings?)

c# var using

3
推荐指数
2
解决办法
450
查看次数

GetHashCode应该取决于类型吗?

首先,我在这里使用所GetHashCode描述的算法.现在,想象下面的(人为的)示例:

class Foo
{
    public Foo(int intValue, double doubleValue)
    {
        this.IntValue = intValue;
        this.DoubleValue = doubleValue;
    }

    public int IntValue { get; private set; }
    public double DoubleValue { get; private set; }

    public override int GetHashCode()
    {
        unchecked
        {
            int hash = 17;

            hash = hash * 23 + IntValue.GetHashCode();
            hash = hash * 23 + DoubleValue.GetHashCode();
            return hash;
        }

    }
}

class DerivedFoo : Foo
{
    public DerivedFoo(int intValue, double doubleValue)
       : base(intValue, doubleValue) …
Run Code Online (Sandbox Code Playgroud)

c# inheritance gethashcode

3
推荐指数
1
解决办法
102
查看次数

为什么在setter之前定义getter(编码约定)

我很欣赏这个问题有点傻,所以如果这不是主题或非建设性的话,我会事先道歉.

为什么在C#中使用getter之前用getter定义属性是标准约定?对于具有这两者的属性,您几乎总是在getter之前使用setter,因此它处于有效状态.因此,我首先定义吸气剂似乎有些落后.

此外,setter通常会有一些验证逻辑,getter不需要.在吸气剂之前使用这个逻辑以使其更清楚地表明属性应该如何表现是不是更整洁.例如:

public decimal Price
{
    get { return _price; }
    set
    {
        if(value < 0m)
        {
            throw new ArgumentOutOfRangeException();
        }

        _price = value;
        OnPropertyChanged("Price");
    }
}
Run Code Online (Sandbox Code Playgroud)

setter中的代码比getter更有趣,如果它不优先并且首先定义?

*我知道这些东西没有规则,但实际上每个例子都有,属性在setter之前定义了getter.

c# coding-style properties conventions

3
推荐指数
2
解决办法
1203
查看次数

解析字符串以产生谓词

我需要解析一个字符串并生成一个谓词(或表达式,我不打扰),其中字符串采用以下形式:

"> 30"

我宁愿不写我自己的,有一些库做这样的东西 - 我试过FLEE和NCalc,但他们似乎要求字符串采用"a> 30"的形式,并提供'a'的值作为一个参数.

有没有一个图书馆可以让我写一些类似的东西

Func<int, bool> predicate = parser.Parse("> 30");

bool a = predicate(10); // false
bool b = predicate(40); // true
Run Code Online (Sandbox Code Playgroud)

我需要像<,>,=等运算符,并支持OR和AND.这不仅仅是我正在使用的数字,字符串和枚举也在混合中.

c# parsing expression

3
推荐指数
1
解决办法
3216
查看次数

在NUnit中覆盖ToString而无需访问源代码

我有一个类,Foo来自第三方库,我使用NUnit检查与另一个实例的相等性,

Assert.AreEqual(foo1, foo2);
Run Code Online (Sandbox Code Playgroud)

当对象不同时,我得到预期的失败,

Expected: Foo
But was: Foo
Run Code Online (Sandbox Code Playgroud)

但错误消息不是很有帮助.我知道NUnit ToString用来显示错误信息,但我不能在这里覆盖它.

NUnit是否提供API来覆盖此行为,以便我可以提供自己的ToString实现?我在API Assert.AreEqualAssert.ThatAPI 上看不到任何东西

c# nunit

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

如何表示可能未设置的数据

我有一个包含许多属性的类,如:

public class Update
{
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

每个实例Update不一定具有每个属性集,并且系统的另一部分需要知道哪些已经设置,哪些没有.

我得到的一个选择是制作所有的值类型Nullable,因此null值将代表未设置的概念.虽然这可行,但我并不喜欢明确地拥有一些属性Nullable(值类型)和一些可以作为引用类型的可空的想法.类定义看起来很难看,我不相信null检查在语义上是最好的方法.

我可以创建一个类非常相似,Nullable<T>这对没有约束TIsSet性能.我更喜欢使用此选项Nullable,但我仍然希望看到是否有人有一个比我建议的选项更好的替代表示.

c# nullable data-representation

2
推荐指数
1
解决办法
83
查看次数