相关疑难解决方法(0)

启用Enum(带Flags属性)而不声明每个可能的组合?

我如何打开一个设置了flags属性的枚举(或更精确地用于位操作)?

我希望能够在与所声明的值匹配的开关中击中所有情况.

问题是,如果我有以下枚举

[Flags()]public enum CheckType
{
    Form = 1,   
    QueryString = 2,
    TempData = 4,
}
Run Code Online (Sandbox Code Playgroud)

我想用这样的开关

switch(theCheckType)
{
   case CheckType.Form:
       DoSomething(/*Some type of collection is passed */);
       break;

   case CheckType.QueryString:
       DoSomethingElse(/*Some other type of collection is passed */);
       break;

   case CheckType.TempData
       DoWhatever(/*Some different type of collection is passed */);
       break;
}
Run Code Online (Sandbox Code Playgroud)

如果"theCheckType"设置为CheckType.Form | CheckType.TempData我希望它能同时击中两个案例.显然,由于中断,它不会在我的示例中同时出现,但除此之外它也会失败,因为CheckType.Form不等于CheckType.Form | CheckType.TempData

那么我能看到的唯一解决方案就是为每个可能的枚举值组合做一个案例?

就像是

    case CheckType.Form | CheckType.TempData:
        DoSomething(/*Some type of collection is passed */);
        DoWhatever(/*Some different type of collection is passed */);
        break; …
Run Code Online (Sandbox Code Playgroud)

c# enums flags bit switch-statement

44
推荐指数
6
解决办法
3万
查看次数

使用自动修剪字符串反序列化json

我使用Newtonsoft.Json库

有没有办法在反序列化期间修剪任何字符串数据的空格?

class Program
{
    class Person
    {
        [JsonProperty("name")]
        public string Name;
    }
    static void Main(string[] args)
    {
        var p = JsonConvert.DeserializeObject<Person>(@"{ name: "" John "" }");
        Console.WriteLine("Name is: \"{0}\"", p.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

添加:

最后,我有自定义转换器的解决方案.不好,但比Trim()更好.

如果有人有任何想法如何以更自然的方式做,请欢迎.

class Program
{
    sealed class TrimAttribute : Attribute
    { }

    class TrimConverter<T> : JsonConverter where T : new()
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var jObject …
Run Code Online (Sandbox Code Playgroud)

c# json.net deserialization

12
推荐指数
2
解决办法
7583
查看次数

标签 统计

c# ×2

bit ×1

deserialization ×1

enums ×1

flags ×1

json.net ×1

switch-statement ×1