gpt4 book ai didi

asp.net - 如何使用在控制台应用程序中应用的 DisplayFormat DataFormatString 输出属性(理想情况下按字符串查询对象)?

转载 作者:行者123 更新时间:2023-12-04 07:52:59 25 4
gpt4 key购买 nike

这是我拥有的一个类(class)的简化 View :

public class SalesMixRow
{
[DisplayFormat(DataFormatString = "{0:c0}")]
public decimal? DelSales { get; set; }
}

在 Web 应用程序 Razor View 中,我可以获得该值的格式为:
@Html.DisplayFor(model => model.DelSales)

我有一个控制台应用程序也需要输出这个值。如何在控制台应用程序中输出它而不在任何地方重复 DataFormatString?

更新:我喜欢使用反射的想法,因为这解决了我要单独提出的问题!这是一个完整的工作示例,我通过字符串路径获取属性并使用 DisplayFormat 输出(如果可用):
void Main()
{
var model = new SmrDistrictModel
{
Title = "DFW",
SalesMixRow = new SalesMixRow
{
DelSales = 500m
}
};

Console.WriteLine(FollowPropertyPath(model, "Title"));
Console.WriteLine(FollowPropertyPath(model, "SalesMixRow.DelSales"));
}

public static object FollowPropertyPath(object value, string path)
{
Type currentType = value.GetType();
DisplayFormatAttribute currentDisplayFormatAttribute;
string currentDataFormatString = "{0}";

foreach (string propertyName in path.Split('.'))
{
PropertyInfo property = currentType.GetProperty(propertyName);
currentDisplayFormatAttribute = (DisplayFormatAttribute)property.GetCustomAttributes(typeof(DisplayFormatAttribute), true).FirstOrDefault();
if (currentDisplayFormatAttribute != null)
{
currentDataFormatString = currentDisplayFormatAttribute.DataFormatString;
}
value = property.GetValue(value, null);
currentType = property.PropertyType;
}
return string.Format(currentDataFormatString, value);
}

public class SmrDistrictModel
{
public string Title { get; set; }
public SalesMixRow SalesMixRow { get; set; }
}

public class SalesMixRow
{
[DisplayFormat(DataFormatString = "{0:c0}")]
public decimal? DelSales { get; set; }
}

最佳答案

您可以使用反射从类中检索属性。然后从属性中获取格式字符串,并使用 string.Format 应用它.

SalesMixRow instance = new SalesMixRow { DelSales=1.23 };

PropertyInfo prop = typeof(SalesMixRow).GetProperty("DelSales");
var att = (DisplayFormatAttribute)prop.GetCustomAttributes(typeof(DisplayFormatAttribute), true).FirstOrDefault();
if (att != null)
{
Console.WriteLine(att.DataFormatString, instance.DelSales);
}

(请注意,您需要添加程序集 System.ComponentModel.DataAnnotations.dll ,其中包含 DisplayFormat 属性。)

关于asp.net - 如何使用在控制台应用程序中应用的 DisplayFormat DataFormatString 输出属性(理想情况下按字符串查询对象)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com