我只是想知道,因为密封关键字的存在表明它是类作者关于是否允许其他类继承它的决定,为什么默认情况下没有类密封,有一些关键字将它们显式标记为可扩展?
我知道它有些不同,但访问修饰符以这种方式工作.默认情况下是限制性的,只有通过插入关键字才能获得更全面的访问权限.
尽管如此,我很有可能没有想到这一点,所以请保持人性化!
据我所知,C#中没有直接的等价物.我目前的想法是使用带有自定义IEqualityComparer的Dictionary,它检查引用相等性.
但是,这似乎失去了散列所带来的优势.有没有办法从每个不同的对象中获取单个哈希码?或者这是不可能的,我应该使用其他方法?
我想知道是否有可能使用singleton作为comparerObject,例如Distinct?
假设我有一个元素列表,我需要在该列表中使用不同的函数.通常我会这样做
var result = list.Distinct(new ListElementComparer);
Run Code Online (Sandbox Code Playgroud)
ListElementComparer是一个实现IEqualityComparer接口的类.但是,让我们假设我将经常使用上面提到的代码,例如这种方式.
List<List<Element>> elementList = new List<List<Elements>>();
List<List<Element>> resultList new List<List<Element>>();
foreach(var element in elementList )
resultList.AddRange(element.Distinct(new ListElementComparer() ) );
Run Code Online (Sandbox Code Playgroud)
因此,您可以创建很多次ListElementComparer的对象.在这种情况下,在每次迭代中使用单线程创建ListElementComparer是否有任何意义?如果我使用singleton,那么distinct方法会起作用吗?
我正在尝试构建一个字典,其中键是值对象的属性。但是我想在字典的 add 方法中构造值对象。有没有办法在不使用中间变量的情况下做到这一点?
例如,我想执行以下操作,但当然在需要时键值不可用。
Dictionary<int,SomeComplexObject> dict = new Dicionary<int,SomeComplexObject>{
{someComplexObject.Key, new SomeComplexObject {Key = 1, Name = "FooBar"},
{someComplexObject.Key, new SomeComplexObject {Key = 2, Name = "FizzBang"}
};
Run Code Online (Sandbox Code Playgroud)
我是否必须以这种丑陋的方式做到这一点:
Dictionary<int,SomeComplexObject> dict = new Dicionary<int,SomeComplexObject>();
SomeComplexObject value1 = new SomeComplexObject{Key=1,Name = "FooBar"};
dict.Add(value1.Key,value1);
SomeComplexObject value2 = new SomeComplexObject{Key=2,Name = "FizzBang"};
dict.Add(value.Key,value2);
Run Code Online (Sandbox Code Playgroud)
我不认为这与How to use an object's identity as key for Dictionary<K,V>是同一个问题
因为我不是专门询问字典的键,而是在稍后在方法参数列表中创建对象时,是否有办法访问对象属性。