小编Eri*_*ert的帖子

断言中的逻辑运算符是否可以接受?

您如何看待以下断言?

Assert.IsTrue(condition1 && condition2);
Run Code Online (Sandbox Code Playgroud)

我在审查会议期间想出了这种类型的断言.据我所知,在断言中使用&&运算符不是一个好习惯.我想知道其他人的想法?值得一提的是,这是下一次审查会议期间的问题吗?或者这仅仅是个人偏好?

c# tdd nunit unit-testing

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

私有构造函数获取空私有静态只读字符串

我有以下代码.这不是我使用的确切代码,因为它是我工作地点的内部,但它是我遇到的场景的代表.

public class Service : ServiceBase
{

    private static readonly Service _instance = new Service();

    private static readonly string a = @"D:\test.txt";

    private Service () : base()
    {
        // the value stored in "a" is always blank.
        Console.Writeline(a);
    }

    static void Main(string[] args)
    {
        Run(_instance);
    }

}
Run Code Online (Sandbox Code Playgroud)

此代码是一个Windows服务(基类中有特定于服务的代码).由于某种原因,存储在"a"中的值在构造函数中始终为空.有没有明显的东西在做这个,或者它是.NET平台中的怪癖?

.net c#

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

C#:在按位枚举中获得最低值的键

我有这样的枚举

[Flags]
public enum Key
{
  None = 0,
  A = 1,
  B = 2,
  C = 4
}
Run Code Online (Sandbox Code Playgroud)

我有以下内容

Key k1 = Key.A | Key.B | Key.C;
Run Code Online (Sandbox Code Playgroud)

我想得到k1中具有最低值的键.我怎样才能做到这一点?

例:

Key k1 = Key.A | Key.B | Key.C; // I want a 
Key k2 = Key.B | Key.C; // I want b
Key k3 = Key.A | Key.C; // I want a
Run Code Online (Sandbox Code Playgroud)

c# enums bitwise-operators

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

这个内部类静态范围魔法如何工作?

public class Outer
{
    public  class Inner
    {
        public static string OtherValue { get { return SomeValue; } }
    }

    public static string SomeValue { get { return "Outer"; } }
}
Run Code Online (Sandbox Code Playgroud)

为什么以上编译?SomeValue是否超出内部范围且需要符合资格Outer.SomeValue?上面的内容与下面的内容基本相同(不会编译)?

public class Outer
{
    public class Inner
    {
        public static string OtherValue { get { return Outer.SomeValue; } }
    }

    public static string SomeValue { get { return "Outer"; } }
}
Run Code Online (Sandbox Code Playgroud)

static这里有什么魔力?

c# static scope

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

Lambda表达式中的赋值

我想定义一些lambda表达式来表示类实例属性的更新。

我试着写如下:

Expression<Action<User>> update = user => user.Name = "Joe Foo";
Run Code Online (Sandbox Code Playgroud)

但是我有一个编译错误:

错误CS0832表达式树可能不包含赋值运算符。

如何用lambda表示此更新。

编辑

我的目标是使业务服务将更新发送到通用存储库。该存储库可以分析lambda的表达式以构建查询以发送到数据库引擎。

商业服务的示例可以是:

Expression<Action<User>> update = user => user.Name = "Joe Foo";
Run Code Online (Sandbox Code Playgroud)

c#

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

访问静态变量问题的模板方法

假设我有两个包含静态变量XmlTag的类.第二个类继承自第一个类.我有一个模板方法,需要根据它使用的类型获取XmlTag.无需创建该类型的实例,最好的方法是什么?这是一个例子(不会编译),应该有希望说明我在说什么.

class A{
public static readonly string XmlTag = "AClass";
}

class B : A {
public static readonly string XmlTag = "BClass";
}
Run Code Online (Sandbox Code Playgroud)

此方法当前无效.显然无法从类型参数访问静态变量.

string GetName<T>(T AClass) where T : A
{
    return T.XmlTag;
}
Run Code Online (Sandbox Code Playgroud)

.net c#

0
推荐指数
1
解决办法
369
查看次数

如何确保2点之间的通信不被篡改?

我有一个在客户端运行的应用程序,此应用程序向/从远程服务器发送和接收数据.

有什么方法可以保证发送到服务器的数据真的来自允许的应用程序?

当然我可以加密数据,但由于它可以被反编译,它不会使它100%安全.

我们正在使用.net/c#.

谢谢!

.net c# communication

0
推荐指数
1
解决办法
316
查看次数

使用LINQ加入HashSet <T>需要帮助理解意外行为

我使用C#HastSet和LINQ的Join方法遇到了一些奇怪的行为,我不明白.我已经简化了我正在做的事情,以帮助专注于我所看到的行为.

我有以下内容:

 private HashSet<MyClass> _mySet; // module level

 IEnumerable<ISearchKey> searchKeys; // parameter.
 // Partial key searches are allowed.

 private IEqualityComparer<ICoreKey> _coreKeyComparer; // Module level.
 // Compares instances of MyClass and ISearchKey to determine 
 // if they match.
Run Code Online (Sandbox Code Playgroud)

