C# 将米转换为公里,并在Viewmodel中设置值格式

C# 将米转换为公里,并在Viewmodel中设置值格式,c#,asp.net-mvc,viewmodel,C#,Asp.net Mvc,Viewmodel,我有Viewmodel: public class PartnerSearchResultVM { public int Id { get; set; } public string Name { get; set; } public string Latitude { get; set; } public string Longitude { get; set; } public double Distance { get; set; } pub

我有Viewmodel:

public class PartnerSearchResultVM
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Latitude { get; set; }
    public string Longitude { get; set; }
    public double Distance { get; set; }
    public string Classification { get; set; }
}
我从数据库中得到的距离以米为单位,如下所示:235458764478263米

我想介绍2.35公里


如何更改Viewmodel以在那里进行转换(如果它是进行转换的最佳位置)

我将为您的模型添加只读属性

public double Kilometers { get { return this.Distance / 1000; } }
如果你想要回一个格式化的字符串,我会创建第二个只读属性

public string KilometerDisplay { 
    get { 
        return String.Format("{0:0.00}km", this.Kilometers); 
    } 
}
不过,根据您的用例,通用格式函数可能是合适的。也许作为一种扩展方法:

[Extension]
public string FormatDistance(this double distance) {
    return distance.FormatDistance("");
}

[Extension]
public string FormatDistance(this double distance, string unitString) {
    return return String.Format("{0:0.00}{1}", distance, unitString);
}
// for meters:   result.Distance.FormatDistance("m");
// for kilometers:  result.Kilometers.FormatDistance("km");

然后在距离属性中添加一些XML文档,解释它是以米为单位的。

米中的
是错误还是实际切换了区域设置和距离转换?而不是双精度,我将使用一个字符串并返回2.35km作为字符串,因为Distance属性已经存储了确切的值,并且在这个上下文中OP希望格式化输出。但是图案很好!嗨,丹,谢谢。您如何将该格式应用于#.##?您更喜欢String.format还是DataAnnotation?如果不熟悉您的项目,很难回答这个问题。选择最适合您情况的技术。@Dan-o出于好奇,您为什么要在扩展方法中添加
ExtensionAttribute
?该属性在C#中是多余的,因为编译器会自动修饰这些方法。