繁体   English   中英

通过属性c#解析字符串值

[英]Parse string value via attribute c#

我正在使用ASP.NET MVC并且具有以下模型类:

public enum ListType
{
    black,
    white
}
public class ListAddSiteModel : ApiModel
{
    [RequestParameter]
    public ListType list { get; set; }
}

但这并不符合我的要求。 当我不在所请求的URL传递list参数时,我的列表是black 但我希望,如果list参数不是blackwhite字符串,则list必须为null。 是否可以编写自定义属性[IsParsable]并将其添加到列表属性。

public class ListAddSiteModel : ApiModel
{
    [RequestParameter]
    [IsParsable]
    public ListType list { get; set; }
}

简单的办法:

public enum ListType
{
    novalue = 0, 
    black,
    white
}

虚拟对象必须是第一个(映射到0 == default(Enum)

传递黑色或白色的值的唯一方法是传递int 您可以通过在设置器中添加一个调用Enum.IsDefined的支票来防止这种情况 ,例如:

ListType? _listType;
public ListType? List
{
    get
    { 
        return _listType;
    }
    set
    {
        //Enumb.IsDefined doesn't like nulls
        if (value==null || Enum.IsDefined(typeof(ListType),value))
            _listType=value;
        else
            _listType=null;
    }
}

您还可以将其与Henk Holterman的答案相结合,并在枚举中添加等于0的NA成员。 这可能会使您的代码更易于阅读。

在这两种情况下,您的代码都必须注意特殊值( NAnull )。 使用可为空的类型会使您更难忘记这一点,但是会使您的代码有些混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM