jjzjj

C# - 如何为 IComparable<T> 类实现多个比较器?

我有一个实现IComparable的类。publicclassMyClass:IComparable{publicintCompareTo(MyClassc){returnthis.whatever.CompareTo(c.whatever);}etc..}然后我可以调用类的泛型列表的排序方法Listc=newList();//Addstuff,etc.c.Sort();并根据我的比较器对列表进行排序。如何根据MyClass的其他属性指定更多比较器以不同方式对我的集合进行排序,以便让用户以多种不同方式对我的集合进行排序? 最佳答案

c# - 按属性排序列表,然后按另一个属性排序

我有一个包含两个数据点的示例类:publicenumSort{First,Second,Third,Fourth}publicclassMyClass{publicMyClass(Sortsort,stringname){this.Sort=sort;this.Name=name;}publicSortSort{get;set;}publicstringName{get;set;}}我希望通过它们的Sort属性将它们分类,然后按字母顺序排列这些组。Listlist=newList(){newMyClass(MyClass.Sort.Third,"B"),newMyClass(MyCla

c# - 为什么要使用 Create 方法而不是使用 "new"?

有什么优点,什么时候适合使用静态构造函数?publicclassMyClass{protectedMyClass(){}publicstaticMyClassCreate(){returnnewMyClass();}}然后通过创建类的实例MyClassmyClass=MyClass.Create();与仅拥有公共(public)构造函数并使用创建对象相反MyClassmyClass=newMyClass();如果Create方法返回类实现的接口(interface)实例,我可以看到第一种方法很有用……它将强制调用者创建接口(interface)实例而不是特定类型。

c# - 为什么我必须定义一个交换运算符两次?

我想知道我是否必须定义一个交换运算符(如*)两次!publicstaticMyClassoperator*(inti,MyClassm){returnnewMyClass(i*m.Value);}publicstaticMyClassoperator*(MyClassm,inti){returnnewMyClass(m.Value*i);}这背后的逻辑是什么?附加说明:亲爱的@Marc关于向量和矩阵乘法的回答很好当且仅当我们假设操作数类型不同时!!!很明显,我们只能定义一次*运算符来执行向量或矩阵乘法。所以我认为这不是答案。@Marc:Orderissometimesimportant

c# - 向 IntelliSense 提供不应修改分部类的提示

最近我使用了很多代码生成,通常与部分类结合使用。基本上设置如下:包含生成代码的部分类。此代码的某些部分将调用部分方法。代码重新生成了很多时间。代码生成器在某些情况下是自定义工具。部分方法在单独的文件中手动实现。问题是,当我使用诸如“生成方法”之类的Intellisense功能时,出于某种原因,它们是在包含生成代码的文件中生成的。显然我不希望这样。我的问题是:是否可以生成一些提示,告诉Intellisense它不应该触及某些“cs”文件(而是其他部分类)?更新回想起来,我应该注意到我正在使用自定义工具来生成代码。它不是EF或简单的转换;代码生成涉及相当多的逻辑。此外,它还生成带有部分类的

c# - 无法使用 Json.NET 反序列化具有多个构造函数的类

这个问题在这里已经有了答案:JSON.net:howtodeserializewithoutusingthedefaultconstructor?(6个答案)关闭6年前。我有一个我不能用多个构造函数控制的类型,等同于这个:publicclassMyClass{privatereadonlystring_property;privateMyClass(){Console.WriteLine("Wedon'twantthisonetobecalled.");}publicMyClass(stringproperty){_property=property;}publicMyClass(ob

c# - c#如何计算出对象的哈希码?

这个问题来自关于tuples的讨论。.我开始思考一个元组应该有的哈希码。如果我们将KeyValuePair类作为元组接受怎么办?它不会覆盖GetHashCode()方法,因此它可能不会知道它的“子代”的哈希码...因此,运行时将调用Object.GetHashCode(),它不知道真实对象结构。然后我们可以创建一些引用类型的两个实例,它们实际上是相等的,因为重载了GetHashCode()和Equals()。并将它们作为元组中的“child”来“欺骗”字典。但是没用!运行时以某种方式计算出我们元组的结构并调用我们类的重载GetHashCode!它是如何工作的?Object.GetHas

c# - 抽象类列表

我有抽象类:publicabstractclassMyClass{publicabstractstringnazwa{get;}}还有两个继承自MyClass的类:publicclassMyClass1:MyClass{publicoverridestringnazwa{get{return"aaa";}}}publicclassMyClass2:MyClass{publicoverridestringnazwa{get{return"bbb";}}}在另一个类中我创建了列表:ListmyList;现在我要创作myList=newList;编译器显示错误:Cannotimplicitl

c# - C# 中的空合并运算符 (??) 是线程安全的吗?

以下代码中是否存在可能导致NullReferenceException的竞争条件?--或--Callback变量是否可以在null合并运算符检查null值之后但在调用函数之前设置为null?classMyClass{publicActionCallback{get;set;}publicvoidDoCallback(){(Callback??newAction(()=>{}))();}}编辑这是出于好奇而提出的问题。我通常不会这样编码。我不担心Callback变量变得陈旧。我担心DoCallback会抛出Exception。编辑#2这是我的类(class):classMyClass{A

c# - 如何将类的属性作为字符串加入?

“我有一个包含属性“CustomizationName”的对象列表。我想用逗号连接该属性的值,即;像这样:Listmyclasslist=newList();myclasslist.Add(newMyClass{CustomizationName="foo";});myclasslist.Add(newMyClass{CustomizationName="bar";});stringfoo=myclasslist.Join(",",x=>x.CustomizationName);Console.WriteLine(foo);//outputs'foo,bar'