首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在c#中检查动态匿名类型上是否存在属性?

如何在c#中检查动态匿名类型上是否存在属性?
EN

Stack Overflow用户
提问于 2012-03-31 22:19:01
回答 14查看 133.3K关注 0票数 143

我有一个匿名类型对象,它是我从一个方法接收的动态对象,我想检查该对象上是否存在一个属性。

....
var settings = new {
                   Filename="temp.txt",
                   Size=10
}
...

function void Settings(dynamic settings) {
var exists = IsSettingExist(settings,"Filename")
}

我该如何实现IsSettingExist?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-03-31 22:58:30

  public static bool IsPropertyExist(dynamic settings, string name)
  {
    if (settings is ExpandoObject)
      return ((IDictionary<string, object>)settings).ContainsKey(name);

    return settings.GetType().GetProperty(name) != null;
  }

  var settings = new {Filename = @"c:\temp\q.txt"};
  Console.WriteLine(IsPropertyExist(settings, "Filename"));
  Console.WriteLine(IsPropertyExist(settings, "Size"));

输出:

 True
 False
票数 180
EN

Stack Overflow用户

发布于 2015-05-29 19:39:49

public static bool HasProperty(dynamic obj, string name)
{
    Type objType = obj.GetType();

    if (objType == typeof(ExpandoObject))
    {
        return ((IDictionary<string, object>)obj).ContainsKey(name);
    }

    return objType.GetProperty(name) != null;
}
票数 42
EN

Stack Overflow用户

发布于 2012-03-31 22:37:27

如果您可以控制设置对象的创建/传递,我建议您使用ExpandoObject。

dynamic settings = new ExpandoObject();
settings.Filename = "asdf.txt";
settings.Size = 10;
...

function void Settings(dynamic settings)
{
    if ( ((IDictionary<string, object>)settings).ContainsKey("Filename") )
        .... do something ....
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9956648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档