C# 为什么-9被认为大于1?
我拥有的数据集是:C# 为什么-9被认为大于1?,c#,linq,C#,Linq,我拥有的数据集是: Name Order ID Summary 1 147 Software Functionality -9 211 我有一个LINQ查询: string value = projectA.OrderByDescending(a => a.Order) .ThenBy(a
Name Order ID
Summary 1 147
Software Functionality -9 211
我有一个LINQ查询:
string value = projectA.OrderByDescending(a => a.Order)
.ThenBy(a => a.Name)
.ToList()
.First()
.ID
.ToString();
我得到的答案是211,但我认为答案应该是147。为什么会发生这种情况
注意:
Order
字段的类型为string
我试图重建您的问题。以下是我的代码(LinqPad),它可以正常工作:
void Main()
{
List<ProgramA> progs = new List<ProgramA>{
new ProgramA("Summary", 1, 147),
new ProgramA("Software Functionality", -9, 211)
};
int value= progs.OrderByDescending(a => a.Order).ThenBy(a => a.Name).ToList().First().ID;
value.Dump();
}
// Define other methods and classes here
class ProgramA
{
private string sName = string.Empty;
private int iOrder = 0;
private int iID = 0;
public ProgramA(string _Name, int _Order, int _ID)
{
sName = _Name;
iOrder = _Order;
iID = _ID;
}
public string Name
{
get {return sName;}
set {sName = value;}
}
public int Order
{
get {return iOrder;}
set {iOrder = value;}
}
public int ID
{
get {return iID;}
set {iID = value;}
}
}
因为您的
订单
是一个字符串
,所以您得到了所拥有的输出。作为证明,此示例将显示,当它是整数时,您将获得正确的输出:
void Main()
{
var list = new List<Project>() { new Project() { Order = 1, Id = 147, Name = "Summary" }, new Project() { Order = -9, Id = 211, Name = "Software Functionality" } };
int value= list.OrderByDescending(a => a.Order).ThenBy(a => a.Name).ToList().First().Id;
Console.WriteLine (value);
}
public class Project
{
public int Order {get;set;}
public int Id {get;set;}
public string Name {get;set;}
}
可以用作
new[] {"1", "-9"}.OrderByDescending(x => x, new CustomComparer())
string value=projectA.OrderByDescending(a=>a.Order).ThenBy(a=>a.Name).ToList().First().ID.ToString() OrderByDescending=>Orders 产出——9,1 选择第一个元素
- 9 = 211. 逻辑是正确的
Order
是数字类型还是字符串类型?我认为这并不重要,因为-
是chr(45)
。抱歉,只是复制粘贴错误,它是字符串。@DStanley它在列表中存储为“1”和“-9”。正如胡安·洛佩斯所暗示的,快速查看显示“-”在“1”之前。因此,ASCII排序顺序在“1”之前有“-9”,因为它不回答问题,也不复制问题。他的Order
字段的类型为string
。OP关于Order字段的注释是一个字符串值,在我写答案时已添加。请在编辑后查看我的答案。@Jeroenvanevel,那么为什么你的答案比我的好呢?你提供了和我一样的解决方案!顺便说一句:同时!注意:我没有时间搜索默认使用的比较选项
,所以请在答案中自由编辑。
public class CustomComparer : IComparer<string>
{
public int Compare(string x,string y)
{
return CultureInfo.CurrentCulture.CompareInfo.Compare(x, y, CompareOptions.Ordinal);
}
}
new[] {"1", "-9"}.OrderByDescending(x => x, new CustomComparer())