鉴于

  1. searchKeys和_mySet之间存在1对多的关系.
  2. MyClass实现接口IPartialKey和ICoreKey.
  3. ISearchKey继承自IPartialKey和ICoreKey.
  4. MyClass和ISearchKey实例都覆盖了GetHashCode方法.
  5. MyClass的哈希码值基于其完整键值,包括其ICoreKey和IPartialKey值以及其他字段.
  6. MyClass使用的完整密钥不是唯一的.两个不同的MyClass实例可以具有相同的哈希码.
  7. ISearchKey的哈希码值仅基于其ICoreKey和IPartialKey值.即,ISearchKey哈希码可能与匹配的MyClass实例的哈希码不同.(旁注:在我第一次遇到问题的情况下,ISearchKey的IPartialKey值与MyClass完整键匹配,因此GetHashCode方法将为ISearchKey和MyClass返回相同的值.我包含额外的复杂性以更好地说明基础逻辑我正在做什么.)
  8. _coreKeyComparer.GetHashCode方法仅使用其ICoreKey值返回匹配ISearchKey和MyClass实例的相同值.
  9. _coreKeyComparer.Equals方法将参数分别转换为MyClass和ISearchKey,如果它们的IPartialKey值匹配则返回true.(旁注:_coreKeyComparer已经过严格测试并且工作正常.)

我预计两个集合之间的连接应该会产生如下结果:

{searchKey_a, myClass_a1},
{searchKey_a, myClass_a2},
{searchKey_a, myClass_a3},
{searchKey_b, myClass_b1},
{searchKey_b, myClass_b2},
{searchKey_c, myClass_c1},
{searchKey_c, myClass_c2},
{searchKey_c, myClass_c3},
{searchKey_c, myClass_c4},
etc....
Run Code Online (Sandbox Code Playgroud)

ie同一个ISearchKey实例会多次出现,一次为它所连接的每个匹配的MyClass实例.

但是当我从searchKeys到_mySet的连接时:

        var matchedPairs = searchKeys
          .Join(
            _mySet,
            searchKey => searchKey,
            myClass => …
Run Code Online (Sandbox Code Playgroud)

c# linq join inner-join hashset

0
推荐指数
1
解决办法
326
查看次数

C#不变性和平等

我正在尝试创建和使用只有不可变类,其中所有字段都是只读不可变类型,尽管可能有其他字段是可变的并且不被认为是对象状态的一部分(主要是缓存的哈希码).

在实现IEquatable时,我会像对非不可变对象一样

也就是说,

public bool Equals(MyImmutableType o) => 
  object.Equals(this.x, o.x) && object.Equals(this.y, o.y);
Run Code Online (Sandbox Code Playgroud)

现在这是不可变的,这似乎是低效的,对象永远不会改变,如果我可以计算并存储一些独特的指纹,我可以简单地比较指纹而不是整个字段(可以称之为自己的Equals等).

我想知道什么是一个很好的解决方案呢?将BinaryFormatter+ MD5值得探索?

c#

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

自变异只读结构域

我知道Eric Lippert关于情况的博客文章, 但我认为这是一个不同的情况,因为该领域自我而不是其领域.如果Enumerator只是readonly没有显示任何效果并且输出始终为0,你怎么解释调用MoveNext()?

 class SomeClass
    {
        private List<int> list;
        private [readonly] List<int>.Enumerator enumerator;

        public SomeClass()
        {
            list = new List<int>() { 1, 2, 3 };
            enumerator = list.GetEnumerator();
        }

        public int ReadValue()
        {
            if (enumerator.MoveNext())
                return enumerator.Current;
            return -1;

        }
    }
static void Main()
    {
        SomeClass c = new SomeClass();
        int value;
        while ((value = c.ReadValue()) > -1)
            MessageBox.Show(value.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

c# struct readonly

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

指向指针数组和指针数组的指针之间的区别

之间是什么不同int **pint *p2[5]在第一种情况下p是一个指针,指向指针的数组,我将在以后定义!但也P2指向指针的数组!!!!. int *p2[5]是一样的int p2[5];.因为在这两种情况下p2都是指针!有什么不同?

c c++

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

什么是矩阵追踪?

下面给出的是英语词典中排列为矩阵的单词

MATHE
ATHEM
THEMA
HEMAT
EMATI
MATIC
ATICS
Run Code Online (Sandbox Code Playgroud)

跟踪矩阵从左上角开始,每步向右或向下移动,到达矩阵的右下角.确保任何此类跟踪都生成相同的单词.对于长度为m + n-1的给定单词写成大小为m*n的矩阵,可以有多少这样的跟踪?

输入格式第一行输入包含一个整数T.每行都有T个测试用例.每行包含2个空格分隔的整数m和n,表示写入的矩阵有m行,每行有n个字符.

约束:

1 <= T <= 103
1 ? m,n ? 106
Run Code Online (Sandbox Code Playgroud)

输出格式打印可以跟踪单词的方式(S)的数量,如问题陈述中所述.如果数字大于10,则为9 +7,请打印S mod(10 rest to power 9 +7)

样本输入

1
2 3
Run Code Online (Sandbox Code Playgroud)

样本输出

3
Run Code Online (Sandbox Code Playgroud)

解释让我们考虑写为矩阵的单词AWAY

AWA
WAY
Run Code Online (Sandbox Code Playgroud)

在这里,矩阵中的单词AWAY可以用3种不同的方式跟踪,遍历RIGHT或DOWN.

AWA
  Y

AW
 AY

A
WAY
Run Code Online (Sandbox Code Playgroud)

algorithm matrix

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