Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串类型列表转换为十进制类型列表_C#_Linq_List_Sorting_Casting - Fatal编程技术网

C# 将字符串类型列表转换为十进制类型列表

C# 将字符串类型列表转换为十进制类型列表,c#,linq,list,sorting,casting,C#,Linq,List,Sorting,Casting,我的列表中有一个列表 其中MyClass说明为 public class MyClass { public Nullable<decimal> Id { get; set; } public string Marks { get; set; } public string rank { get; set; } } 这里,Marks的类型是String,因此,如果我尝试Sort/OrderByIt by Marks,它

我的列表中有一个
列表

其中
MyClass
说明为

 public class MyClass
    {
        public Nullable<decimal> Id { get; set; }
        public string Marks { get; set; }
        public string rank { get; set; }
    }
这里,
Mark
s的类型是
String
,因此,如果我尝试
Sort/OrderBy
It by Marks,它会给我错误的排序顺序

是否有任何方法可以将标记列的类型从字符串-->十进制转换为

您必须准备另一个具有适当属性类型的类:

public class MyClass2
{
    public Nullable<decimal> Id { get; set; }
    public decimal Marks { get; set; }
    public string rank { get; set; }
}
也可以在不更改属性的情况下进行排序:

var orderedList = source.OrderBy(x => decimal.Parse(x.Marks)).ToList();

将mark的属性更改为decimal

public class MyClass
{
    public Nullable<decimal> Id { get; set; }
    public decimal Marks { get; set; }
    public string rank { get; set; }
}
公共类MyClass
{
公共可空Id{get;set;}
公共小数点{get;set;}
公共字符串秩{get;set;}
}

我意识到这很糟糕(可能有一些我没有想到的极端情况)。。但是您也可以“从技术上”这样做:
var newList=list.OrderBy(x=>x.Marks.Length),然后by(x=>x.Marks)
。它按字符串的长度排序。。然后根据它们的价值。不过,我并不真的推荐它。。但是我想我会把它放在那里。谢谢你宝贵的回答@SimonWhitehead这是一个很好的解决方案旁注:
Id
as
decimal
?这是非常奇怪和不寻常的。你真的期望像
3.14
那样的
Id
?这只是一个例子@AlexeiLevenkov顺便说一句,我会记住的time@SimonWhitehead虽然你的解决方案是非常可观的,但它包括一个缺点,正如我提到的,我想把我的列从字符串转换为十进制,所以如果标记的形式是25.75,你的解决方案失败
var orderedList = source.OrderBy(x => decimal.Parse(x.Marks)).ToList();
public class MyClass
{
    public Nullable<decimal> Id { get; set; }
    public decimal Marks { get; set; }
    public string rank { get; set; }
}